逆向常用的调试工具OllyDbg,界面简单,使用起来也简单。

学习中,主要通过对160个CrackME小程序进行调试,从而了解程序设计的思想。


逆向调试入门-OllyDbg的使用_程序运行


基础条件


1、基础的汇编指令

2、基础的计算机术语

3、使用一款Ring3级别的调试工具(ring0给操作系统使用,驱动加载之后运行在ring0,就是所谓的“rootkit”)

4、了解一般程序设计的流程


建议:


如果是初学者,不建议直接上手IDA,F5分析。

学习逆向调试,跟盖房子是一样的,先一步一脚印学习,长期处于入门阶段。

学习完爆破基础之后,再进行算法的分析。


软件:


网络上下载OllyDbg,原版本是英文,我们方便讲解,使用中文版。


逆向调试入门-OllyDbg的使用_程序运行_02


打开OD界面:


逆向调试入门-OllyDbg的使用_保存文件_03


此时OD调试器为空,并没有载入任何的程序。


逆向调试入门-OllyDbg的使用_程序运行_04


将程序放入OD中


逆向调试入门-OllyDbg的使用_程序运行_05


整体的界面


逆向调试入门-OllyDbg的使用_加载_06


上边是OD的菜单导航栏,很多功能你如果不用快捷键的话,需要手动点击。


逆向调试入门-OllyDbg的使用_程序运行_07


中间这一块是程序的汇编代码,执行的过程。


逆向调试入门-OllyDbg的使用_保存文件_08


右边这一块是CPU中的寄存器的状态


逆向调试入门-OllyDbg的使用_程序运行_09


下边是十六进制的数据,右边是程序当前的堆栈情况。


逆向调试入门-OllyDbg的使用_程序运行_10


看“设置API断点”

我们以后得和这些函数打交道了。

毕竟,无论什么编程语言写出来的程序,最后都是调用API函数。


逆向调试入门-OllyDbg的使用_加载_11


OD的快捷方式,我们不需要记住,要用到的时候,查询即可。


动手才是验证真理的唯一手段


参考文章:


https://www.52pojie.cn/thread-709699-1-1.html
https://www.bilibili.com/video/av849837850
https://bbs.pediy.com/thread-214024.htm
https://bbs.pediy.com/thread-262102.htm


下面我们对一个程序进行修改,并保存。


逆向调试入门-OllyDbg的使用_程序运行_12


这是简单的一个helloword程序。

在实际中,我们应该对原程序进行拷贝一份进行分析。


思路:


1、先运行一遍程序,观察它怎么运行。

2、猜这个程序调用了哪些API函数。

3、开始调试,将标题文字改掉,将显示内容改掉。


Ctrl+F2  重新载入该程序。


逆向调试入门-OllyDbg的使用_程序运行_13


其他窗口不用关注,这个程序关注中间汇编部分。


逆向调试入门-OllyDbg的使用_程序运行_14


F8,单步步过。

可以发现(任何程序运行的时候,系统都会分配一段内存给它)


逆向调试入门-OllyDbg的使用_加载_15


call一个函数,可以知道是一个windows核心函数


逆向调试入门-OllyDbg的使用_加载_16


不用理这些函数,我们继续进行F8


逆向调试入门-OllyDbg的使用_加载_17


运行到这里,程序窗口调出,程序运行完毕。


004011CE    E8 32FEFFFF     call Hello.00401005


逆向调试入门-OllyDbg的使用_加载_18


我们在前面一点下一个断点。下断点的快捷键是F2


逆向调试入门-OllyDbg的使用_保存文件_19


将程序重新加载,(CTRL+F2)

F9运行到断点处

F7进行单步步入。


逆向调试入门-OllyDbg的使用_加载_20


F8,一步一步进行


逆向调试入门-OllyDbg的使用_加载_21


我们发现调出函数了。

我们下断点失败。

那我们将断点提前。


逆向调试入门-OllyDbg的使用_保存文件_22


然后再进入一层call


逆向调试入门-OllyDbg的使用_加载_23


因为这里是push/push/push,然后再call

有问题


逆向调试入门-OllyDbg的使用_保存文件_24


在这个函数里面一步步调试,发现了字符。


逆向调试入门-OllyDbg的使用_保存文件_25


对字符进行修改


逆向调试入门-OllyDbg的使用_程序运行_26


汇编指令:


0040102C  |.  68 30204200   push    00422030                         ; |Title = "I love fishc.com"
00401031 |. 68 1C204200 push 0042201C ; |Text = "第?,BB,"",B8,"鯳in32程序"


注意字节数,不能超

显示51cto


逆向调试入门-OllyDbg的使用_保存文件_27


在下面的区域,Ctrl + G 进行搜索

找到该地址


逆向调试入门-OllyDbg的使用_加载_28


我们点击一下“I”,会发现是“49”


逆向调试入门-OllyDbg的使用_保存文件_29


显示51cto


逆向调试入门-OllyDbg的使用_程序运行_30


下面修改为


this is modify


逆向调试入门-OllyDbg的使用_程序运行_31


使用OD修改完毕,

需要保存文件


逆向调试入门-OllyDbg的使用_保存文件_32


选中修改区域


逆向调试入门-OllyDbg的使用_加载_33


复制到可执行文件


逆向调试入门-OllyDbg的使用_保存文件_34


右键,保存文件


逆向调试入门-OllyDbg的使用_加载_35


最终,我们运行修改之后的程序


逆向调试入门-OllyDbg的使用_加载_36


本节结束。