本帖最后由 有易语言有希望 于 2019-6-27 13:56 编辑
易语言防破四帖:1.防爆破 2.开放性网络验证防山寨 3.反调试 4.暗桩
第一帖:「固易而为」易语言防破J之窗口防push
http://bbs.125.la/forum.php?mod=viewthread&tid=14388463
第二帖:「固易而为」易语言防破J之网络验证防山寨
http://bbs.125.la/forum.php?mod=viewthread&tid=14390080
第三帖:「固易而为」易语言防破J之软件反调试开源?
http://bbs.125.la/forum.php?mod=viewthread&tid=14397751
前面三贴已经教大家如何简单的防破J山寨和反调试,被破J后程序内部的处理代码我都是用的死循环,那这就叫暗桩
例如一帖中的
以及二帖中的
现在简单的结束()已经不符合人们的胃口,而且结束()也真的很容易被人结束,以下是易语言源码对比汇编代码:
结束 ()信息框 (“ok”, 0, , ) 判断循环首 (2 = 取整 (2 )) 判断循环尾 ()信息框 (“ok”, 0, , )
上图是结束,结束后就堆栈窗口直接就能看到这句调用在何处,也很容易被人断下,因为是api断点,开头55直接C3即可干掉这个结束()
上图是判断循环呢,由于看起来像有效功能代码,一般不会轻易nop或jmp掉
这两种虽然看起来都是改一个je或者retn就能搞定的,但过程不一样 ,不单步是不会发现死循环的,但单步不单步都会发现结束
还有例如写内存崩溃:
写到内存 (786666656756, 56566, )
置入代码异常崩溃:
置入代码 ({ 49, 192, 247, 240 })
总之就是不要用API函数结束或退出,或者提示什么信息框吓唬cracker,当然 软件正常退出还是要用到结束()的,写崩溃不太优雅。
这些代码在无混淆无加密虚拟的情况下,大家看的一清二楚,觉得大同小异,实际上在代码加密VM等等后,这些区别就很大了,这一篇有点鸡肋,就分享到这吧
最后再分享一点有营养的彩蛋,根据第三帖写的好用有效的汇编反调试:
http://e.125.la/fun-293.html
图中附件及源码:
易语言防破J第四讲软件暗桩示范.zip
(331.41 KB, 下载次数: 196)
|