逆向工程用在哪里?
我问自己在哪里使用逆向工程。 我有兴趣学习它。 但我不知道我是否可以/应该把它放在我的简历上。
我不想让我的新主管认为我是一个邪恶的黑客之类的。 :)
- 那么值得吗?
- 我应该学习它还是把精力放在其他地方?
- 有没有好的书或教程? :)
I ask myself where reverse engineering is used. I'm interested at learning it. But I don't know if I can/should put it on my CV.
I don't want my new chief to think I am an evil Hacker or something. :)
- So is it worth it?
- Should I learn it or put my effort somewhere else?
- Is there a good Book or tutorial out there? :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
逆向工程通常用于解密文件格式以提高互操作性。 例如,许多流行的商业 Windows 应用程序不能在 Linux 上运行,这就需要对这些应用程序生成的文件进行逆向工程,以便它们可以在 Linux 中使用。 一个很好的例子是 Gimp、OpenOffice、Inkscape 等支持的各种格式。
逆向工程的另一个常见用途是解密协议。 很好的例子包括 Samba、DAAP 支持许多非 iTunes 应用程序、跨平台 IM 客户端,例如 Pidgin等。对于协议逆向工程,业界常用的工具包括Wireshark和libpcap。
毫无疑问,逆向工程常常与软件破解联系在一起,软件破解主要是理解程序反汇编。 我不能说我曾经需要去反汇编一个程序,除非是出于纯粹的好奇心或者让它做一些它不做的事情。 逆向工程程序的一个优点是,要理解它,您需要学习汇编编程。 然而,有一些合法的方法可以磨练你的反汇编技能,特别是使用 Crackmes。 需要指出的重要一点是,当您在应用程序中开发安全措施时,或者如果您从事该业务,您需要了解逆向工程师如何操作才能保持领先一步。
恕我直言,逆向工程是一项非常强大且有用的技能。 更不用说,它通常很有趣且令人上瘾。 就像 hmemcpy 提到的那样,我不确定我是否会在我的简历中使用“逆向工程”一词,只使用与其相关的技能/知识。
Reverse engineering is commonly used for deciphering file formats for improving interoperability. For example, many popular commercial Windows applications don't run on Linux, which necessitates reverse engineering of files produced by those applications, so that they can be used in Linux. A good example of this would be the various formats supported by Gimp, OpenOffice, Inkscape, etc.
Another common use of reverse engineering is deciphering protocols. Good examples include Samba, DAAP support in many non-iTunes applications, cross platform IM clients like Pidgin, etc. For protocol reverse engineering, common tools of the trade include Wireshark and libpcap.
No doubt reverse engineering is often associated with software cracking, which is primarily understanding program disassembly. I can't say that I've ever needed to disassemble a program other than out of pure curiosity or to make it do something it wasn't. One plus side to reverse engineering programs is that to make any sense of it, you will need to learn assembly programming. There are however legal ways to hone your disassembly skills, specifically using Crackmes. An important point to be made is that when you're developing security measures in your applications, or if you're in that business, you need to know how reverse engineers operate to try to stay one step ahead.
IMHO, reverse engineering is a very powerful and useful skill to have. Not to mention, it's usually fun and addictive. Like hmemcpy mentioned, I'm not sure I would use the term "reverse engineering" on my CV, only the skills/knowledge associated with it.
逆向工程通常是因为你必须这样做,而不是因为你想要这样做。 例如,简单地对产品进行逆向工程就存在法律问题! 但也有一些必要的情况 - 例如,供应商已经消失并且不再存在或无法联系。 一个很好的例子就是您在其中输入问题的 WMD 编辑器。 SO 团队/社区必须从混淆的源代码中对其进行逆向工程以应用一些错误修复。
Reverse engineering is usually something you do because you have to, not because you want to. For example, there are legal issues with simply reverse engineering a product! But there are necessary cases - where (for example) the supplier has gone and no longer exists or is not contactable. A good example would be the WMD editor that you typed your question into. The SO team/community had to reverse engineer this from obfuscated source to apply some bug fixes.
在我看来,逆向工程技能可能有用的领域之一是反病毒行业。 然而,我不会在我的简历中加入“逆向工程”,而是写下使用汇编语言、使用各种反汇编器/调试器(例如 IDA、SoftIce 或 OllyDbg)以及其他相关技能的经验。
One of the fields, in my opinion, where reverse engineering skills might be useful is anti-virus industry, for instance. However, I wouldn't place "reverse engineering" on my CV, but rather I'd write down experience in the Assembly language, using miscellaneous disassemblers/debuggers (such as IDA, SoftIce or OllyDbg) and other relevant skills.
我从事过逆向工程项目,它们当然与黑客攻击无关。 我们(合法地)拥有所有此类项目的源代码,但对于其中一个项目,没有人真正知道代码在幕后的作用以及它如何与其他系统交互。 这些信息早已丢失。 在另一个项目中,我们有源代码和一些文档,但文档不是最新的,因此我们必须对源代码进行逆向工程以更新文档。
我不介意在我的简历中加入这样的项目。 事实上,我相信我在这个过程中学到了很多东西。
I have worked on reverse engineering projects, and they certainly had nothing to do with hacking. We had the source code for all such projects (legitimately), but for one of the projects nobody actually knew what the code did behind the scenes, and how it interacted with other systems. That information had long been lost. In another project, we had the source code and some documentation, but the documentation wasn't up to date, so we had to reverse-engineer the source to update the documentation.
I don't mind having such projects on my CV. In fact, I believe I've learned a lot during the process.
当文档丢失或根本不存在时,就需要进行逆向工程。 拥有源代码会有所帮助,但您仍然需要对原始逻辑、流程控制和错误进行逆向工程。
Reverse engineering is needed whenever the documentation is lost or it never existed. Having the source helps, but you still have to reverse engineer the original logic, flow control and bugs out of it.
使用奇怪的硬件通常会迫使您进行逆向工程。 例如,我曾经使用过一个表现奇怪的旧信号采集卡; 输入美丽的正弦波会产生严重损坏的数据。 事实证明,每个其他字节都是二进制补码,并且每个其他字节都是补码 - 或者至少,当以这种方式解释时,数据变得相当漂亮。 当然,这并没有在任何地方记录下来,并且当与自己的专有软件一起使用时,该卡可以完美地工作。
Working with strange hardware often forces you to reverse engineer. For instance, I was once working with an old signal acquisition card that behaved strangely; putting in beautiful sine wave produced awfully crippled data. It turned out that every other byte was two's complement and every other one's complement - or at least, when interpreted that way, the data became quite beautiful. Of course, this wasn't documented anywhere, and the card worked perfectly when used with its own proprietary software.
(根据我的经验)遇到有缺陷的旧代码,或者由于需求的变化而变得过时,或者两者兼而有之的情况是很常见的。 通常的情况是文档不充分,并且原始开发人员不再可用。 对代码进行逆向工程以了解其工作原理(有时还可以做出修复或更换的决定)是一项重要技能。
如果您有源,通常可以合理地进行少量的、仔细计划的、范围严格的清理工作。 (我大声暗示,不能让这成为开发人员宝贵时间的坑!)
能够在测试台中执行代码也非常有帮助,无论是验证它是否达到了预期的效果,或者识别、记录、隔离和修复缺陷。
安全地这样做需要仔细的工作。 我强烈推荐 Michael Feathers 的书使用遗留代码 获取测试此类代码的实用指南。
It is very common (in my experience) to encounter older code which has defects, has become outdated due to changing requirements, or both. It's often the case that there's inadequate documentation, and the original developer(s) are no longer available. Reverse engineering that code to understand how it works (and sometimes to make a repair-or-replace decision) is an important skill.
If you have the source, it's often reasonable to do a small, carefully-planned, strictly-scoped amount of cleanup. (I'm hinting out loud that this can't be allowed to become a sinkhole for valuable developer time!)
It's also very helpful to be able to exercise the code in a testbed, either to verify that it does what was expected or to identify, document, isolate, and repair defects.
Doing so safely requires careful work. I highly recommend Michael Feathers' book Working with Legacy Code for its practical guidance in getting such code under test.
RCE 对于安全人员(研究、利用、IDS、IPS、AV 等)来说是一项很棒的技能,但它也证明您对该主题有深入和低层次的了解。
使用第三方库时也可以更轻松地找到解决方法。
如果你不是从事安全行业,如果你不擅长ASM,就不要学它,一般都很难学。
书籍
黑客利用的艺术从安全角度讨论了该主题。
您可能还想阅读有关 Ollydbg 和 IDA Pro 的书籍
RCE is great skill for security guys (research, exploitation, IDS, IPS, AV etc.) but also it proves that you've got a deep and low level understanding of the subject.
Finding your way way around easier when working with 3rd party libraries as well.
If you are not working in security industry, if you are not good at ASM don't bother to learn it, generally it's hard to learn.
Books
Hacking the art of exploitation talks about the subject from security point of view.
Also you might want to read books about Ollydbg and IDA Pro