关于【AntiDbg.VB6 专用加密壳】反调试解决方案
本帖最后由 罗萨 于 2020-4-2 16:33 编辑前言
刚才在坛子里发现JuncoJet大佬发的一个AntiDbg.VB6专用加密壳,大佬的反调试强度还是非常强的,新手的话遇到这个肯定不知道如何下手了,我这里只使用了作者自带的一个vb程序做的测试 ,下面看分析。
原程序出处:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1146819&pid=31079914&page=1&extra=#pid31079914
楼主使用的OD:https://www.lanzouj.com/iasngyb
准备工作
首先设置一下他的软件,我这里是把入口点修改了,入口点那里随便输入一个数值就可以。这样强度会大大提升。目录下还会生成一个AntiDbg.dll这里先不管他。
程序打开界面,左上角是一个时钟。
反anti
直接用od载入软件之后直接报错点确定之后发生异常停止工作,看来代码在系统领空时就经过了反调试处理。我们首先得想办法把它断下来,我这里提供一个极端的办法。
在od设置中,将事件设置为系统断点,并且让他把所有条件全部中断,这样不管是什么程序一定会断下来,这样才方便我们调试,这个方法具有局限性。一般调试时一定不要这样设置。
再次载入后直接停在了系统领空,同时在内存映射窗口内发现程序还没有加载主程序内存,我们要F9几次只到开始出现主程序区段内存。
F9几次之后内存窗口出现了区段,同时程序报错无法停止在我们刚刚在加壳软件中设置的断点。没关系点确定就可以。
我们再次来到内存窗口,在.text段右键跟随,这样就来到了程序的代码段。
对于VB6程序我们都知道入口点会调用一个字符串ASCII "VB5!6&vb6chs.dll",并调用 msvbvm60.ThunRTMain函数加载程序,我们可以看到加密后的软件把入口点做了处理,那么我们手动修补一下试试。
这里是未修改程序入口点。
回到加密后的程序,我们在这里新建EIP。
同时写入代码
push 004011A4 ;这个push的地址找个空的长度为32的地址随便写就可以,因为一会要填充字符串。我这里偷个懒直接把未修改的程序入口复制过来了。
call 00401044 ;这里call的地址就是上面这个ThunRTMain函数,在jmp ThunRTMain这里空格,把里面的地址复制,替换掉这里的call就可以了
然后在将push 004011A4 这里跟随,立即数,把字符串填充就可以,二进制代码为:
56 42 35 21 36 26 76 62 36 63 68 73 2E 64 6C 6C
最后效果如图
保存所有修改这里程序就可以运行了
以上,@JuncoJet
对了保存之后要用lordPE修改一下入口点 JuncoJet 发表于 2020-4-2 17:16
试了下,改了会出错的呢
我电脑里没有vb,你可以自行测试一下,text段搜索2A 00 00 00 00 00 00 00这句上面应该就是填充字符串的地方了,我测试的样本少,可能有局限性 JuncoJet 发表于 2020-4-2 16:41
咳咳,push 的值好像没写分析哪里来的
有作弊嫌疑啊
vb6标准入口点都是加载的哪个dll字符串,push只是加载这个字符串,随便找个空的地址填进去就可以 大佬牛X!!!{:1_919:} 咳咳,push 的值好像没写分析哪里来的
有作弊嫌疑啊 罗萨 发表于 2020-4-2 16:49
vb6标准入口点都是加载的哪个dll字符串,push只是加载这个字符串,随便找个空的地址填进去就可以
呃,好像没试过,我去试试 罗萨 发表于 2020-4-2 16:49
vb6标准入口点都是加载的哪个dll字符串,push只是加载这个字符串,随便找个空的地址填进去就可以
试了下,改了会出错的呢
测试的样本不多,貌似以2A000000为关键位置呢 罗萨 发表于 2020-4-2 17:55
测试的样本不多,貌似以2A000000为关键位置呢
@JuncoJet
页:
[1]
2