OllyDBG常用快捷键
F2:设置断点,只要在光标定位的位置按F2键即可,再按一次F2键则会删除断点。
F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。
F7:单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。
F4:运行到选定位置。作用就是直接运行到光标所在位置处暂停。
F9:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
CTR+F9:执行到返回。此命令在执行到一个 ret (返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空。
ALT+F9:执行到用户代码。可用于从系统领空快速返回到我们调试的程序领空。
Shift+F9 忽略异常运行
比较常用的脱壳方法:
方法1:单步跟踪法
(1)用OD载入,点“不分析代码”
(2).单步跟踪原则是向下的跳转继续运行,向上的跳转不让它实现,直到找到程序OEP。向下跟踪用F8单步执行,遇到程序往上跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选 择断点——>运行到所选),绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现
(3)如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑 飞,这样很快就能到程序的OEP
(4)在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
(5)一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN 的一般很快就会到程序的OEP
注:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP
方法2:ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
(1)开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)(这只是一 般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
(2)在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX)按回车,或者右击ESP红色处-->数据窗口中跟随 ,
(3)选中数据窗口中要下断点的地址,断点--->硬件访问--->WORD或DWORD断点
(4)按一下F9运行程序,此时注意不论下一步做什么都及时删除刚才的断点,然后直接来到了跳转处,按下F8,到达程序OEP
方法3:二次内存镜像法
(1)用OD打开软件
(2)点击选项——调试选项——异常,把里面的忽略全部√上。CTRL+F2重载下程序
(3)按ALT+M,打开内存镜象,找到程序段的的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点(注意观察是否运行了,有时不运行需要再按一遍)。第二次接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也 就是00401000处),按F2下断点。有异常的话按SHIFT+F9(或者是在没异常情况下按F9),再单步F8,很快便 直接到达程序OEP
方法4:一步到达OEP
(1)开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2, F9运行到此处
(2)来到大跳转处,点下F8,到达OEP
方法5: 最后一次异常法
(1)用OD打开软件
(2)点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序
(3)按SHIFT+F9,直到程序运行,记下按SHIFT+F9的次数m
(4)CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次)
(5)在OD的右下角我们看见有一个"SE 句柄",这时我们在编译区右击转到-->表达式(或按CTRL+G),输入SE 句柄左边的地址
(6)按F2下断点,然后按SHIFT+F9来到断点处
(7)去掉断点,按F8慢慢向下走
(8)到达程序的OEP
方法6: 模拟跟踪法
(1)先试运行,跟踪一下程序,看有没有SEH暗桩之类
(2)ALT+M打开内存镜像,找到(包含那一列中出现SFX,imports,relocations或者SFX,输 入表,重定位)
(3)若地址为00xxxxxx在命令行下输入tc eip<00xxxxxx,回车,提示正在跟踪
方法7: SFX法
(1)设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
(2)切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定
(3)重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP)
---------------------