【wonderzdh】-逆向学习笔记第七篇 -ODbgScript脚本编写快速入门
本帖最后由 wonderzdh 于 2014-8-20 18:56 编辑以前写过一些帖子,现在算是全职做逆向了,当然~还只是实习...顺便把我学习的步伐贴在吾爱,赠人玫瑰手有余香。 ODbgScript是个非常有用的OD插件,可以模拟OD的操作,例如F8单步,申请变量来存放各个寄存器的值,或是内存的值,然后cmp比较,je到指定标签,下断,断点回调等等…可以说是实现了自动化破解,尤其是在自动脱壳方面有较多的成品。关于ODBScript的脚本有很多前人写的例子,追随前人的步伐:http://tools.pediy.com/debuggers_od_script.htm废话不多说,下面进入正题。目标程序是我写的一个远程线程注入的小工具,加壳:ASPack 2.28。脱壳方法介绍两种,一种单步,遇到向上的跳转,在下一行F4。首先OD载入,断在入口点:
F7进入第一个call EB00A执行到retnF7进入第二个callEB014这里就是壳对数据进行解码了,我们可以单步跟下去,注意回跳就好了。也可以直接Ctrl + F9 运行到返回代码。
这样就直接来到了oep,按下Ctrl + a分析一下。
接下来就是dump出内存,修复iat了,在此不做介绍。我们要做的是写一个ODbgScript脚本来执行我们刚刚的操作。
首先好习惯,定义一个开始标签,就像子程序一样,但子程序需要人去调用,标签只是一个位置标识,用于跳转,定义标签不会中断脚本运行。STI就是执行一次F7单步步入的命令,来两次,接着RTR执行到返回,再F7两次,执行到返回,这个脚本与我们手动的操作一一对应。最后来到oep,eip就是指向oep,在eip指向的地方写个标签:“这就是oep”,然后愉快的结束脚本。好了,第一种模拟我们手动操作来写脚本的例子就结束了,这种脚本肯定不通用,只能针对特定的版本,甚至只能用于特定的程序…接下来我们根据esp定律来写个稍微“万能”点的脱壳脚本。第二种:ESP定律,根据堆栈平衡原理,入口点的esp的值和程序oep的esp值是一样的。就是说壳执行之前和执行完之后跳到oep时,栈顶的地址是一样的,而esp就是栈顶指针。依旧OD载入,断在入口点:
第一句pushad压入了数据,改写了esp的值,此时我们对esp指向的地址下断。可以在命令行直接输入:hr esp ,意思是对esp指向的地址下硬件访问断点。然后F9运行程序,来到如下地址:
这里我们看到下边就是retn,我们可以单步过去,也可以Ctrl+ F9运行到这个retn的下一句。
我们又直接到oep了,接下来动手写脚本。
定义一个开始标签,申请一个变量,用来存放esp的值,以便于比较esp是否被改变。下边是一个循环标签,先把esp赋值给我们的变量vESP,然后单步F7,判断现在的esp是否和单步前的esp有变化,如果esp和vESP相等,跳转到循环标签处,继续单步判断。如果变化了,可以断定是对堆栈进行操作,脚本就给用户一个提示,是否停止脚本,(停止的意思是接下来你自己手动操作),如果不是,就根据esp定律在esp指向的地方下个断点,设置一下断点回调事件(EOB chufa),如果断下来,脚本就会获得控制权限,执行chufa标签。Run就是F9运行。断下后,chufa标签里先清除所有断点,rtr是Ctrl + F9运行到返回,就来到oep了,接着对oep写个标签,二stop标签下的ret依旧会被执行,这就是为什么我说定义标签不会中断脚本运行的原因了。下面来测试一下第二个脚本,在Plugins目录下选中ODbgScript->Run,然后选择我们刚刚写的脚本,直接就运行了,如果要人机交互,用MSGYN命令就好。
好了,附件都在下边,相信会用OD的人看过这篇都会写自己的脚本了,如果有什么问题可以回帖交流。脚本编辑器下载地址:http://bbs.pediy.com/showthread.php?t=105266第一篇-【某培训】学前测试-程序多开第二篇-吾爱扣扣的一个CM第三篇 - CM大赛作品 - BambooQJ第四篇 - CC网络验证 - 分析并爆破CC第五篇 - 飘零商业3.5 - 分析并爆破飘零第六篇 - VM的CC也爆破
感谢分享!!!! 这个不错,谢谢分享。 你会慢慢体会到她的魅力的,可以查看一下命令大全,或者附件中我整理的命令,目前已知的方式应该能覆盖到绝大部分。不知QQ你还有什么思路是未涉及到的?
@吾爱扣扣 本帖最后由 wonderzdh 于 2014-8-20 21:18 编辑
你不是本人还是你本来就这么搞笑?
@吾爱扣扣
学习了,感谢分享
页:
[1]