mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-25 11:41:16 +07:00
3.5 KiB
3.5 KiB
3.1 Reverse
怎样学习逆向工程
逆向工程一直被视为一种充满乐趣和带有神秘色彩的东西,逆向工程师看起来就像是在密密麻麻的指令中寻找宝藏的人,他们绕开层层的限制和保护,发现程序中的的错误、漏洞或者是被加密算法掩盖的数据结构。这里我会比较概括地介绍怎样去学习逆向工程。
首先应该注意两个最关键的事情:
- 逆向工程需要大量的练习。一个人不能只通过阅读教程来学习逆向工程,教程可能会教你一些技巧,工具的使用和一般的工作流程,但它们只应该作为补充,而不是学习过程的核心。
- 逆向工程需要大量的时间。在逆向工程中,几个甚至几十个小时的工作是很正常的,请不要吝啬你的时间。
对一个对象的逆向工程包含了三个意思:
- 静态分析:分析二进制文件反编译后的结果。
- 动态分析:对正在运行的进程使用调试器。
- 行为分析:使用更高级的工具获得所选进程的行为。
通常我建议在进行一系列逆向工程挑战(如 crackme 和 CTF)的时候混合使用上面的三种分析方法。
我会在下面的部分分别详细介绍三种分析方法,并列出刚开始是需要熟悉的资料和工具。
静态分析
动态分析
行为分析
行为分析与给定目标与环境交互的方式有关(主要是操作系统以及文件、套接字、管道、寄存器等各种资源)。
我建议你从下面的工具开始:
- Process Monitor是一个免费的 Windows 应用程序,可以让你监视系统范围内的访问,如文件、寄存器、网络以及进程相关的事件等。
- Process Hacker和Process 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
其他资源: