《逆向工程核心原理》 李承远

  • 《逆向工程核心原理》李承远

    国内翻译版的有关恶意代码分析的书籍,找到了两本书,该书是其中一本(韩国人所写),另一本是恶意代码分析实战。后一本略难,所以选了这一本来看。

    第一部分 代码逆向技术基础
    1. 关于逆向工程

      介绍了简单的概念和分析方法,以及提供了随书代码链接。以及 Keep Passion~

    2. 逆向分析 Hello World! 程序

      用一个大概所有编程书籍都会举的例子,带大家熟悉代码结构,熟悉OD工具。

    3. 小端标记法

      这个要读懂,因为阅读OD工具调试窗口显示的内容需要知道该知识背景。

      一句话就是,“大端:数据在内存中从低地址到高地址数据顺序对存储;小端:数据在内存中从低地址到高地址数据逆序对存储”。

    4. IA-32 寄存器基本讲解

      有汇编语言基础的该章可快速读过。没有的仔细读读,若要进一步自学,推荐汇编语言(第2版)阅读该书,目前该书已经有第三版了。我阅读的是第二版,因为学校图书馆只有第二版QAQ

    5. 了解栈是先进后出(后进先出)。

    6. 分析 apex' crackle#1

      小试牛刀,培养兴趣。也许是从窥探到放弃~ 2333333

    7. 栈帧

      重要。该章的内容虽然简短,但是 Reverse 不可或缺。对照着0day安全 (第2版)第二章 2.1 系统栈的工作原理,可能好理解一些。然后,书中的例子建议动手调试一下。

    8. abex' crackle #2

      这章明显提升了难度。个人读完和大致调试完该章的体会是,若要在逆向有所擅长,win32汇编编程经验和Windows操作系统知识储备必不可少。

    9. Process Explorer ——最优秀的进程管理工具

      看看就好

    10. 函数调用约定

    • 栈内存是固定的,ESP用来指示栈的当前位置,若ESP指向栈底,则无法再使用该栈。函数调用后如何处理ESP,这就是函数调用约定要解决的问题。主要的函数调用约定如下。

      函数参数入栈顺序 清理栈空间 应用场景
      cdecl 从右向左 调用者 主要在C语言中使用
      stdcall 从右向左 被调用者 常用于Win 32 API
      fastcall 若某函数有4个参数,则前2个参数分别使用ECX、EDX寄存器传递。其它参数从右向左入栈。 被调用者 常用于Win 32 API
    1. 视频讲座

    书中提到的一个网站值得一看https://forum.tuts4you.com

    1. 究竟应当如何学习代码逆向分析

    一言以蔽之,“你一定行!”

    第二部分 PE 文件格式
    1. PE 文件格式

    好难~ 看了两遍。顺过后边用到再回来~

    可能对理解本章知识点有帮助的帖子:VA&RVA 和 RVA to RAW

    1. 运行时压缩

    这章主要讲 http://upx.sourceforge.net 该工具的运用。发现 恶意代码分析实战 一书也有提到该网站,当然建议小白(比如我,手动滑稽)先阅读《逆向工程核心原理》,然后阅读《恶意代码分析实战》。

    1. 调试 UPX 压缩的 notepad 程序

    2. 基址重定位表

    因为 ASLR 机制,需要地址重定位。

    1. 从可执行文件中删除 .reloc 节区

    贯穿整本书有57章之多,但许多章节都是及其之短。比如,本章~

    1. UPack PE文件头详细分析

    (Win)Upack 0.39 final by dwing

    1. UPack 调试 - 查找 OEP

    2. “内嵌补丁”练习

    第三部分 DLL 注入
    1. Windows 消息钩取

    2. 恶意键盘记录器

    3. DLL 注入

    4. DLL 卸载

    读完23、24章节内容,感触颇深的是需要熟练 C/C++,以及对 Windows API 有一定程度了解,不需要也不可能掌握所有 API ,碰到会查询即可。

    1. 通过修改 PE 加载 DLL

    \(P_{231}\)底部的“每个IID结构体的大小为14个字节,整体大小为14*5=64”没看懂。是否应修改为“每个IID结构体的大小为16个字节,整体大小为16*4=64。因为IMAGE_IMPORT_DESCRIPTOR(IID)结构体有四个双字(DWORD,double word,2*16bit)成员,其中TimeDateStamp一般省略”

    1. PE Tools

    2. 第27章 代码注入

    3. 使用汇编语言编写注入代码

    第四部分 API 钩取
    1. API 钩取:逆向分析之 “花”

    2. 记事本 WriteFile() API 钩取

    3. 关于调试器

    4. 计算器显示中文数字

    5. 隐藏进程

    Calculator v1.7 by cybult

    书中\(P_{353}\),图33-22 stealth3.dll练习(隐藏)输入的命令应改为:

    C:\work>HideProc2.exe -hide stealth3.dll
    
    1. 高级全局API钩取:IE连接控制

    2. 优秀分析工具的五种标准

    第五部分 64 位 &Windows 内核 6
    1. 64位计算

    2. x64处理器

    3. PE32+

    4. WinDbg

    5. 64位调试

    6. ASLR(Address Space Layout Randomization)

    7. 内核6中的会话

    8. 内核6中的DLL注入

    9. InjDll.exe:DLL注入专用工具

    第六部分 高级逆向分析技术
    1. TLS(Thread Local Storage)回调函数

    2. TEB(Thread Environment Block)

    3. PEB(Process Environment Block)

    4. SEH(Structured Exception Handling)

    5. IA-32指令

    下载 IA-32 用户手册

    第七部分 反调试技术
    1. 反调试技术

    2. 静态反调试技术

    3. 动态反调试技术

    4. 高级反调试技术

    第八部分 调试练习
    1. 调试练习1:服务

    2. 调试练习2:自我创建

    3. 调试练习3:PE映像切换

    4. 调试练习4:Debug Blocker

    • 结束语
posted @ 2018-11-23 09:29  houhaibushihai  阅读(1638)  评论(0编辑  收藏  举报