系统编程和逆向工程

逆向工程 操作系统 系统调用
2021-07-07 12:41:22

我是否需要学习系统编程(例如 WinAPI 和 Linux API)才能真正擅长逆向工程?还是我应该把它当作一个参考,这样每当我遇到系统调用时,我就去了解它?

我想成为一名逆向工程师,作为我渗透测试“爱好”项目的一部分,因此我需要有关此问题的建议。

3个回答

通常,逆向工程师会将汇编代码翻译成更高级别的语言,因此非常有必要熟悉该语言(或至少一种类似的语言),通常了解这些语言的内在特性以及常见语言结构的翻译方式对下级很有帮助。

当您尝试了解程序执行(例如网络接口、文件操作、UI,例如 read()、recv() 等)时,需要了解系统级 API,但当您对包含的部分进行逆向工程时不需要了解系统级 API代码,即它不读取文件,发送/接收数据包。举一个例子,如果您没有受过这些方面的教育,多处理/线程可能会使事情复杂化。

如果您对逆向工程感兴趣并且没有提及,那么您应该熟悉的另一个主题是了解您将进行逆向工程的架构的汇编语言(PC 通常是 Intel 的 x86 和 AMD 的 x86_64)。两者都有指令集手册,其中深入介绍了汇编语言,并提供了参考手册和一般方法和概念(例如寄存器、堆栈等)的介绍。

您显然可以边学边学,这是学习逆向工程的有效方法,因为您应该真正通过示例来学习。

您可以前往crackmes.dehttp://www.tuts4you.com并从初学者逆向工程二进制文件开始,并尽可能多地阅读文章(解决方案)!

另一个不错的新手资源是lena141的动态RE视频系列

通常系统编程不是必需的,但建议... 了解应用程序流程、CPU 架构(堆栈、堆、异常)、文件格式(PE、ELF)也很重要。我推荐两个很好的资源:

您需要了解您感兴趣的每个操作系统的系统编程背后的基本一般原则 - 例如系统调用是什么,以及虚拟内存的管理方式。随着时间的推移,您将确定您在日常工作中更感兴趣的系统编程领域。

APIs - 将它们视为参考以查找每个调用的细节。

学习倒车的唯一方法就是经常倒车。学习百科全书肯定是拖延的方式:)