于是,当下次再ollydbg加载调试你的程序的时候,就会出现下面的情景
曾经很长一段时间(包括现在),很多软件或加密壳都会检查是否有调试器正在调试自己,比如tls段会在加载时被执行,如果检查到自己正在被人调试破解,就会设置一个tag让程序跑到没啥用的地方去或者直接退出重新,也有利用变形的PE头让调试器无法加载,总之手段很多.
可惜这还是没什么卵用,比如IsDebugPresent可以通过修改FS寄存器的标志位来让它彻底哑火,同样的手段包括但不限于检查int 3软中断,Raw Call,Query PEB,检查Debug Privilege和父进程等等等等,都有绕过的方式.
暗桩嘛,只要你插,一个一个拔总是拔的完的
好了,还有啥法子不,放心道高一尺魔高一丈,现在我们来到了现在最流行的,防破解V3.0 VMP时代,
先澄清一下,这里的VMP并不是VMP壳,它全程叫Virtual Machine Protection,简单来说,为啥我们破解软件那么轻车熟路,还不是因为x86 x64 arm的那堆汇编指令集我们太熟悉了呗.要是我们自己发明一套指令集,然后用这个指令集写程序并运行在我们自己的虚拟机上,那么,破解者一进来,看到的不就是一脸懵逼了么
可惜的是,VM的运行机制决定了它可能造成几十倍乃至几百倍的性能损失,所以,VMP必须用于保护那种关键且不是性能瓶颈的代码,否者你的软件跑起来就会像
那么,VMP保护机制是完美的么,当然不是,VMP说白了,也只能做到延长分析时间,你要是把VMP做的足够复杂,足够让一个Cracker醉生梦死了,但是如果这个时间足够久,你的软件足够的值钱让人有欲望来破解, 他们仍然可以充分地分析你VM机的运行机制,当你的VM机运行机制被摸清了,软件就离沦陷不远了.
不过你可以放心,分析VM机执行机理,可比自己写VM机要头疼多了,毕竟一个是你需要通过代码来揣测别人的思路,而另一个本身是自己的思路转为代码,因此基于这点可以说:
破解软件比制作软件简单,在很多情况下,不存在的!
你可能会问了,为什么现在市面上那么多软件,那么多游戏,购买了那么多听起来那么牛逼的保护软件,结果还是被破解了.而且刚发出来一天就被破解了.
其实很大的问题就出在这个商业保护软件(比如保护壳)上,因为这类保护壳大多都会被卖给一大票的软件开发商,有一句话叫树大招风,就像现在流行的VMP保护机制,之所以能保护,是因为其运行机理破解者不明确,如果你这个软件就给自己用,而且你这软件还不怎么值钱,除非大佬空虚寂寞冷,不然谁会有那闲工夫去分析你的虚拟机是怎么跑的,但商业保护壳不同,不论其采用什么样的保护机制,只要分析过一遍搞清楚了,几乎所有使用这类保护机制的软件都会沦陷,而且在灰色产业上.这种破解甚至还颇有利可图,只要这个保护机制不更新,一次投入,长期回报.于是只有说在第一次分析时会花上很长的时间,之后就都只是玩套路了.
因此,购买商业保护壳,其实其保护效果并没有想象中的那么强,很可能在灰色产业中形同虚设,甚至一个具有反逆向基础的码农自己写的说不定还更有效果.当然一个软件是被破解概率高不高,仍然是我之前提到的那句话:防破解不是让软件无法破解,而是让破解软件的成本远大于购买软件的成本
毕竟你说你一个软件拿来开源都没人爱用,你还整天琢磨着怎么才不会被破解,寒掺不老铁.