X86逆向教程15:OD脚本的编写技巧

本章节我们将学习OD脚本的使用与编写技巧,脚本有啥用呢?脚本的用处非常的大,比如我们要对按钮事件进行批量下断点,此时使用自动化脚本将大大减小我们的工作量,再比如有些比较简单的压缩壳需要脱壳,此时我们也可以写出属于自己的脱壳脚本,以后遇到了对应的壳就可以使用对应脚本快速的搞定,好了废话不多说,开始进入今天的正题吧。

------------------------------------------------------------
本章难度:★☆☆☆☆☆☆☆☆☆
课程课件:CM_15.zip
------------------------------------------------------------

Delphi/BC++ 批量下断脚本

脚本代码,保存为 Delphi.osc

var Addr                      // 局部变量
mov Addr,401000               // 指定地址为401000

loop:
	find Addr,#740E8BD38B83????????FF93????????#     // 查找特征码,并将地址放入RESULT(00401000)
	cmp $RESULT,0                                    // 如果为0则直接跳出循环
	je Exit
	add $RESULT,0A                                   // 相加 (00401000+0A=0040100A)
	bp $RESULT                                       // 下断
	add $RESULT,1                                    // 每次递增1
	mov Addr,$RESULT                                 // 将地址赋给Addr
jmp loop
Exit:
ret

 

1.OD直接载入CM课件中的【Project1.exe】这是一个Delphi写的测试程序,此时我们运行这个程序,会看到有三个按钮。

 

2.回到OD反汇编窗口,点击【右键】,运行脚本打开,选择我们上方保存下来的脚本文件。

 

3.选择好脚本以后,我们点击重新载入程序,然后按下【Alt +B】会看到所有的断点已经下好了,这个程序很小所以就这么几个。

 

4.运行程序点击,弹窗按钮,程序会断下,直接【F7】进入CALL的内部就能看到按钮的核心代码了。

 

VB6.0 批量下断脚本

脚本代码,保存为 VB6.osc

var Addr
mov Addr,401000

loop:
	find Addr,#816C2404??000000#
	cmp $RESULT,0
	je Exit
	add $RESULT,08
	bp $RESULT
	add $RESULT,1
	mov Addr,$RESULT
jmp loop
Exit:

 

1.OD直接载入CM课件中的【VB6.exe】这是一个VB写的测试程序,我们运行这个程序。

 

2.回到OD反汇编窗口,点击【右键】,运行脚本打开,选择我们上方保存下来的脚本文件。

 

3.选择好脚本以后,我们点击重新载入程序,然后按下【Alt +B】会看到所有的断点已经下好了,这个程序很小所以就这么几个。

 

4.运行程序点击,弹窗按钮,程序会断下,直接【F8】进入CALL的内部就能看到按钮的核心代码了。

 

易语言 批量下断脚本

脚本代码,保存为 易语言.osc

var Addr
mov Addr,401000

loop:
	find Addr,#FF55FC5F5E#
	cmp $RESULT,0
	je Exit
	bp $RESULT
	add $RESULT,1
	mov Addr,$RESULT
jmp loop
Exit:
ret

 

1.OD直接载入CM课件中的【易语言.exe】这是一个易语言写的测试程序,我们运行这个程序。

 

2.回到OD反汇编窗口,点击【右键】,运行脚本打开,选择我们上方保存下来的脚本文件。

 

3.选择好脚本以后,我们点击重新载入程序,然后按下【Alt +B】会看到所有的断点已经下好了,这个程序很小所以就这么几个。

 

4.运行程序点击,弹窗按钮,程序会断下,直接【F7】进入CALL的内部就能看到按钮的核心代码了。

 

VC++6.0/MFC 手动下断点

VC6的特征比较特殊,这里我们只能手动下断了

1.OD直接载入CM课件中的【VC++.exe】这是一个易语言写的测试程序,我们运行这个程序。

 

2.按下【Ctrl +F】按钮,输入命令【sub eax,0a】,会搜索到如下代码,我们选中【sub eax,0a】的下面一条指令处回车。

 

3.程序会跳转到如下位置,我们在跳转后的【00416043】处下断点,VC6只有这一处。

 

4.回到程序,我们点击【注册按钮】然后程序会断在CALL的位置上,我们直接【F7】进入到CALL的内部,然后在按下两次【F8】

最后就是VC++的按钮事件核心代码。

 

编写自动脱壳脚本

 

 

 

 

 

 

 

1

转载于:https://www.cnblogs.com/LyShark/p/11197005.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值