在专业级别上,反向软件工程用于什么目的?目标是什么软件?为什么?

对于相当复杂的编译代码,这些代码正在做一些新颖的事情,对通过逆向工程对该代码的操作方式进行有意义的洞察似乎需要大量的专业知识,劳动力和时间。特别是,我认为雇用有能力的汇编程序员非常困难,甚至可能很昂贵。但是,我还没有一个最模糊的想法,拥有资源的实体会想花这些资源。

这是我的可能性清单...


编写恶意软件
编写反恶意软件
也许正在分析竞争对手的产品?

这不是一个好清单。这里的现实是什么?什么样的软件可以证明反向工程的费用是合理的?

请参见有关0xC0000022L答案的评论,以对问题进行一些细化。

评论

[代码]反向工程在哪些行业中可能重复使用?

#1 楼

逆向工程通常以多种方式使用。这里只是涉及逆向工程的一些最常见的专业活动的列表。


恶意软件研究。如果不进行逆向工程,就很难确定恶意软件的实际用途,如何以及更重要的是如何清除或防止感染。
P窃检测:逆向工程通常合法地用于确定公司或特定公司公司或特定Y的X Y窃代码。
取证。
兼容性。逆向工程支持并仍然支持许多开源项目,例如Samba或Star / Libre / OpenOffice。没有专业的(和嗜好的)反向工程师,没有人能够像以前的软件那样编写软件,因为根本没有适用于所涉及的协议或文件格式的规范。如果您使用的是Libre / OpenOffice,MacOSX或Linux,则实际上是许多年来反向工程师工作的结果。
漏洞研究/开发。为了发现公司,程序员或第三者留下的未记录的功能,漏洞或后门,自然需要进行逆向工程。
修改遗留程序。这是我在该领域看到的最常见的任务之一:X公司购买了程序Y,但生产它的公司Z消失了,它们根本没有源代码。该公司X签订了逆向工程服务,以修复错误和/或将旧的(死的)应用程序用于自己的目的。如果该程序也受到保护,则反向工程师还需要首先取消复制保护。
分析竞争对手的产品。自然,这是很常见的事情。特别是在谈论硬件产品时。顺便说一下,它发生在所有领域。您认为保时捷不会对法拉利的赛车进行逆向工程吗?
源代码恢复。 X公司由于某种原因丢失了其程序/产品之一的源代码,并且他们只有二进制文件。该公司与反向工程服务公司签订合同,以重建/恢复源代码。
分析外国政府的硬件和软件。您知道了。
二进制补丁开发。某些产品仍在发展,但是提供服务的公司修复漏洞的速度非常慢(Oracle很快就出现了……),或者根本不在乎。在这种情况下,可以签定逆向工程服务以开发要应用于产品的二进制补丁程序,以修复错误或漏洞(每个版本都要修复补丁程序)。减少逆向工程师通常要做的更专业的任务,但我认为此列表为您提供了一个总体思路。

评论


+1!该清单经过深思熟虑,说明内容丰富而简洁。

–普莱克斯
14-10-15在8:28

谣言(和网络服务器访问日志表明它已被用作Microsoft内部的培训材料)要求它一次(大约10至15年前)是磁盘上NTFS文件系统格式的唯一文档(包括Microsoft内部!)。是通过逆向工程创建的Linux-NTFS Wiki。 Samba也被要求相同。因此,如果事实确实如此,则Microsoft必须对自己的协议进行逆向工程,以符合欧盟的反托拉斯法令,迫使他们公开记录其网络协议。

–Jörg W Mittag
2014年10月15日在9:16

@JörgWMittag,如果是这样,我想知道MS如何计划添加到NTFS?他们是在计划自己进行逆向工程还是只是在不知道自己要添加什么的情况下添加到文件系统中?了解MS,我认为是后者。

–trysis
2014年10月15日15:24

