反向工程的与软件
由于“反向工程”一词用在软件工程(简称“软工”)领域中的具体含义模糊不清,Chikofsky和Cross为此写了篇文章,以阐清及区分“反向工程”与各种相近的概念。据文章所述,反向工程是一种分析目标系统的过程,其目的是识别出系统的各个组件以及它们之间的关系,并以其它的形式或在较高的抽象层次上,重建系统的表征(Representations)。软件反向工程也可被视作“开发周期的逆行”。 在此定义下,对一项软件程序进行反向工程,类似于逆行传统瀑布模型中的开发步骤,即把实现阶段的输出(即软件程序)还原回在设计阶段所做的构思。软件反向工程仅仅是一种检测或分析的过程,它并不会更改目标系统(否则就成了软件再工程)。
软件防篡改技术被用于遏制对专有软件进行反向工程及再工程。实际应用中出现了两类反向工程。第一种,软件的源代码可用,但是更高层次的部分几乎没有描述文档或者描述文档不再适用或者丢失。第二种,软件没有可用的源代码,任何能找到它的源代码的努力都被称为反向工程。大部分人都熟悉这个词的第二种用法。软件的反向工程可以使用净室技术(Clean Room Design)来避免侵犯版权。
软工中的黑盒测试与反向工程有很多共同点,但黑箱测试人员常供以API以作测试,并且测试的目的就是通过外部攻击,找出程序漏洞和未归档的特性。
反向工程的其他目的包括:安全审查、 解除复制保护(又称破解)、绕过消费类电子产品中常设有的访问限制、定制嵌入式系统(例如引擎管理系统)、产品内部修补或更新、给功能不全的廉价硬件(例如某些显卡芯片组)添加额外功能,或仅为满足好奇心。 对最终程序的二进制代码所进行的反向工程被称为“代码反向工程”,或简称RCE(ReverseCodeEngineering)。例如,我们可以用Jad对Java平台的二进制码进行反编译。一个著名的反向工程案例是,首个由非IBM公司所实现的IBM个人电脑(PC)中的BIOS,这开创了IBM PC兼容机产业,使得IBM PC兼容机成为多年来的主流计算机硬件平台。一个以软件反向工程为乐的团体例子是CORE(ChallengeOfReverseEngineering,意为“挑战反向工程”)。在美国,软件反向工程只要遵守版权法的合理使用规定,都是受保护的。成功的软件反向工程项目有:
1.Samba:一个允许非Windows系统与Windows系统共享文件的开源项目。由于微软没有公开Windows文件共享机制的信息,Samba必须作反向工程,以便在非Windows系统上,仿真出同样的行为。
2.Wine:对Windows API做了同样的工作,
3.OpenOffice:对Microsoft Office文件格式作反向工程。
4.ReactOS:竭力在ABI及API上,兼容NT系Windows系统,以便让为Windows所编写的软件和驱动程序可以在其上运行。
5.WindowsSCOPE:用来监测及分析Windows系统内存的实况内容。 软件反向工程有多种实现方法,主要有三:
1.分析通过信息交换所得的观察。最常用于协议反向工程,涉及使用总线分析器和数据包嗅探器。在接入计算机总线或网络的连接,并成功截取通信数据后,可以对总线或网络行为进行分析,以制造出拥有相同行为的通信实现。此法特别适用于设备驱动程序的反向工程。有时,由硬件制造商特意所做的工具,如JTAG端口或各种调试工具,也有助于嵌入式系统的反向工程。对于微软的Windows系统,受欢迎的底层调试器有SoftICE。
2.反汇编,即藉用反汇编器,把程序的原始机器码,翻译成较便于阅读理解的汇编代码。这适用于任何的计算机程序,对不熟悉机器码的人特别有用。流行的相关工具有Interactive Disassembler。
3.反编译,即藉用反编译器,尝试从程序的机器码或字节码,重现高级语言形式的源代码。
2024-10-28 广告