逆向基础知识一

预备知识

环境: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;
}


如图所示在注释部分已经标出(此处不要求读者做具体调试,看懂硬编码表示即可)

#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 断点

如图一所示:

此为用od打开MessageBox.exe的初始状态,接着按F7快捷键
如图2所示光标停留在地址 4011776处:

接着F7 键 进入被调函数,如此调试程序光标最终会运行至图二的401177A处,接着F7 快捷键
如图三所示:

程序会在41194A 处 进入被调函数后出现来到主函数:
如图四:

此处即是主函数,411380处即为主函数入口点:

二:字符串检索:

当我们双击运行程序的时候,出现啦弹窗并且弹窗处包含 “Hello World”
“www.baidu.com” 两处字符串,寻找关键代码,即可通过寻找两处某一处字符定位关键代码

步骤1:此时按快捷键Ctrl+F2重新载入调试程序 在CPU 窗口右键鼠标
查找->所有参考字符串 如图5所示

如图7:

双击以后;来到图四,,在函数入口点按F2快捷键 下断点,然后重新载入
按快捷键F9即可重新来到图四处:

三:API 调用出下断点

稍微有点编程经验的同学都了解,此程序是在函数内部调用啦 MessageBox ()函数 所以想快速找到关键代码,只需要在调用MessageBox() 函数 的地方下断点即可

如图八:

如图九:

下断点以后快捷键Ctrl+F2重新载入->按快捷键F9 即可来到图四中的调用
MessageBox()处

四:
API 代码中下断点

用户所使用的API由系统DLL提供(自己也可以编写DLL),此时我们可以直接在DLL 中对API 进行下断点。
流程    判断是都加载相应的DLL ->如果加载啦,就进入相应DLL下断点

判断加载的DLL
如图10:

快捷键 ALT+M 打开内存映射窗口
如图11 12所示:


可以看出此程序已经加载啦 user32,dll kernel32.dll…..
只用在 user32.dll-> MessageBox 处下断点即可.如图八 我们选择所有模块中的名称
如图13

此图中包含很多MessageBox的扩展函数 大家可以逐一尝试,此处我们选择77D507EA处,双击进入后我们选择在入口处地址(77D507EA)按F2 下断点 然后按F9运行
如图14

数据窗口跟随esp 的值为 004113B4 如图4 可以看到此地址是调用函数后的返回地址,看堆栈窗口处的函数参数,更加证明,当前的函数就是调用MessageBox的函数。。因此此函数执行完毕后即返回004113B4 地址处,即为主函数内

加速调试的四种方法(快捷键F2 F4 标签 注释)

1.快捷键F2下int3断点(此处只需要知道怎么用的就可以)
2.F4 执行到鼠标所指向的CPU窗口指令出 (如图5中 光标在00411104处 欲直接执行401113B处指令,只需要鼠标选中其地址 快捷键F4 即可(只是举一个喊宽泛的例子))
3.标签快捷键 : 英文冒号(添加过标签的可以在如图八中的所有标签中找到)
4.注释快捷键为 ; 英文分号(添加过注释的可以在如图八中的所有注释中找到)