OllyDbg学习笔记

0x00 背景

开始学逆向啦~

0x01 键位

F2 添加断点
F4 执行到光标处
F5 重叠显示所有窗口/最大化激活中的窗口
F7 单步步入
F8 单步步过
F9 继续执行(会停在断点处)
Alt+c 回到当前执行到的命令的地方
Ctrl+F2 重新运行程序
Ctrl+s 查找汇编命令
Ctrl+r 查找参考(查找哪里调用/跳转到了当前选中的命令)
Ctrl+g 跳转到指定地址,或者输入API名字可以跳转到该API入口处

Alt+b 查看断点,可以右键禁用断点,不必把断点删除
Shift+F2 设置条件断点

Ctrl+n 查看API调用,然后可以右键在所有参考该API的地方添加断点。

双击修改汇编,之后右键复制到可执行文件,弹出新的窗口后还要再次右键,点击保存文件。
Ctrl+p 查看修改过的汇编

Shift+; 在该处加标签,比如可以在某函数的入口加标签,则所有调用该函数的地方都能显示这个标签名字。
Enter 进入被调用的函数查看
Esc 回到上一步执行的地方,但是并不撤销操作的影响。

0x02 命令

AT后跟地址或者函数名可以跳转到该地址或函数实现的地方。

0x03 实战:UltraISO的脱壳

脱壳环境:XP。
先用exeInfo查壳,发现UltraISO是Aspack的壳。用OD打开,使用ESP定律法正常脱壳(在断点停下的时候往上翻一下,可以发现上一句确实是popad)。然后继续单步执行,执行到ret后返回到一个很远的地址(从00CFXXXX跳转到了0040162C),这里就是OEP了,使用OD自带的dump把内存dump出来,命名为dumped.exe。发现dumped.exe可以执行,但是拷贝到win8下却不能执行,提示无法定位输入点,说明输入表(IAT)有问题。我们采用另一种方法脱。
先用LordPE进行脱壳,脱壳后的文件命名为no_iat_dumped.exe,然后打开ImportREC这个软件,attach ultraiso.exe这个进程,将OEP改为162C (0040162C - 00400000),然后选择自动搜索IAT,搜索完之后会弹出一个对话框,提示"找到了输入表,但是这个输入表可能不正确",无视它,点击获取输入表,再点击显示无效指针会发现大量无效指针,试着删除这些无效指针然后Dump,发现Dump出来的exe根本不能运行。所以刚刚的提示信息不能无视!我们需要手工改一下IAT地址,这两个数值其实就出现在刚刚那个对话框里。我们把该提示数值输入到RVA和size里,再次点击获取输入表,然后点击显示无效指针,发现仍然有无效指针,而且竟然比刚刚还多了!不管它,右键删除无效指针,然后Dump出来。这次Dump出来的就是既可以在xp上运行也可以在win8上运行了。
实际上用AspackDie一下就脱好了==!  

还有很多原理不太明白,继续学习。

0x04 问题

Q: 往上jump的block要跳过,但是如果往上jump的block之后是call或者是另一个jump指令的话则要继续跳过,为何?

Q:脱壳的ESP定律法原理是什么?
A:http://www.52pojie.cn/thread-236872-1-1.html
大概理解了,就是在ESP的地方下断点,这个ESP地址再次被访问时停下。

参考文献

unpack方法汇总
aikoさんのcrackme