@trysis:他们可能有一支由开发人员组成的团队,他们从内到外都知道它,而且从来没有想到没有人编写过任何文档。我们发现最近在工作中,一名雇员离职,然后我们意识到没人知道他所维护的代码。

–鸭鸭
14-10-16在18:38

@MooingDuck您可能会惊讶它发生的频率。最大的软件公司的活动。

–约翰·科雷特
14-10-17在7:38

#2 楼



查找产品的未记录功能。


例如查找注册表项或设置为打开调试模式。


查找文档不良的功能的工作原理。

调试


有时我发现自己在IDA中加载了自己的软件,以查找哪些代码



破解破解复制保护



keygens是通常是通过对应用程序的许可证密钥验证算法进行逆向工程创建的。
有时公司可能已将许可证代码丢失到某些古老的软件中。 。

修改现有产品


将自己的自定义rom闪烁到手机。


接口当前产品使用古老的软件。


评论


我可以确认数字6。即使有来源,也要做很多次。原因很简单:优化器有时会搞砸。出于相同的原因,我在反汇编程序模式下而非源代码模式下使用了GDB。

– 0xC0000022L♦
2014年10月15日在7:14

真?这些都是专业活动吗? #4和#7尤其令人眉毛。

–普莱克斯
2014年10月15日在7:16

@Praxeolitic:绝对(4)。以Windows为例。在没有源代码的情况下,如何了解内部人? 7甚至有一个完全合法的用例:让某人尝试您的版权保护方案,看看它是否可以承受。颈锁制造商就是这样做的。

– 0xC0000022L♦
2014年10月15日在7:40

好的,#7是有问题的...但是增加#10

–威廉·亨格维尔德(Willem Hengeveld)
14-10-15在8:56

回覆。 #4:我遇到的库记录非常糟糕,以至于我不得不求助于RE以弄清楚如何使用本应公开的功能。与不懂软件的硬件公司打交道时,您会经常看到这种事情。

–凯文·克鲁姆维德(Kevin Krumwiede)
14-10-15在18:58

#3 楼

作为一名专业的逆向工程师,我崇尚:


故障排除
开发开发
恶意软件分析
实现记录不良的API调用。
P窃,他们知道诺基亚电话库中有未记录的内核呼叫。因此,我们对此进行了反向工程,并创建了一个也使用此调用的程序。

整体反向可增加您的编程知识。

#4 楼

进行逆向工程以恢复工件的抽象设计的关键目的。

源程序是概念的实现。它包含大量实现效果的代码/门,然后在此之上进行优化以合理地实现效果(空间,时间,热量,面积,功率等)。它专注于良好的执行力,而不是概念的良好文档编制。

对于正在运行的产品,一切都很好。但是,如果您想了解已有的代码(并且犯了将设计扔掉的错误[每个人都有,不要让我开始对此感到愚蠢]),然后抽象出所有详细的实现,将抽象结构和计算非常有帮助。

这里是我定期撰写技术文章,主题是该技术(上世纪[!],仍然不错,恕我直言):逆向工程是逆向工程。本文从实时操作系统中获取低级汇编代码,并将其抽象回到其实现的同步原语中。本质上说的是,“这个概念是在这样的代码中的代码的这些地方实现的。”

