wzb 发表于 2011-6-23 10:54

一个简单的花指令的去处

前几天,我在求助里看到了一个CreakMe,文件名挺有意思,《违章建筑拆除宝典》,我还真把它当成城管什么了。
废话不说了,这个CreakMe加的是UPX的壳,可能是UPX的变种吧,PEID查不出来,并且加入了大量的花指令

下断点bp LoadLibraryA,返回后到这里了
00C131A4    FF55 10         call    dword ptr                ;LoadLibraryA
00C131A7    E8 02000000   call    00C131AE
00C131AC    1C B9         sbb   al, 0B9
00C131AE    872C24          xchg    dword ptr , ebp
00C131B1    8DAD 46710000   lea   ebp, dword ptr
00C131B7    872C24          xchg    dword ptr , ebp
00C131BA    C3            retn

这里就是花指令了,你如果想F8过00C131A7,那么就跑飞了,应该F7进入。
因为OD的F8的原理是在下一条指令处(00C131AC)下CC断点,然后run。
但是这个call    00C131AE把00C131AC压入堆栈后又给它加了7146,
使得返回地址不是那个CC断点处(其实那个地址根本就不执行),当然要跑空了

刚开始我也没太在意F7就能过去的,往后边看有很多类似的语句,并且还是在IAT表的解码循环里
这下完了,如果想F4跳出循环根本不行,原理是因为OD的F4是下一个硬件断点,然后就run到那里
然后可想而知,跑飞了。

其实这个花指令很容易去处,一个jmp完事,它并没有动其它寄存器
在循环里搜索类似指令,全部改了以后就可以F4跳出循环了。

其实这个call就是一个变形的jmp,我想如果在call中再加入一点东西,
修改一下寄存器的值(类似于一个加密过程),使得你不能轻易的jmp,
那么这一定是一个很好的花指令,壳的强度将大大提高

qzy0549 发表于 2011-6-23 11:09

给个连接地址,看看去

今夕望月 发表于 2011-6-23 11:41

好的,,学习了

fcwr007 发表于 2011-6-23 13:55

yes,楼主最好把原文件也贴出来。

wzb 发表于 2011-6-23 15:30

回复 fcwr007 的帖子

这是那个CreakMe,看你能不能从一堆call中走出来

djhuangshi 发表于 2012-1-7 16:24

牛人。真想跟你8师

xuhaiping 发表于 2012-1-7 19:57

高手高手高手

pinkly 发表于 2012-1-8 12:35

有心让你头晕。你怎么能不晕。。

1046135662 发表于 2012-1-8 13:09

高人啊!学习了。。

jiayunlei 发表于 2012-1-8 14:35

··顶下再说别的··
页: [1]
查看完整版本: 一个简单的花指令的去处