CTF-All-In-One/doc/3.1_reverse.md

53 lines
3.5 KiB
Markdown
Raw Normal View History

2017-07-17 14:10:48 +07:00
# 3.1 Reverse
2017-09-27 21:27:04 +07:00
- [怎样学习逆向工程](#怎样学习逆向工程)
## 怎样学习逆向工程
逆向工程一直被视为一种充满乐趣和带有神秘色彩的东西,逆向工程师看起来就像是在密密麻麻的指令中寻找宝藏的人,他们绕开层层的限制和保护,发现程序中的的错误、漏洞或者是被加密算法掩盖的数据结构。这里我会比较概括地介绍怎样去学习逆向工程。
首先应该注意两个最关键的事情:
- 逆向工程需要大量的练习。一个人不能只通过阅读教程来学习逆向工程,教程可能会教你一些技巧,工具的使用和一般的工作流程,但它们只应该作为补充,而不是学习过程的核心。
- 逆向工程需要大量的时间。在逆向工程中,几个甚至几十个小时的工作是很正常的,请不要吝啬你的时间。
对一个对象的逆向工程包含了三个意思:
- 静态分析:分析二进制文件反编译后的结果。
- 动态分析:对正在运行的进程使用调试器。
- 行为分析:使用更高级的工具获得所选进程的行为。
通常我建议在进行一系列逆向工程挑战(如 crackme 和 CTF的时候混合使用上面的三种分析方法。
我会在下面的部分分别详细介绍三种分析方法,并列出刚开始是需要熟悉的资料和工具。
#### 静态分析
#### 动态分析
#### 行为分析
行为分析与给定目标与环境交互的方式有关(主要是操作系统以及文件、套接字、管道、寄存器等各种资源)。
我建议你从下面的工具开始:
- [Process Monitor](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon)是一个免费的 Windows 应用程序,可以让你监视系统范围内的访问,如文件、寄存器、网络以及进程相关的事件等。
- [Process Hacker](http://processhacker.sourceforge.net/)和[Process Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer)是可替代 Windows 任务管理器的工具,它们都提供了有关运行中程序的更多详细信息。
- [Wireshark](https://www.wireshark.org/)是一个十分方便的跨平台的网络嗅探器。
- [strace](https://linux.die.net/man/1/strace)是一个用于监视给定进程系统调用的 Linux 工具。
- [ltrace](https://linux.die.net/man/1/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
其他资源:
- [Tuts 4 You](https://tuts4you.com/)
- [/r/ReverseEngineering](https://www.reddit.com/r/ReverseEngineering/)
- [Reverse Engineering at StackExchange](https://reverseengineering.stackexchange.com/)
- [PE Format](https://msdn.microsoft.com/en-us/library/windows/desktop/ms680547(v=vs.85).aspx)
- [Executable and Linkable Format (ELF)](http://www.skyfree.org/linux/references/ELF_Format.pdf)
- [Ange Albertini's executable format posters](https://github.com/corkami/pics/tree/master/binary)