一提“破解”、“逆向”等词汇,大家定然众口芬芸,莫衷一是,原因就是我们对其概念和历史并不知晓,换言之,我们大多数人现在只知其然,不知其所以然。当然大家最关心的法律问题更是知之甚少了。

解析软件逆向工程

软件逆向工程(Software Reverse Engineering)又称软件反向工程,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等[1]。通常,人们把对软件进行反向分析的整个过程统称为软件逆向工程,把在这个过程中所采用的技术都统称为软件逆向工程技术。

现实中,人们并不总是完全需要逆向出目标软件的所有功能,如果那样的话将会是一个艰苦而漫长的过程。大多数情况下是意图通过对软件进行逆向,从中获取软件的算法,或破解软件及进行功能扩展等。

逆向工程研究现状

软件逆向工程最早是作为软件维护的一部分出现的。早在 20 世纪 60 年代,随着第三代计算机的产生,为了挽救大量运行在即将报废的第二代计算机上的软件,同时也为加速开发第三代计算机上的软件,美国开始研制针对特定软件的专门用途的逆编译工具来进行软件移植,并成功转换了许多优秀软件。这些逆编译工具中大量使用了软件逆向工程中的技术方法。此后软件逆向工程技术逐步被各国所认识,并广泛研究和应用到多个软件技术领域中。

在国外,CMU SEI 成立了专门的再工程中心,致力于通过软件逆向工程进行程序理解技术的标识、增强和实践推广。20 世纪 80 年代,个人计算机兼容市场爆发性发展的很大一部分原因就是对 IBM PC 机的 BIOS 软件进行了逆向工程,而芯片制造商 Cyrix 和 AMD 对 Intel 的微处理器进行逆向工程后,开发出了与之相兼容的芯片。

Chikofs 等人于 1993 年发起的逆向工程会议每年举行一次,研究和讨论软件逆向工程的问题、技术及其支持工具。大量的研究成果都集中在程序理解的辅助工具上,例如,IBM 日本研究员研制的基于知识的代码理解工具 PROMPTER、美国 Yale 大学计算机系研制的对 Pascal 语言进行联机分析和理解的工具 PROUST等。

80 年代后期到 90 年代,关于解决软件逆向工程和软件版权的矛盾基本上有了结果,各国纷纷针对软件逆向工程进行立法,不是约束而是规范该领域的研究工作。根据美国联邦法律,对拥有版权的软件进行逆向工程操作如反汇编,若不是研制新产品与之竞争或获取非法利益,则所进行的逆向操作是合法的[PamelaSamuelson 1990]。日本也立法规定软件逆向工程是合法的,理由是它有利于软件应用人员之间的相互交流[[RohanMishral 997],英国政府 1992 年也修改了于1988 年颁布的软件版权法[[SingletonS 1993],该法律允许为了研究和个人学习目的而对程序逆向工程。从此,逆向工程的研究有了法律保障。

就在 80 年代国外逆编译研究相对沉寂之时,国内关于这方面的研究却如火如荼。如北京大学以杨芙清院士为首开发的“青鸟软件生产线系统”中的青鸟逆向工程工具是其中一项具有实质性的成果。它可以针对 C++语言,采用增量分析技术静态分析源程序代码,用 EER (enhancedentity-relationship)为 C++程序建立概念模型并抽取程序信息,将信息保存在数据库中,按照不同的用户需求组织程序信息,辅助用户理解 C++程序,逆向生成源程序的 OOD (Object Oriented Design)文档,为用户进一步提取构件构架提供帮助。合肥工业大学微机所展开了用手工方法对 UNIX 操作系统进行逆向工程研究。1984 年在国家自然科学基金资助下,研究 DUAL 68000 机器上的 C 语言逆编译系统,开发成功了 68000C 逆编译系统,获国家机电工业部科技进步二等奖。此外,还有北京信息学院、上海交通大学、中科院计算所、辽宁大学、武汉大学、重庆大学、北京控制工程研究所等,其中上海交通大学在 VAX 机上实现了一个 U 语言逆编译系统[HouWY 1992],北京控制工程研究所在 PC 机上实现一个 U 语言逆编译系统〔LiJ1991,但这两个系统均没有达到实用程度。

近几年来,国内许多软件公司相继开展了软件逆向工程的研究,针对网络游戏的外挂产业的日益壮大就是软件逆向工程发展的最好见证。电子工业出版社的《加密与解密》等系统丛书,看雪论坛等都为我国软件逆向工程的发展作出了贡献。

2007 年 1 月 17 日,最高人民法院发布的第一个涉及不正当竞争案件审理的司法解释明确指出:通过自行开发研制或者反向工程等方式获得的商业秘密,将不被认定为反不正当竞争法有关条款规定的侵犯商业秘密行为。这样,从法律上也为从事软件逆向工程开发者扫除了最后一道障碍。可以预见,我国的软件逆向工程必将迎来更加辉煌的明天。

逆向工程流程

在对软件进行逆向工程研究的时候,一般会依照以下几个大的步骤来完成:

1、研究保护方法,去除保护功能。大部分软件开发者为了维护自己的关键技术不被侵犯,采用了各式各样的软件保护技术,如序列号保护、加密锁、反调试技术、加壳等。要想对这类软件进行逆向,首先要判断出软件的保护方法,然后去详细分析其保护代码,在掌握其运行机制后去除软件的保护。

2、反汇编目标软件,跟踪、分析代码功能。在去除了目标软件的保护后,接下来就是运用反汇编工具对可执行程序进行反汇编,通过动态调试与静态分析相结合,跟踪、分析软件的核心代码,理解软件的设计思路等,获取关键信息。

3、生成目标软件的设计思想、架构、算法等相关文档,并在此基础上设计出对目标软件进行功能扩展等的文档。

4、向目标软件的可执行程序中注入代码,开发出更完善的应用软件

软件逆向工程可以让人们了解程序的结构以及程序的逻辑,深入洞察程序的运行过程,分析出软件使用的协议及通信方式,并能够更加清晰地揭露软件机密的商业算法等。因此逆向工程的优势是显而易见的。

目的和意义

1、由于软件生产技术水平还没有达到人们所期望的程度,所以从头开发软件已经不适应社会对软件需求的不断增长,为了避免重复劳动,提高软件生产的效率和质量,缓解软件危机,必须充分利用和改造现有软件,对现有软件进行再设计、再工程,使软件功能得到大幅提高以满足用户的需要,而再设计(Redesign)
和再工程(Reengineering)都是软件逆向工程的形式之一。再工程是指在现有系统基础上,修改系统并组装成新的形式。

2、目前运行的许多系统由于某些原因,例如其运行环境已改变,或者是根据业务的需要对其功能要进行调整,导致它们必须进行演化才能继续使用。这些系统在经历多年运行之后,包含了众多的知识,包括系统需求、设计决策和业务规则等,通过软件逆向工程将这些软件系统转化为易演化系统,是充分有效地利用这些有用资产的良好途径。软件逆向工程可以从这些系统的程序源代码出发,导出切实可用的信息。

3、在已发布的软件中,许多优秀软件生产厂家出于技术保护等原因没有向用户开放源代码或者不提供源代码,需要用户自己去恢复,此时对软件进行逆向工程研究是最好的方法。

4、现今的商业社会把软件科学纳入一种相对封闭的范畴,为了追求利润,一些软件业的霸主试图进行知识的垄断,它的直接体现就是鼓励普通用户和大多数程序员把软件看成“黑箱”,使得它们不去关心软件的运行机制,把软件的生产变成类似车间加工的一道道流程,却隔断了人们深入研究软件科学的通路。而作为开放源代码的前期工程,软件逆向工程对整个开放源代码工程有着至关重要的作用。

由此我们看出,软件逆向工程为软件技术的发展和相互学习、借鉴提供了一种很有效的技术手段,然而,由于受软件知识产权保护及相关法律法规的限制,软件逆向工程并不能像其它软件技术那样分开、透明地为大家所熟知、了解和广泛交流与应用。另外,软件逆向工程所涉及到的技术很多,它不仅要求逆向工程人员必须熟悉如操作系统、汇编语言、加解密等相关知识,同时还要具有丰富的多种高级语言的编程经验,熟悉多种编译器的编译原理,较强的程序理解和逆向分析能力等,这些都限制了软件逆向工程的发展。

更多关于安全、加密、软件发布相关资讯和产品推荐>>

软件逆向工程的前世今生相关推荐

  1. 逆向分析并修改Hello World程序《逆向工程核心原理》《软件逆向工程原理与实践》

    文章目录 OllyDbg窗口及快捷键 步骤1:VS生成需逆向的文件 步骤2:OllyDbg中打开该程序的exe文件,找到需修改的位置 步骤3:修改 修改1:修改指令 修改2:修改字符串 修改3:输出任 ...

  2. Linux下软件逆向工程的介绍(一)

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章在网上无意中发现的,翻译一下,留作纪念. 文章原网址为:http://www.ouah.org/RevEng/t1.h ...

  3. 软件逆向工程学习(一)

    前言 本专题学习软件逆向的基本原理.方法,并针对具体案例进行逆向分析,从而学习一套完整.系统的软件逆向的方法并获取相关经验. 什么是逆向工程 逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对 ...

  4. 软件逆向工程:破解教程(1/24)

    软件逆向工程:破解教程(1/24) 想学破解,花了很多时间还是没有多少进步?网上很多教程,看来看去,到头来还是一头雾水?其实,很正常,不是你的问题,是没有遇到能教会你的人!我刚刚入门时,在学习中遇到过 ...

  5. excel分类_Excel软件发展的前世今生和它的强大功能

    Excel面世30余年来,经过不断发展提升,新增各种功能,已经成为办公人员必不可少的数据处理软件.今天,我们来讲一下Excel的发展历程,以及常见的功能.强大的功能.牛逼的功能. 一.Excel是怎么 ...

  6. [架构之路-131]-《软考-系统架构设计师》-软件工程-1-软件工程方法大全(软件开发过程方法、软件开发过程模型、逆向工程、净室软件工程)

    前言: 第3章 软件工程 3.1 软件开发过程方法 3.1.1 什么是软件工程 软件工程是一门研究用工业硬件生产的工程化方法构建和维护有效.实用和高质量的软件的学科. 它涉及程序设计语言.数据库.软件 ...

  7. 关于学习软件逆向分析意义的阐述

    1对本课程教学地位的理解和想法(学习软件逆向分析的意义) 1.1逆向工程的起源 世界上最早的逆向工程其实来源于战争时期.在军事战争时期,各国之间常常存在水上作战,而船舶就成了运输和作战的重要工具.如下 ...

  8. 基于逆向工程的内存真值检查来保卫网络物理系统

    基于逆向工程的内存真值检查来保卫网络物理系统 原文 Defending Cyber-physical Systems through Reverse Engineering Based Memory ...

  9. 逆向工程学习笔记#1——概况篇

    一.什么是逆向工程 软件逆向工程(Software Reverse Engineering)又称软件反向工程,是指从可运行的程序系统出发,运用解密.反汇编.系统分析.程序理解等多种计算机技术,对软件的 ...

  10. Web逆向、软件逆向、安卓逆向、APP逆向,关于网络安全这些你必须懂

    逆向工程是网络安全行业里面一项很重要的技术. 先解释下逆向工程是什么. 逆向是一个相对正向而言的解释,相对正向来说,对一个程序来讲,正向就是开发的过程,从0到1. 就是在一个软件诞生的整个生命周期中的 ...

最新文章

  1. ubuntu12.04+fuerte 下跑通lsd-slam——数据集
  2. java 2维数据便利_计算机等级考试二级java数组辅导
  3. 防止重复提交保证幂等的几种解决方案
  4. Android Support 包里到底有什么
  5. C# 结构体 简明介绍
  6. 应用数学软件测试题,高等数学第六章定积分应用综合测试题
  7. CCIE-LAB-第三篇-VRRP+SLA
  8. observable_Java Observable notifyObservers()方法与示例
  9. FileInputStreamTest
  10. 在Codewars刷题时常用的正则表达式
  11. 运维架构师-并不遥远的彼岸
  12. javascript 求解图表曲线波峰与波谷,类似股票曲线
  13. nodeJS之TCP模块net
  14. 软件工程用的15种图
  15. PCWorld评10大科技产品:IBM超级计算机上榜
  16. 图像滤镜实现万能方法研究
  17. 用Global Mapper软件批处理将dwg转shp
  18. 微信小程序chooseMedia应用
  19. Java开发--implement Serializable
  20. 打印机复印身份证方法

热门文章

  1. 雷达存在感应器技术,实时感知控制应用,雷达人体探测方案
  2. matlab 矩阵线性规划,matlab线性规划-线性规划,matlab
  3. Servlet运行原理(Tomcat为例)
  4. 国际通用计算机编码,计算机中的编码知识
  5. web安全工具介绍(漏洞扫描、信息收集、提升权限的网站、app)持续更新
  6. 程序员思维训练500题(附带答案)
  7. 搭建一个简单的Pascal脚本开发环境
  8. java phpwind_GitHub - phpwind/windframework: Open-source PHP framework
  9. 【设计模式】-工厂模式->抽象工法模式(源码与类图解析)
  10. Windows系统查询硬盘序列号