笔记

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

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里

java中逆向工程lombok 程序逆向工程_java中逆向工程lombok

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就是跳转指令

java中逆向工程lombok 程序逆向工程_字符串_02


分析方法:

使用F7+F8进行分析,使用CTRL+F9快速跳转到retn,使用CTRL+F2重新调试。

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

EP起始的地方。

java中逆向工程lombok 程序逆向工程_java中逆向工程lombok_03


F7进去,这里可以看到这个地方不像我们的main函数。CTRL+F9跳转到最后的retn的地方。

java中逆向工程lombok 程序逆向工程_main函数_04


到这里之后F7或者F8都可以,就可以回复到正常流程,其实和编程里的函数执行一模一样。

java中逆向工程lombok 程序逆向工程_右键_05


回到主流程之后,继续F7进去

java中逆向工程lombok 程序逆向工程_java中逆向工程lombok_06


进去之后,继续使用这种方法来进行调试,一直到找到像main函数的地方。

java中逆向工程lombok 程序逆向工程_右键_07


最后就可以成功的找到main函数了。

java中逆向工程lombok 程序逆向工程_字符串_08

2.4 设置大本营(basecamp)

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

1.Goto命令

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

2.设置BP

快捷键:F2

ALT+B 打开所有设置的断点

java中逆向工程lombok 程序逆向工程_右键_09

3.注释

快捷键:;
右键-Userdefined-comment

java中逆向工程lombok 程序逆向工程_字符串_10

4.标签

标签 ::
吾爱版使用右键

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

(1)代码执行法

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

(2)字符串检索发

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

(3)API检索法 1

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

(4) API检索法2

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

2.6 修改字符串的方法

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

java中逆向工程lombok 程序逆向工程_java中逆向工程lombok_11


java中逆向工程lombok 程序逆向工程_右键_12

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

java中逆向工程lombok 程序逆向工程_java中逆向工程lombok_13