这个想法部分源于Rich and Water 1980年中期对(程序员的学徒。在他们的案例中,他们专注于通过执行相当于数据流图匹配的方式来发现代码中的抽象实现。 (其他各种论文和博士学位论文也提出了类似的想法)。我的RE论文建议在低水平识别的基础上嫁接整个设计模型。

我公司最近为陶氏化学公司实现了Rich&Water的愿景,即从低级工业控制器代码中提取过程控制模型。陶氏正在利用它将运行化工厂的旧代码迁移到现代控制器。请参阅陶氏化学的SD构建工具。这只是宣布了这项工作,但我们已经进行了几年,并取得了良好的效果。我们希望尽快将其编写成技术期刊,并将其应用到更常规的语言(例如C)中。

#5 楼


为游戏撰写作弊。
为游戏撰写反作弊。
寻找编写不良的代码以利用或修复和修补它。

#6 楼


磨练您的技能并保持最新(以及使用工具)。
好奇心。是的,不必像Willem的回答那样纯粹由目标驱动,如4.和5.。
建立与旧产品,文件格式或体系结构的兼容性。在这种情况下,动机可以是11,也可以是4或5,或者可能完全不同。


评论


但这是非专业原因,对吗?我真正难以理解的是IDA之类的程序是如何存在的,它们超出了个人的价格范围。奖励是什么?我当然对10和11表示同情,但我想尝试用一个明确定义的问题来回答这个问题:公司/政府从事逆向工程的主要动机是什么?

–普莱克斯
2014年10月15日在7:22

@Praxeolitic:您可能不会让11溜走,尽管这表明您的问题确实是基于意见的,但是10无疑是专业原因。除非您认为专业人士不需要及时更新和培训他/她的技能。旁注:即使是学生,我也购买了IDA,后来又更新了许可证。现在已有十多年了。是的,作为个人。好奇心可以成为强大的动力。请定义专业。你是说广告吗?

– 0xC0000022L♦
14-10-15在7:25



这个问题在一定程度上当然是主观的问题,但是我想保持礼貌,而不仅仅是在这里提出我的第一个问题。是的,这是一个年轻的stackexchange,也许还不错。

–普莱克斯
2014年10月15日在7:32

不用担心,我很乐意为结束投票而投票,但是我也很高兴看到其他人提出更多的观点。因为我认为您和Willem基本上都牢牢地抓住了这一点,所以当然会有可能的变化(这就是为什么我认为11更像是一个超集,而动机可能是出于商业目的)。尽管如此,原因只是一个简短的清单。

– 0xC0000022L♦
14-10-15在7:37

反向代码工程通常将范围限制为程序或“代码”,而反向工程则可能将洗衣机拆开以了解其构造和工作方式。该SE网站是关于后者的,而不仅仅是前者。这就是为什么这很重要:)

– 0xC0000022L♦
14-10-15在7:51



#7 楼

我相当专业地进行了逆向工程。通常,我们受委托进行以下操作:

1)确定为某个软件创建破解的难度(由该软件的开发人员进行。)

2)了解特定的漏洞利用(从安全的角度来看,例如缓冲区溢出)。换句话说,“这是我们收到的电子邮件;告诉我们发生了什么事”或“这是利用程序。它究竟是如何工作的,以及将来我们如何防御这种利用?”

3)作为较大的代码安全审核的一部分,通过检查二进制文件而不参考源代码来查找软件中的错误。这非常有用,因为某些危险的行为(在代码中不明显)可能会以二进制形式“突围”您,例如复杂的预处理器宏会导致C / C ++中的危险行为。因此,与直觉相反,有时我们使用反向,因为它更快。查阅IDA pro和Hopper的各种“快速反转”功能可在此方面提供帮助-反编译为伪代码,查找对X的所有调用或仅搜索字符串表,然后查找对危险/可疑字符串的所有引用,等等。上。有时,仅在二进制文件上运行“字符串”可以使您对错误可能在哪里有所了解。紧随其后的是真正的,可逆的工具可以提供帮助。这不限于C / C ++ / Objective C-如果我们在.Net或Java中工作,则将使用.Net Reflector或Java Decompiler,并且其他环境也具有等效功能。

有时,我们使用逆向工程来帮助我们进行更大的项目。例如,我们可能想单独测试一个组件。要在没有源代码的情况下执行此操作,我们可能需要编辑二进制文件以引入日志记录调用或某些行为的捷径。

当然会有模糊测试,但这可能并没有真正意义上的逆转,尽管它可能涉及在汇编级别检查代码,以了解代码为什么崩溃/错误在哪里/是否是安全问题。 >
逆向工程即使在一般的开发环境中也很有帮助的原因有很多。在安全领域,这非常重要。

在专业发展方面,如果您在安全领域并且具有良好的反转能力,那么您可能会处于最高收入规模。您需要能够做其他事情,但是,如果您的履历表上有倒车-并且可以备份-那么被录用应该不是问题(至少在安全领域)。

#8 楼

已经有很多不错的答案。如果我可以加上我的两分钱。逆向工程软件类似于机械师或修补匠,他们喜欢将事物拆开,理解它们的工作原理,将它们放回原处,并可能修改其主题以适应其行为,因此更像他们的喜好。

任何电气工程师,硬件设计师和最出色的QA工程师都是才华横溢的逆向工程师。也就是说,他们在调试/分析软件/硬件实现方面具有专业知识。在学校学习期间,我曾在AMD实习,我的调试技能不仅帮助我晋升到公司中更重要的职位,而且也非常有趣!就像您可以玩多长时间的游戏或难题。挑战永无止境。

我最喜欢的反向工程师合法需求的例子是NASA。它们不是唯一适用于“关键任务”一词的服装,人们的生活取决于他们的工作质量,但它是唯一必须解决问题的设备,即使他们的产品在太空中飞驰。他们必须设置和冻结产品版本数年,才能使软件/硬件进入发射台。这似乎很愚蠢,因为我们口袋里的电话比整个航天飞机具有更大的计算能力,但它们不能使用现代技术。太冒险了。他们必须接受规范冻结时可用的资源,仅此而已-以免他们招致计划和工作量,以进行升级,测试,修复,重新测试,再次验证,模拟实际情况以确定故障点并加以修复,然后重新开始...。这是一项严肃的工作,那些工程师们不会轻率地承担起责任。

您会惊奇地发现NASA项目在硬件上使用Microsoft OS作为航天飞机组件吗?它与使用M $ OS作为基础(例如,销售点终端或电厂的控制系统)并无多大区别。现在考虑一种情况,其中发现OS,硬件或第三方软件的某些部分存在缺陷。此外,假设供应商不关心NASA所做的努力,并决定他们没有财政动机来解决问题-即使生命取决于该组件是否完好无损。 NASA陷入困境。

此时,他们的选择是更换组件并重新开始其流程-耗费大量时间,工时,并且无法保证不会发现其他组件升级后的严重缺陷;或者,而不是升级,他们可以对硬件/软件故障进行逆向工程,并确定自己是否可以解决问题-可能需要重新设计,更改一些电阻器的值,​​以使存储器总线上的电压水平在使它们失效的极端条件下保持在要求的限制内,或者可能存在二进制补丁程序,他们可以应用该二进制补丁程序来减轻错误状态,他们发现了生命支持系统开始出现故障或探针的电池耗尽并无法重新使用的状态自行充电。

我并没有完全弥补这些情况。它们来自我曾在JPL工作的朋友,我在大学时的工程教授或在技术行业工作过的同事们所讲述的故事。所有这些以及更多,已经由NASA的工程师克服了。做他们所做的事,确实比印度付的钱(也要给他们顶礼帽)高很多,但第一次经历总是比较昂贵。

从技术上讲,NASA工程师将违反供应商声称拥有的一项或多项知识产权法(他们可能会或可能不会真正拥有这些权利;我在这里不打算对此进行辩论)。如果您购买了护卫舰,完全有权利消除汽缸的压力,从而改变汽车的性能曲线;使用不同的轮胎;改进的悬架;对喷油系统中的正时和混合比进行调整;著名的谢尔比眼镜蛇不仅经过了改装,而且还通过售后市场进行了再营销-完全合法。

如果您购买了收音机并想做一些修改,以使其防水,则可以将其随身带到湖上,放大其输出,以便仍可以使用

现在,越狱您的iPhone,修改您的iPhone的xBox或Kinect系统,或者在NASA的情况下修改操作系统和/或在移动设备上重新设计内存总线,以确保您的人身安全。所有这些活动都引起了供应商的强烈反应,不管他们出于何种原因,他们都不希望这些活动继续进行或变得更加广泛。最终,这导致了我们今天通过的DMCA法律。在此之前,即使您单击“我同意”之前已提交的重做条款和服务,仍然存在该合同是否可强制执行的问题。

数字千年版权法案(DMCA)并未对中国或南美的大型黑市构成任何抵触,因此对其处以严厉的罚款,并已被视为对那些希望追逐消费者购买力的消费者的“狩猎许可证”。有。未经许可复制他人音乐是否属非法;出售,交易甚至赠送?

显然,这应该是非法的。艺术品,书籍,专利工艺,受保护的商标;是的,那些也应该受到保护。软硬件;再一次,是的,软件的作者应该能够执行其许可方面的共鸣,以保护创建所述软件或硬件所做的投资。明确地,合法地购买一本副本,转身制作副本,然后出售/交易/或提供未经许可的副本是并且应该保持非法。 Microsoft,VMWare,Adobe和类似的大公司应保留该权利。

现在,一旦我获得了软件或硬件的许可,就可以进行修改,然后出售/交易/或放弃具有我的修改特色的软件/硬件。那要看。从衍生作品中获利超出了您最初许可该艺术作品(即软件)的限制,并且是非法的。例如,您无法绘制迪士尼角色的肖像,更改名称,然后将其声明为您自己的名字并从使用中获利。我相信Mikey不再受到保护,但是当他那时已经并且应该是非法的。修补,更改,讨论,显示或教授他们希望在其合法许可的软件和硬件上进行的任何活动吗?我不会回答,但是我会说DMCA表示“否”。实际上,反向工程师用于调试操作系统的工具与检方将引用的工具与非法活动的证据完全相同。

让我们为起诉DMCA案件的人提供一些帮助,在该案件中,被告被告知已访问了加密密钥,除其他外,这些密钥将使被告能够复制受保护的艺术品(例如音乐和电影)。有一些正当的理由可以解释被告的行为,但是可以进行的非法活动并不多,对那些试图保护自己的人来说代价高昂。归根结底,即使他们尽了最大努力,也无法阻止任何人访问这些加密密钥。

这让我想起了床垫上的标签,警告过分严厉的处罚用于移除所述标签,但是标签没有保护。只是威胁和过分的惩罚被用来举例说明,因为它们引起了大火并宣告了女巫的猎杀。支持苹果制造更好的产品,被科技巨头所迷吗?地狱没有,但您最好相信他们曾经尝试过-那件事发生了。 Target或Home Depot的员工警告了潜在危险;他们现在在哪里?他们被解雇,流失,被认为对公司有害,被回避并贴上“不是团队合作者”的标签。在Tar​​get,Home Depot和无数其他数据泄露事件(肯定是其中至少一项事件影响了您的生活)之后,如今比以往任何时候都更加明显的是,逆向工程不仅是一项权利,而且是我们的一个方面1)保护像您这样的世界上无辜的消费者和数字公民的迫切需要的新兴社会结构; 2)对那些有责任采取合理措施保护赋予他们健康的社区负责(被授予以换取服务)。

美国国家安全局,中情局,荷兰储蓄银行,HealthCare.govs和我们都希望并有权做的事的医院。是逆向工程师,它将成为现代自由战士,明天的激进主义者,当权力腐败和贪婪让路而忽略给予他们的权力所隐含的责任时,小家伙将站在你这一边。组织。使它更具戏剧性;反向工程师是一种新宗教的牧师。我们应该对他们表示敬意,为他们勇敢地站在那些喝醉了的权力者面前鼓掌,并在他们冒着家人的隐私冒着生命危险代表我们走上火线时保护他们,因为这是“正确的做法”。

如果您认识其中一个人,请在今晚给他们买啤酒,然后说声谢谢。与任何士兵一样,当下一个数字悲剧迫在眉睫时,他们将成为保护我们的人。