-
-
[原创]一个OD插件/花指令(附件重新上传了)
-
发表于:
2005-2-23 14:33
17335
-
我新学脱壳,每当我碰到壳中的花指令时,头痛不已.
我也看到工具区有动态去除花指令的OD插件,但不甚合我意.原因有2:
1 我经常碰到象
$: JMP $+6
$+5: DB ? ;也许1个,也许2个无用的字节
$+6: PUSH ESI ;真正的指令
这样的指令序列,我总不能定义一个好的配置,去除这样的花指令.因为也许正常的指令序列也许象这样.
2 就算真的你去除了这些花指令(即使你没有意外的NOP掉任何一个正常的指令),我们知道很多壳要利用这些垃圾(花指令)
做CRC校验的,一但更改了这些指令,恐怕你所调试的程序就无疾而终了.
我的意思是:当我只需要仔细观察某段汇编指令(比如我需要研究它的算法),我需要把这些花指令去掉.
当我观察完这些代码,我就把这些指令还原,以避开CRC陷阱.
基于以上,我做了个小插件.
以下是应用示例:
我有一段代码,看 00955302 的指令,跳转到 0095530F 的中间,所以我用这个插件去除花指令.
00955302 /E9 09000000 JMP 00955310
00955307 |5D POP EBP ; NOTEPADy.00400000
00955308 |D2A3 A0591EFF SHL BYTE PTR [EBX+FF1E59A0], CL
0095530E |CC INT3
0095530F |15 668BF3FF ADC EAX, FFF38B66 ;跳转到一条指令的中间
00955314 34 0F XOR AL, 0F
代码变成如下,好看多了 :)
00955302 /E9 09000000 JMP 00955310
00955307 |5D POP EBP ; NOTEPADy.00400000
00955308 |D2A3 A0591EFF SHL BYTE PTR [EBX+FF1E59A0], CL
0095530E |CC INT3
0095530F |90 NOP
00955310 \66:8BF3 MOV SI, BX
00955313 FF340F PUSH DWORD PTR [EDI+ECX]
好了,还原.
00955302 /E9 09000000 JMP 00955310
00955307 |5D POP EBP ; NOTEPADy.00400000
00955308 |D2A3 A0591EFF SHL BYTE PTR [EBX+FF1E59A0], CL
0095530E |CC INT3
0095530F |15 668BF3FF ADC EAX, FFF38B66 ;跳转到一条指令的中间
00955314 34 0F XOR AL, 0F
可以继续执行了.
使用:
1 将AJUNK.DLL拷贝到OD的插件目录.
2 在我们要NOP掉的指令处,右键弹出菜单,选择要NOP掉的字节数量.(快捷键 1-6)
3 恢复.(快捷键 9 取消一次操作, 0 恢复所有的指令)
本来,我想在 JMP XXXXX 的指令处,就可以直接找到花指令的所在,自动去除的.但我刚学用OD,对OD还很陌生,
所以只有用你自己的脑袋来判断了.
我纯粹菜鸟一个,写这个东西只是好玩.如有遗笑方家的地方,还望各位包含.
也希望各位老大帮助我们这些 newbie, 不胜感谢.
以下是插件的DLL和源码.
因为OD提供的输入库是C的,我使用的是VC++6,所以对plugins.h做了点修改,所有的引入,引出函数前都+了个 下划线.
又:POSTPOST http://bbs.pediy.com/editpost.php HTTP/1.0
个插件有点意思,请emai to : lenglianxi@tom.com, 我会将DLL和源码一并寄给你。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课