CTF-All-In-One/doc/3.1_reverse.md
2017-09-27 22:27:04 +08:00

3.5 KiB
Raw Blame History

3.1 Reverse

怎样学习逆向工程

逆向工程一直被视为一种充满乐趣和带有神秘色彩的东西,逆向工程师看起来就像是在密密麻麻的指令中寻找宝藏的人,他们绕开层层的限制和保护,发现程序中的的错误、漏洞或者是被加密算法掩盖的数据结构。这里我会比较概括地介绍怎样去学习逆向工程。

首先应该注意两个最关键的事情:

  • 逆向工程需要大量的练习。一个人不能只通过阅读教程来学习逆向工程,教程可能会教你一些技巧,工具的使用和一般的工作流程,但它们只应该作为补充,而不是学习过程的核心。
  • 逆向工程需要大量的时间。在逆向工程中,几个甚至几十个小时的工作是很正常的,请不要吝啬你的时间。

对一个对象的逆向工程包含了三个意思:

  • 静态分析:分析二进制文件反编译后的结果。
  • 动态分析:对正在运行的进程使用调试器。
  • 行为分析:使用更高级的工具获得所选进程的行为。

通常我建议在进行一系列逆向工程挑战(如 crackme 和 CTF的时候混合使用上面的三种分析方法。

我会在下面的部分分别详细介绍三种分析方法,并列出刚开始是需要熟悉的资料和工具。

静态分析

动态分析

行为分析

行为分析与给定目标与环境交互的方式有关(主要是操作系统以及文件、套接字、管道、寄存器等各种资源)。

我建议你从下面的工具开始:

  • Process Monitor是一个免费的 Windows 应用程序,可以让你监视系统范围内的访问,如文件、寄存器、网络以及进程相关的事件等。
  • Process HackerProcess Explorer是可替代 Windows 任务管理器的工具,它们都提供了有关运行中程序的更多详细信息。
  • Wireshark是一个十分方便的跨平台的网络嗅探器。
  • strace是一个用于监视给定进程系统调用的 Linux 工具。
  • ltrace与 strace 类似,但它用于监视动态库调用。

其他有用的资源

正如我一开始提到的,这里给出的只是学习之初的建议,它们在逆向工程领域中只是冰山一角。下面是一些学习资料。

书籍:

  • Reverse Engineering for Beginners (2017) by Dennis Yurichev (CC BY-SA 4.0, so yes, it's free and open)
  • Practical Malware Analysis (2012) by Michael Sikorski and Andrew Honig
  • Practical Reverse Engineering (2014) by Bruce Dang, Alexandre Gazet, Elias Bachaalany, Sebastien Josse
  • Hacker Disassembling Uncovered (2003) by Kris Kaspersky
  • Reversing: Secrets of Reverse Engineering (2005) by Eldad Eilam

其他资源: