我问自己在哪里使用逆向工程。我有兴趣学习它。但我不知道我是否可以/应该把它放在我的简历上。
我不希望我的新上司认为我是一个邪恶的黑客之类的。:)
- 那么值得吗?
- 我应该学习它还是将精力放在其他地方?
- 有没有好的书或教程?:)
我问自己在哪里使用逆向工程。我有兴趣学习它。但我不知道我是否可以/应该把它放在我的简历上。
我不希望我的新上司认为我是一个邪恶的黑客之类的。:)
逆向工程通常用于破译文件格式以提高互操作性。例如,许多流行的商业 Windows 应用程序不能在 Linux 上运行,这需要对这些应用程序生成的文件进行逆向工程,以便它们可以在 Linux 中使用。Gimp、OpenOffice、Inkscape 等支持的各种格式就是一个很好的例子。
逆向工程的另一个常见用途是解密协议。很好的例子包括Samba、许多非 iTunes 应用程序中的DAAP支持、跨平台 IM 客户端(如Pidgin)等。对于协议逆向工程,常用的行业工具包括Wireshark和libpcap。
毫无疑问,逆向工程通常与软件破解有关,这主要是理解程序反汇编。我不能说我曾经需要反汇编一个程序,而不是出于纯粹的好奇或让它做一些它没有做的事情。逆向工程程序的一个优点是要理解它,您需要学习汇编编程。然而,有一些合法的方法可以磨练你的反汇编技巧,特别是使用Crackmes。需要说明的重要一点是,当您在应用程序中开发安全措施时,或者如果您从事该业务,您需要了解逆向工程师如何操作以试图保持领先一步。
恕我直言,逆向工程是一项非常强大且有用的技能。更不用说,它通常很有趣且令人上瘾。就像提到的 hmemcpy 一样,我不确定我是否会在我的简历中使用“逆向工程”一词,只使用与之相关的技能/知识。
在我看来,逆向工程技能可能有用的领域之一是反病毒行业。但是,我不会将“逆向工程”放在我的简历上,而是写下汇编语言的经验,使用各种反汇编器/调试器(例如 IDA、SoftIce 或 OllyDbg)和其他相关技能。
逆向工程通常是您必须做的事情,而不是因为您想这样做。例如,简单地对产品进行逆向工程就存在法律问题!但也有必要的情况——(例如)供应商已经离开并且不再存在或无法联系到。一个很好的例子是您输入问题的 WMD 编辑器。SO 团队/社区必须从混淆的源代码对此进行逆向工程,以应用一些错误修复。
我从事过逆向工程项目,它们当然与黑客无关。我们拥有所有此类项目的源代码(合法),但对于其中一个项目,实际上没有人知道代码在幕后做了什么,以及它如何与其他系统交互。这些信息早已丢失。在另一个项目中,我们有源代码和一些文档,但文档不是最新的,因此我们必须对源进行逆向工程以更新文档。
我不介意在我的简历上有这样的项目。事实上,我相信我在这个过程中学到了很多东西。
每当文档丢失或不存在时,都需要进行逆向工程。拥有源代码会有所帮助,但您仍然必须对原始逻辑、流程控制和错误进行逆向工程。
使用奇怪的硬件通常会迫使您进行逆向工程。例如,我曾经使用过一个行为异常的旧信号采集卡;输入漂亮的正弦波会产生严重瘫痪的数据。事实证明,每隔一个字节都是二进制补码,每个其他字节都是补码——或者至少,当这样解释时,数据变得非常漂亮。当然,这在任何地方都没有记录,并且该卡在与自己的专有软件一起使用时可以完美运行。
(根据我的经验)遇到有缺陷的旧代码是很常见的,或者由于需求的变化而变得过时,或者两者兼而有之。通常情况下,文档不足,并且原始开发人员不再可用。对代码进行逆向工程以了解其工作原理(有时做出修复或更换决定)是一项重要技能。
如果你有源头,做一个小的、精心计划的、严格范围的清理通常是合理的。(我大声暗示,不能让这成为宝贵的开发人员时间的天坑!)
能够在测试平台中练习代码也非常有帮助,既可以验证它是否符合预期,也可以识别、记录、隔离和修复缺陷。
安全地这样做需要仔细的工作。我强烈推荐 Michael Feathers 的《使用遗留代码》一书,因为它在测试此类代码方面提供了实用指导。
RCE 对安全人员(研究、开发、IDS、IPS、AV 等)来说是一项很棒的技能,但它也证明了您对该主题有深入而低层次的理解。
在使用 3rd 方库时也可以更轻松地找到自己的方式。
如果你不是从事安全行业的,如果你不擅长 ASM 就不要费心去学习它,一般来说它很难学。
图书
黑客利用艺术从安全的角度讨论了这个主题。
此外,您可能还想阅读有关 Ollydbg 和 IDA Pro 的书籍