调试逆向基础知识一
逆向基础知识一预备知识环境:VS2010 旗舰版 debug 模式
编译环境:windows 7专业版 64位
调试环境:windows xp sp3
调试工具:吾爱破解专版ollydbg
附件:以工程文件的形式进行上传目录:1.硬编码的介绍2.确定关键代码的四种基本方法以及实例调试练习3.加速调试的四种方法(快捷键F2 F4 标签 注释)4.修改内存值的两种基本方法一:硬编码的介绍示例代码:#include <stdio.h>#define max 5//!!!此处在内存中会进行硬编码int main(){ int size = 4; //!!!此处在内存中会进行硬编码 size+=max; printf("%d",size); getchar(); return 0;}http://i.imgur.com/TFugWZM.png
如图所示在注释部分已经标出(此处不要求读者做具体调试,看懂硬编码表示即可)#define max 5 此处直接用啦 add eax,0x5 处2. 确定关键代码的四种基本方法以及调试实例示例代码:(字符集使用多字节字符集)#include<stdio.h>#include<windows.h>int main(){ MessageBox(NULL, "Hello World", "www.baidu.com", MB_OK ); return 0;}一:一步直达法
需要用到的ollydbg快捷键 F7 单步步入(即可以进入 call 指令里面) F8 单步不过即不进入 call指令 Ctrl+F9 一直运行知道遇到所在的call 指令内部的ret 停止运行 Ctrl+F2 重新载入程序 F2 下int3 断点如图一所示:
http://i.imgur.com/Sm1XVku.png
此为用od打开MessageBox.exe的初始状态,接着按F7快捷键
如图2所示光标停留在地址 4011776处:
http://i.imgur.com/MIaf2UZ.png
接着F7 键 进入被调函数,如此调试程序光标最终会运行至图二的401177A处,接着F7 快捷键
如图三所示:
http://i.imgur.com/9YLFFoA.png
程序会在41194A 处 进入被调函数后出现来到主函数:
如图四:
http://i.imgur.com/KsIYZj2.png
此处即是主函数,411380处即为主函数入口点:二:字符串检索:当我们双击运行程序的时候,出现啦弹窗并且弹窗处包含 “Hello World”“www.baidu.com” 两处字符串,寻找关键代码,即可通过寻找两处某一处字符定位关键代码步骤1:此时按快捷键Ctrl+F2重新载入调试程序 在CPU 窗口右键鼠标
查找->所有参考字符串 如图5所示
http://i.imgur.com/FBrZRY8.png
如图7:
http://i.imgur.com/owsKfRM.png
双击以后;来到图四,,在函数入口点按F2快捷键 下断点,然后重新载入
按快捷键F9即可重新来到图四处:三:API 调用出下断点稍微有点编程经验的同学都了解,此程序是在函数内部调用啦 MessageBox ()函数 所以想快速找到关键代码,只需要在调用MessageBox() 函数 的地方下断点即可如图八:
http://i.imgur.com/hiOmOSx.png
如图九:
http://i.imgur.com/XTFR235.png
下断点以后快捷键Ctrl+F2重新载入->按快捷键F9 即可来到图四中的调用
MessageBox()处四:
API 代码中下断点用户所使用的API由系统DLL提供(自己也可以编写DLL),此时我们可以直接在DLL 中对API 进行下断点。流程 判断是都加载相应的DLL ->如果加载啦,就进入相应DLL下断点判断加载的DLL
如图10:
http://i.imgur.com/Biy2zHk.png
快捷键 ALT+M 打开内存映射窗口
如图11 12所示:
http://i.imgur.com/3fUnafl.png
http://i.imgur.com/Rr6qXtB.png
可以看出此程序已经加载啦 user32,dll kernel32.dll.....
只用在 user32.dll-> MessageBox 处下断点即可.如图八 我们选择所有模块中的名称
如图13
http://i.imgur.com/kb1OwQq.png
此图中包含很多MessageBox的扩展函数 大家可以逐一尝试,此处我们选择77D507EA处,双击进入后我们选择在入口处地址(77D507EA)按F2 下断点 然后按F9运行
如图14
http://i.imgur.com/9jGdV6i.png
数据窗口跟随esp 的值为 004113B4 如图4 可以看到此地址是调用函数后的返回地址,看堆栈窗口处的函数参数,更加证明,当前的函数就是调用MessageBox的函数。。因此此函数执行完毕后即返回004113B4 地址处,即为主函数内加速调试的四种方法(快捷键F2 F4 标签 注释)1.快捷键F2下int3断点(此处只需要知道怎么用的就可以)
2.F4 执行到鼠标所指向的CPU窗口指令出 (如图5中 光标在00411104处 欲直接执行401113B处指令,只需要鼠标选中其地址 快捷键F4 即可(只是举一个喊宽泛的例子))
3.标签快捷键 : 英文冒号(添加过标签的可以在如图八中的所有标签中找到)
4.注释快捷键为 ; 英文分号(添加过注释的可以在如图八中的所有注释中找到)
非常适合新手{:1_921:} 刚接触,总是摸不到头绪,新手来学习学习。 持续学习中 非常适合像我刚接触破解的人,谢谢。 对于我这种菜鸟来说就是这种帖子可以扫盲,多谢楼主 感谢分享基础知识 已收听,跟楼主混了。 新手来学习学习。 感谢分享!学习了。辛苦辛苦