《逆向工程核心原理》 李承远
-
国内翻译版的有关恶意代码分析的书籍,找到了两本书,该书是其中一本(韩国人所写),另一本是恶意代码分析实战。后一本略难,所以选了这一本来看。
第一部分 代码逆向技术基础 -
关于逆向工程
介绍了简单的概念和分析方法,以及提供了随书代码链接。以及 Keep Passion~
-
逆向分析 Hello World! 程序
用一个大概所有编程书籍都会举的例子,带大家熟悉代码结构,熟悉OD工具。
-
小端标记法
这个要读懂,因为阅读OD工具调试窗口显示的内容需要知道该知识背景。
一句话就是,“大端:数据在内存中从低地址到高地址数据顺序对存储;小端:数据在内存中从低地址到高地址数据逆序对存储”。
-
IA-32 寄存器基本讲解
有汇编语言基础的该章可快速读过。没有的仔细读读,若要进一步自学,推荐汇编语言(第2版)阅读该书,目前该书已经有第三版了。我阅读的是第二版,因为学校图书馆只有第二版QAQ
-
栈
了解栈是先进后出(后进先出)。
-
分析 apex' crackle#1
小试牛刀,培养兴趣。也许是从窥探到放弃~ 2333333
-
栈帧
重要。该章的内容虽然简短,但是 Reverse 不可或缺。对照着0day安全 (第2版)第二章 2.1 系统栈的工作原理,可能好理解一些。然后,书中的例子建议动手调试一下。
-
abex' crackle #2
这章明显提升了难度。个人读完和大致调试完该章的体会是,若要在逆向有所擅长,win32汇编编程经验和Windows操作系统知识储备必不可少。
-
Process Explorer ——最优秀的进程管理工具
看看就好
-
函数调用约定
-
栈内存是固定的,ESP用来指示栈的当前位置,若ESP指向栈底,则无法再使用该栈。函数调用后如何处理ESP,这就是函数调用约定要解决的问题。主要的函数调用约定如下。
函数参数入栈顺序 清理栈空间 应用场景 cdecl 从右向左 调用者 主要在C语言中使用 stdcall 从右向左 被调用者 常用于Win 32 API fastcall 若某函数有4个参数,则前2个参数分别使用ECX、EDX寄存器传递。其它参数从右向左入栈。 被调用者 常用于Win 32 API
- 视频讲座
书中提到的一个网站值得一看https://forum.tuts4you.com
- 究竟应当如何学习代码逆向分析
一言以蔽之,“你一定行!”
第二部分 PE 文件格式 - PE 文件格式
好难~ 看了两遍。顺过后边用到再回来~
可能对理解本章知识点有帮助的帖子:VA&RVA 和 RVA to RAW
- 运行时压缩
这章主要讲 http://upx.sourceforge.net 该工具的运用。发现 恶意代码分析实战 一书也有提到该网站,当然建议小白(比如我,手动滑稽)先阅读《逆向工程核心原理》,然后阅读《恶意代码分析实战》。
-
调试 UPX 压缩的 notepad 程序
-
基址重定位表
因为 ASLR 机制,需要地址重定位。
- 从可执行文件中删除 .reloc 节区
贯穿整本书有57章之多,但许多章节都是及其之短。比如,本章~
- UPack PE文件头详细分析
(Win)Upack 0.39 final by dwing
-
UPack 调试 - 查找 OEP
-
“内嵌补丁”练习
第三部分 DLL 注入 -
Windows 消息钩取
-
恶意键盘记录器
-
DLL 注入
-
DLL 卸载
读完23、24章节内容,感触颇深的是需要熟练 C/C++,以及对 Windows API 有一定程度了解,不需要也不可能掌握所有 API ,碰到会查询即可。
- 通过修改 PE 加载 DLL
\(P_{231}\)底部的“每个IID结构体的大小为14个字节,整体大小为14*5=64”没看懂。是否应修改为“每个IID结构体的大小为16个字节,整体大小为16*4=64。因为IMAGE_IMPORT_DESCRIPTOR(IID)结构体有四个双字(DWORD,double word,2*16bit)成员,其中TimeDateStamp一般省略”
-
PE Tools
-
第27章 代码注入
-
使用汇编语言编写注入代码
第四部分 API 钩取 -
API 钩取:逆向分析之 “花”
-
记事本 WriteFile() API 钩取
-
关于调试器
-
计算器显示中文数字
-
隐藏进程
书中\(P_{353}\),图33-22 stealth3.dll练习(隐藏)输入的命令应改为:
C:\work>HideProc2.exe -hide stealth3.dll
-
高级全局API钩取:IE连接控制
-
优秀分析工具的五种标准
第五部分 64 位 &Windows 内核 6 -
64位计算
-
x64处理器
-
PE32+
-
WinDbg
-
64位调试
-
ASLR(Address Space Layout Randomization)
-
内核6中的会话
-
内核6中的DLL注入
-
InjDll.exe:DLL注入专用工具
第六部分 高级逆向分析技术 -
TLS(Thread Local Storage)回调函数
-
TEB(Thread Environment Block)
-
PEB(Process Environment Block)
-
SEH(Structured Exception Handling)
-
IA-32指令
第七部分 反调试技术 -
反调试技术
-
静态反调试技术
-
动态反调试技术
-
高级反调试技术
第八部分 调试练习 -
调试练习1:服务
-
调试练习2:自我创建
-
调试练习3:PE映像切换
-
调试练习4:Debug Blocker
- 结束语
-