现在的软件为了保护自身不被修改,防止脱壳,不少都加上了自身的完整性校验,一旦发现自己的关键指令被修改或被脱壳了之后,毫无提示地就拒绝运行。这种令人头疼的自校验相信难住了不少跟我一样的菜鸟!后来再遇到自校验,就只好开2个OD,下断CreateFilaA,然后,一步一步地跟,一句一句地对照,不知道经过多少步之后,哈,发现了一个跳转不一样,激动地改掉,成功。对于这样直接比较的软件校验还可以用这种不怕脏不怕累的方法搞定,但是对于那种将自身一个字节一个字节读取出来,然后经过超级变态复杂地算法运算过后,得到了几个值,偷偷记下来,或作为后面程序运行的关键值,或者分开几个地方偷偷比较,如果不对,就异常啦!这样的校验,相信光凭耐心和运气是不行的吧?前几天在FLY老大的论坛偶尔看到了fxyang大侠的文章:浅谈cool edit
pro2.1脱壳后解决自校验,
就是这样的校验方法。fxyang大侠的解决方法是:跟踪原版程序,由于校验算法复杂,不分析过程,只
看得到几个结果,记下他们的值,然后在脱壳后的文件中强行将原版的值写入,最后问题解决。这种方法虽然
巧妙,但是还是要分析原版计算出的几个值,并且要在脱壳文件中一个一个写入,修改字节过多,容易出错,
毕竟如果有一个地方没有看到就会前功尽弃。有没有更好更简便的方法呢?呵呵,终于到主题了,呼~ 静下心来仔细想一下,总结一下程序是如何校验的:首先GetModuleFileName得到自身路径和文件名,
然后CreateFile打开自身,接下来,如果是简单地比较大小,就调用GetFileSize得到程序大小,和原版大小比
较,size大了就OVER,这种比较简单;如果要进行CRC等算法校验,就会CreateFileMapping映射的一块内存中
准备ReadFila读取计算,最后计算出几个值... 呵呵,注意到了吗?无论哪中方法,都要CreateFile打开自身
,才能进行下一步操作,那想到了吗?既然程序要打开文件校验,我们就想办法让它不打开自身而是打开原版
去计算、校验,这样无论它怎么变态,复杂,计算结果都是正确的 .
对付自校验
最新推荐文章于 2019-11-12 14:44:51 发布