逆向工程核心原理 第二章

笔记

第一章内容不是很多,就是一个很简单的大纲,应该是从第二章号开始的。

1.编译exe

源码:

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

int _tmain(int argc, TCHAR *argv[])
{
	MessageBox(NULL,
		L"Hello World!",
		L"www.reversecore.com",
		MB_OK);

	return 0;
}

这里直接使用vs进行编译即可。

2.调试HelloWorld

2.1 调试目标

  • 查找main()函数

2.2 调试过程

把程序拖到od里
逆向工程核心原理 第二章_第1张图片

2.2.1 程序窗口

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

2.2.2 寄存器窗口

实现显示CPU寄存器的值,用于修改特定的寄存器

2.2.3 数据窗口

已HEX/ASCII/Unicode值的形式显示进程的内存地址

2.3 入口点

调试器停止的地方就是程序执行的起始地址。他是一段EP(EntryPoint入口点,EP是windows可执行文件(EXE、DLL、SYS等入口点,是执行应用程序时最先执行的代码其实位置,依赖于CPU))
这里的起始地址,一个是CALL,一个是JMP。

CALL指令就是指计算机转移到调用的子程序。
JMP就是跳转指令
逆向工程核心原理 第二章_第2张图片
分析方法:
使用F7+F8进行分析,使用CTRL+F9快速跳转到retn,使用CTRL+F2重新调试。

书上的列子就不说了。使用不同的编辑器会导致地址不一致,唯一相同的就是相对偏移是一致的。

EP起始的地方。

逆向工程核心原理 第二章_第3张图片
F7进去,这里可以看到这个地方不像我们的main函数。CTRL+F9跳转到最后的retn的地方。

逆向工程核心原理 第二章_第4张图片
到这里之后F7或者F8都可以,就可以回复到正常流程,其实和编程里的函数执行一模一样。
逆向工程核心原理 第二章_第5张图片
回到主流程之后,继续F7进去
逆向工程核心原理 第二章_第6张图片
进去之后,继续使用这种方法来进行调试,一直到找到像main函数的地方。
逆向工程核心原理 第二章_第7张图片
最后就可以成功的找到main函数了。
逆向工程核心原理 第二章_第8张图片

2.4 设置大本营(basecamp)

简单的来说重新设置程序的启动点不再是从EP处启动,而是从我们设置的开始启动。

1.Goto命令

快捷键:CTRL+G
设置好了之后使用F4进行光标移动

2.设置BP

快捷键:F2
ALT+B 打开所有设置的断点逆向工程核心原理 第二章_第9张图片

3.注释

快捷键:;
右键-Userdefined-comment

逆向工程核心原理 第二章_第10张图片

4.标签

标签 ::
吾爱版使用右键

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

(1)代码执行法

使用F8运行代码,当代码有明显特征值的时候,那么就可以通过动态调试找到main函数的存在。

(2)字符串检索发

使用字符串进行检索,鼠标右键就可以了。

(3)API检索法 1

右键查找——>所有模块的调用

(4) API检索法2

Alt+M 打开内存映射窗口
使用右键可以打开所有模块的调用名称

2.6 修改字符串的方法

(1)直接修改字符串缓冲区

逆向工程核心原理 第二章_第11张图片
逆向工程核心原理 第二章_第12张图片

(2)在其他内存区域生成新字符并传递给消息函数

逆向工程核心原理 第二章_第13张图片

你可能感兴趣的:(逆向工程核心原理 第二章)