逆向工程:它真正有什么好处?[关闭]


15

我有一些无辜/初学者的问题:

  • 逆向工程有什么用?
  • 作为程序员,我应该学习逆向工程的技巧吗?
  • 对于有经验的程序员有什么好处?

5
这个问题是仅涉及反向工程的拆卸类型,还是其他问题?(因为标签中包含“ assembly”和“ low-level”。)
Izkata 2012年

Answers:


14

逆向工程有什么用?

逆向工程主要适用于破解和黑客攻击(删除序列号保护或密码提示),但也有助于理解其他软件可以执行的病毒或奇迹。有时,这是一种有用的技能,可以在您没有来源的程序中查找错误并进行修补。

作为程序员,我应该学习逆向工程的技巧吗?

是的,尝试学习汇编器并使用不错的调试器。通过了解更接近金属的较低层次的知识,可以使您成为更好的开发人员。

拥有逆向工程经验的程序员将有什么好处?

您将成为一名出色的黑客/黑客。您可以为其他反病毒生产商工作。作为个人示例:我曾经对软件进行过反向工程,以跟踪建立oracle连接时发生的错误。没有人能解决这个问题,所以我得到了一些名声。

另外,我也想引用@johannes的评论,因为他绝对正确:

我不会将其限制为“不良”破解。从更系统管理员的角度来看,弄清楚应用程序失败的位置可能很有趣,反汇编对于确定编译器是否发疯(通常是您的代码)很有用。


8
我不会将其限制为“不良”破解。反汇编对于找出编译器是否发疯(通常是您的代码)非常有用,从更系统管理员的角度来看,查看应用程序失败的位置可能很有趣,……
johannes 2012年

@johannes:是的,你是对的。我可以在答案中写出来吗?
猎鹰

当然,您可以做任何事情,我对此不主张版权;-)
johannes

7
抱歉,这是绝对糟糕的答案。逆向工程绝对不是所定义的“主要用于……破解和黑客”,而任何不处理系统编程的人都将从意识形态的角度被引入逆向工程。
Chuu 2012年

1
我认为还没有提到它,但是如果您在非您自己的软件上这样做(或不要告诉任何人),请小心。几乎所有的商业EULA都禁止逆向工程。您不想收到给某人IP律师的停止和终止函,并附有副本。
2012年

25

我喜欢Falcon的回答,但我想补充一点,在一些旧的无聊的业务应用程序世界中,逆向工程可以使您摆脱一些麻烦。

在工作中,与没有任何新维护的第3方系统进行数据集成时,我们会做很多事情,因此我们可以知道应该或不应该在哪里中断。

如果未包含源代码,我们还将使用反向工程师来检查所购买的第三方组件上的代码质量(当然有一定的限制)。

我的真实观点是:逆向工程不局限于单一技术或语言,而是一个学习“黑匣子”内部知识的过程。如果您有依赖的代码,但您不信任或不信任,则绝对应该偷看一下,看看代码在做什么。


哎呀,我们甚至研究了我们租用的第三方系统的SQL存储过程,只是为了检查它们有时是否正确满足了我们的要求。
马查多

3
+1。即使是来自大型公司的畅销软件产品,有时也可能会成为一个黑匣子,而这种情况是不适当的,过时的,错误的,有时不存在的在线文档等。
RalphChapin

13

逆向工程也有无聊的一面。这是当您所在的公司有一些仍在使用的代码或程序,但是没有人声称对它有任何了解。因此,您遍历了所有文档,编写了文档,编写了测试以及在启动项目之前应完成的所有工程设计工作。您对已经编写的软件进行此操作,因此称为“逆向工程”。

有了代码,这要容易得多,但是从技术上讲,它仍然是逆向工程。当他们谈论遗留项目时,这是在商务会议中经常出现的术语之一。


+1,对我来说尤其如此。我曾在一些银行的遗留系统中工作,这些银行的遗留系统没有一个技术文档。
马查多2012年

7

只是为了扩大逆向工程的商业价值-我们遇到的新客户中,有超过一半的新客户拥有一个现有的系统/应用程序(请注意,并非总是在生产中),但是与以前的软件开发供应商的关系却步履蹒跚。

在大约30%的情况下,客户根本没有获得系统的来源,而且在许多情况下,许多实际的业务流程,规则和知识都被锁定在代码中。

在以前的供应商被恶意恶意攻击,混淆二进制文件,对代码进行时间锁定等两种情况下,无限期地吸引客户。

因此,要回答您的问题,逆向工程通常是与极度绝望(和疲惫不堪的客户)开展新业务的起点,并且从现有代码中提取被遗忘的知识可能是“业务关键”成功因素。


2

我认为反向工程的技能和调试的技能是完全相同的-如果您是出色的调试器,那么您也是出色的逆向工程师,反之亦然。


1

据我所知,有时它被用来使某些部件/软件可以互操作。一些怪异的界面,实现中的错误等。

但是据我了解,这是一个非常棘手的主题,因此,本来就很复杂的软件开发定律在反向工程中被推到了极致。


1

好的,通过逆向工程,您可以重用代码,从而最大程度地减少工作量。例如,在Symfony2中,您可以转换由常规MySQL制成的数据库并将其转换为教义格式,这是在Symfony中实现的逆向工程过程....通过逆向工程,您可以看到让代码说“ in 2D”的代码


0

根据我的经验,我仅举一个真实的例子。

一旦我们公司从另一个公司接管了一个项目。进入项目大约半年后,我们意识到一个子项目没有代码。当我们要求前公司提供代码时,他们礼貌地回答说找不到子项目的代码。我们需要代码,因为我们想在该子项目中进行更改。

我不得不对子项目进行逆向工程

首先,我对程序集进行反编译(是的,这是一个.NET项目)。反汇编的结果是乏味而混乱的代码,没有局部变量的名称和复杂的控制结构。这是因为编译会丢弃无法反编译的重要信息。

然后,我试图找出在哪里更改该代码。为此,我简化了代码,使其行为相同,但方式更为简洁。我还从其行为猜测了变量的名称。我单步执行了多次代码,直到弄清楚它在做什么。

我没有对所有东西进行逆向工程,只有我们需要更改的部分。还不错,大约200行VB代码。花了大约五天的时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.