逆向常用的调试工具OllyDbg,界面简单,使用起来也简单。
学习中,主要通过对160个CrackME小程序进行调试,从而了解程序设计的思想。
基础条件
1、基础的汇编指令
2、基础的计算机术语
3、使用一款Ring3级别的调试工具(ring0给操作系统使用,驱动加载之后运行在ring0,就是所谓的“rootkit”)
4、了解一般程序设计的流程
建议:
如果是初学者,不建议直接上手IDA,F5分析。
学习逆向调试,跟盖房子是一样的,先一步一脚印学习,长期处于入门阶段。
学习完爆破基础之后,再进行算法的分析。
软件:
网络上下载OllyDbg,原版本是英文,我们方便讲解,使用中文版。
打开OD界面:
此时OD调试器为空,并没有载入任何的程序。
将程序放入OD中
整体的界面
上边是OD的菜单导航栏,很多功能你如果不用快捷键的话,需要手动点击。
中间这一块是程序的汇编代码,执行的过程。
右边这一块是CPU中的寄存器的状态
下边是十六进制的数据,右边是程序当前的堆栈情况。
看“设置API断点”
我们以后得和这些函数打交道了。
毕竟,无论什么编程语言写出来的程序,最后都是调用API函数。
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
下面我们对一个程序进行修改,并保存。
这是简单的一个helloword程序。
在实际中,我们应该对原程序进行拷贝一份进行分析。
思路:
1、先运行一遍程序,观察它怎么运行。
2、猜这个程序调用了哪些API函数。
3、开始调试,将标题文字改掉,将显示内容改掉。
Ctrl+F2 重新载入该程序。
其他窗口不用关注,这个程序关注中间汇编部分。
F8,单步步过。
可以发现(任何程序运行的时候,系统都会分配一段内存给它)
call一个函数,可以知道是一个windows核心函数
不用理这些函数,我们继续进行F8
运行到这里,程序窗口调出,程序运行完毕。
004011CE E8 32FEFFFF call Hello.00401005
我们在前面一点下一个断点。下断点的快捷键是F2
将程序重新加载,(CTRL+F2)
F9运行到断点处
F7进行单步步入。
F8,一步一步进行
我们发现调出函数了。
我们下断点失败。
那我们将断点提前。
然后再进入一层call
因为这里是push/push/push,然后再call
有问题
在这个函数里面一步步调试,发现了字符。
对字符进行修改
汇编指令:
0040102C |. 68 30204200 push 00422030 ; |Title = "I love fishc.com"
00401031 |. 68 1C204200 push 0042201C ; |Text = "第?,BB,"",B8,"鯳in32程序"
注意字节数,不能超
显示51cto
在下面的区域,Ctrl + G 进行搜索
找到该地址
我们点击一下“I”,会发现是“49”
显示51cto
下面修改为
this is modify
使用OD修改完毕,
需要保存文件
选中修改区域
复制到可执行文件
右键,保存文件
最终,我们运行修改之后的程序
本节结束。