逆向工程,调试Hello World !程序(更新中)

逆向工程,调试Hello,World ! 程序(更新中)

  • 逆向分析法
    • 静态分析法
    • 动态分析法
  • 调试hello world 程序
    • 代码
  • 开始调试
    • OllyDbg 基本指令 (适用于代码窗口)
    • 设置断点的四种方法
      • 1.goto 命令
      • 2.设置断点
      • 3.注释
      • 4.标签
    • 快速查找指定代码的四种方法
      • 1. 代码执行法
      • 2.字符串检索法
      • 3.在调试代码中设置断点
      • 4.在API代码中设置断点
    • 使用“打补丁”方式修改“hello world!”字符串
      • 修改字符的两种方法
        • 1.直接修改缓冲区
          • 保存更改到可执行文件
        • 2.在其他内存区域新建字符串并传递给消息函数
  • 更新中。。。。

逆向分析法

静态分析法

是在不执行代码文件的情形下,对代码进行静态分析的一种方法。并不执行代码,而是观察代码文件的外部特征,获取文件的类型,大小,PE头信息,内部字符串,是否运行时解压缩等。

动态分析法

是在程序文件的执行过程中对代码进行动态分析的一种方法,它通过调试来分析代码流,获得内存的状态等。
虽然代码调试过程在代码逆向分析过程中占据很大比重,但它只是代码逆向分析的一个从属概念

调试hello world 程序

代码

#include "windows.h"
#include "tchar.h"

int _tmain(int argc, TCHAR * argv[])
{
	MessageBox(NULL,"Hello World!","张轩瑞",MB_OK);
	return 0;
}

开始调试

用OllyDbg调试工具打开程序
左上 代码窗口

  • 默认用于显示反汇编代码,还用于显示各种注释、标签,分析代码时显示循环、跳转位置等信息。

右上 寄存器窗口

  • 实时显示CPU寄存器的值,可用于修改特定的寄存器。

左下 数据窗口

  • 以Hex/ASCII/Unicode值的形式显示进程的内存地址,也可在修改内存地址。

右下 栈窗口

  • 实时显示ESP寄存器指向的进程栈内存,并修改。
    逆向工程,调试Hello World !程序(更新中)_第1张图片

OllyDbg 基本指令 (适用于代码窗口)

项目 Value 含义
Restart Ctrl+F2 重新开始调试
Step Into F7 执行一句OP code (操作码),若遇到调用命令(CALL),将进入函数代码内部
Step Over F8 执行一句OP code (操作码),若遇到调用命令(CALL),仅执行函数自身,不跟随进入
Execute till Return Ctrl+F9 一直在函数代码内部运行,直到遇到RETN命令,跳出函数

设置断点的四种方法

1.goto 命令

执行Go to(Ctrl + G) 命令,打开一个“输入跟踪表达式”的对话框。
在文本框中输入“地址”。
逆向工程,调试Hello World !程序(更新中)_第2张图片
光标自动定位到该地址处,执行F4命令,让调试流运到此处,然后从该处调试。

2.设置断点

可以设置BP(Break Point,断点) (快捷键F2)

在这里插入图片描述
设置断点后,运行到断点处就会暂停。
可以打开Breakpoints框(ATL+B)查看设置的断点。
逆向工程,调试Hello World !程序(更新中)_第3张图片
双击某个断点会直接跳转到相应位置。

3.注释

按键盘上的“;”可以添加注释
逆向工程,调试Hello World !程序(更新中)_第4张图片
同时也可以查找到他。
在这里插入图片描述

4.标签

我们也可以通过标签提供的功能在指定地址
在这里插入图片描述
比如在00401BF0中设置标签,main func
因为00401385处调用00401BF0的函数,所以就会显示,main func

在这里插入图片描述
标签和注释一样也可以检索

快速查找指定代码的四种方法

调试代码时,main()函数并不直接位于可执行文件的EP位置上,出现在此的是开发工具生成的启动函数。
(EP是windows可执行文件(EXE,DLL,SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置,它依赖于CPU。)

1. 代码执行法

逐条执行指令来查找需要查找的位置。代码执行法仅使用于被调试的代码量不大、且程序功能明确的情况。

2.字符串检索法

直接查找字符串。
寻找所需要的字符串,然后双击。

3.在调试代码中设置断点

查找->所有模块间的调用
查看调用了那些函数

4.在API代码中设置断点

打开“所有模块中的名称”并敲下MessageBox,光标会直接定位。
逆向工程,调试Hello World !程序(更新中)_第5张图片

使用“打补丁”方式修改“hello world!”字符串

修改字符的两种方法

1.直接修改缓冲区

我在搜索的时候,发现注释hello world的地方更改没有用。
找到主函数后,设置断点。
然后按F4,进行调试。
在右下方站窗口找到ASCII码“hello world”。
在这里插入图片描述
然后双击查看,进入数据窗口,去更改缓存区。
逆向工程,调试Hello World !程序(更新中)_第6张图片
去更改,hello world 改成 hello rever
尽量不要用更长的字符串,覆盖原字符串,这样会使数据遭到破坏。
改完之后,去运行程序,之后就会弹出窗口。
逆向工程,调试Hello World !程序(更新中)_第7张图片
我们发现以前的hello world 变成了 hello rever。

保存更改到可执行文件

上面的调试中,我们通过修改字符串缓冲区更改了程序显示的消息内容,但是这种更改只是暂时的,我们终止调试的时候。程序中的原字符串没有改变。如果想保存下来,就要把更改后的程序保存一个可执行文件。

  • 在左下数据窗口中,选中更改后的字符串,点击鼠标右键,在弹出的菜单中选择“复制到可执行文件”,然后点击“备份”——>“保存到数据文件”然后输入文件名保存为exe文件。

当我们打开这个已经保存好的文件的时候,弹出的字符串变成了“hello rever”。
逆向工程,调试Hello World !程序(更新中)_第8张图片

2.在其他内存区域新建字符串并传递给消息函数

更新中。。。。

你可能感兴趣的:(笔记,安全)