逆向入门(一)

来源:互联网 发布:国通交规软件下载 编辑:程序博客网 时间:2024/06/05 11:02

本系列记录学习逆向的过程,以便之后回顾,参考书籍《逆向工程核心原理》。

0x00 基本环境

vc++ 6.0、吾爱破解工具包、xp

0x01 od的基本使用

入门程序使用的是最简单的helloword的c++代码,messagebox弹个框,源码如下:

#include "windows.h"#include "tchar.h"int _tmain(int argc, TCHAR *argv[]){    MessageBox(NULL,                "Hello World!",                "www.reversecore.com",                MB_OK);    return 0;}

od基本使用快捷键如下:

快捷键 含义 ctrl+f2 程序跑飞后重新开始调试 F7 单步步入 F8 单步步过 ctrl+F9 代码执行到RETN命令 ctrl+G 查找指定地址 F2 取消or设置断电 F9 继续运行程序 空格 修改对应汇编指令 ALT+B 打开breakpoint对话框

0x02 快速定位代码的几种方法

  1. 字符串检索
    方法:鼠标右键点击查看-所有参考文本字串,找到在程序中出现的字符串,双击字符串,即可跳转到程序调用的地方

参考文本字串

字串

字符串定位

  1. API检索
    方法:鼠标右键点击查找-所有模块间的调用,然后列出了所有的api,找到MessageBoxA,双击即可找到调用的地方。

所有模块间调用

所有模块间调用2

3、api代码上下断点
方法:鼠标右键-查找-所有模块中的名称,然后输入MessageBoxA,找到use32中的函数然后双击,进入函数的实现代码,然后f2下断点,f9运行程序,会在该断点停下来。此时查看右边ESP指向的堆栈的值,即可找到程序的调用地址。
所有模块中的名称

调用

0x03 简单的程序修改

  • 直接修改字符串缓存
    找到字符串保存的地址:41f01c

字符串保存地址

选中字符串,然后ctrl+E,即可修改字符串

字符串修改

修改后,f9继续运行程序,即可看到修改后的程序。

该方式只是暂时的,无法保存字符串,如果要保存字符串则需要保存为另外一个程序。
选择刚才修改的字符串,然后点击右键,选择复制到可执行文件,在弹出的hex对话框,右键选择,保存文件,即可保存修改后的文件。
复制到可执行文件

  • 在其他内存区域新建字符串并传递给消息函数
    找到程序中由NULL填充的区域内存,修改字符串,并记住地址。
    找到messagebox中的push参数的地方,修改push地址,即可调用到修改后的地址

NULL

修改push

原创粉丝点击