AND 与运算.(位运算两个比较数中的二进制数值各位有0则0)
OR 或运算.(位运算两个比较数中的二进制数值各位有1则1)
XOR 异或运算.(位运算两个比较数中的二进制数值各位相同则零)(寄存器与自己作异或运算等于清零动作)
NOT 取反.
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
还有更多的汇编语句,我会打包给大家的....
三:我们开始动手实践一下,熟悉一下工具的使用
我们用记事本来做试验吧,先加个壳。好了。加完后,我们就用PEID来查一下是什么壳....
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
UPX是一款压缩壳...我们再把他载入OD来调试。载入后,会提示,点否!
01014770 > 60 PUSHAD
01014771 BE 00000101 MOV ESI,NOTEPAD.01010000
01014776 8DBE 0010FFFF LEA EDI,DWORD PTR DS:[ESI+FFFF1000]
0101477C 57 PUSH EDI
0101477D 83CD FF OR EBP,FFFFFFFF
01014780 EB 10 JMP SHORT NOTEPAD.01014792
这里,就是UPX壳的入口,这个壳有很多种脱壳~我们今天就用单步直下脱壳法。毕竟我们只是了解一下工具的用法。。。
单步F8,或者用工具栏的那个箭头向下那个按钮!JMP(无条件跳转),要是跳转实现的话,就会出现条红线。这里。他是向下跳,我们就让他跳吧,如果像这种情况。向上跳的话,我们就用到F4(在跳转的下一行,按下F4,或者,右键-断点-运行到选定位置)如果,跳转没实现,他就出现一条灰色的线,实现就红..只要他往上跳,我们就下断F4。不让他往会跳。一直往下单步,在这里,下完断后,还有个JMP向上跳,我们也一样向下一行下断后,但是。他这里的下一行是一个NOP(无动作)。所以不能在这里F4。我们在NOP的下一行下断点,不好意思。。。手快了。哈~~继续!这里。在CALL这行下断点。OD会挂掉。只能在CALL的下一行下断点,我们试验一下~看吧~~运行了,OD挂了~点什么都没反映了。。。我们返回程序的开始!重新开始单步....注意了,就是这里...在这里下断噢~好。到了这个JMP。但他却没出现红线,是什么原因呢。因为这里他实现了远跳转,所以没出现红线。我们F8。。。好,一般远跳转后,就是OEP,这里也就是传说中的OEP。
不好意思,按错了...继续
接着。就用LordPE这个,把程序DUMP下来~~看操作~完整转存!!但这样子程序还是不能运行。得用到ImportREC这个来修复一下~看操作~这里,因为路径太张了。看不到记事本的路径,你们只知道,这里选择那个记事本的路径就对了....
他的OEP地址0100739D-01000000=739D (01000000是他程序的基址)
点自动搜索IAT,发现某些数据。。点确定,获取输入表。修复捉取文件。OK。。我们去看看能不能运行~可以运行~查一下壳~OK
Microsoft Visual C++ 7.0 Method2