逆向工程学习笔记#1——概况篇
一、什么是逆向工程
软件逆向工程(Software Reverse Engineering)又称软件反向工程,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等[1]。通常,人们把对软件进行反向分析的整个过程统称为软件逆向工程,把在这个过程中所采用的技术都统称为软件逆向工程技术。
二、逆向工程基本流程
1、研究保护方法,去除保护功能。大部分软件开发者为了维护自己的关键技术不被侵犯,采用了各式各样的软件保护技术,如序列号保护、加密锁、反调试技术、加壳等。要想对这类软件进行逆向,首先要判断出软件的保护方法,然后去详细分析其保护代码,在掌握其运行机制后去除软件的保护。
2、反汇编目标软件,跟踪、分析代码功能。在去除了目标软件的保护后,接下来就是运用反汇编工具对可执行程序进行反汇编,通过动态调试与静态分析相结合,跟踪、分析软件的核心代码,理解软件的设计思路等,获取关键信息。
3、生成目标软件的设计思想、架构、算法等相关文档,并在此基础上设计出对目标软件进行功能扩展等的文档。
4、向目标软件的可执行程序中注入代码,开发出更完善的应用软件。
三、逆向工程的目的和意义
1、由于软件生产技术水平还没有达到人们所期望的程度,所以从头开发软件已经不适应社会对软件需求的不断增长,为了避免重复劳动,提高软件生产的效率和质量,缓解软件危机,必须充分利用和改造现有软件,对现有软件进行再设计、再工程,使软件功能得到大幅提高以满足用户的需要,而再设计(Redesign) 和再工程(Reengineering)都是软件逆向工程的形式之一。再工程是指在现有系统基础上,修改系统并组装成新的形式。
2、目前运行的许多系统由于某些原因,例如其运行环境已改变,或者是根据业务的需要对其功能要进行调整,导致它们必须进行演化才能继续使用。这些系统在经历多年运行之后,包含了众多的知识,包括系统需求、设计决策和业务规则等,通过软件逆向工程将这些软件系统转化为易演化系统,是充分有效地利用这些有用资产的良好途径。软件逆向工程可以从这些系统的程序源代码出发,导出切实可用的信息。
3、在已发布的软件中,许多优秀软件生产厂家出于技术保护等原因没有向用户开放源代码或者不提供源代码,需要用户自己去恢复,此时对软件进行逆向工程研究是最好的方法。
4、现今的商业社会把软件科学纳入一种相对封闭的范畴,为了追求利润,一些软件业的霸主试图进行知识的垄断,它的直接体现就是鼓励普通用户和大多数程序员把软件看成“黑箱”,使得它们不去关心软件的运行机制,把软件的生产变成类似车间加工的一道道流程,却隔断了人们深入研究软件科学的通路。而作为开放源代码的前期工程,软件逆向工程对整个开放源代码工程有着至关重要的作用。
逆向工程学习笔记#1——概况篇相关推荐
- OracleDesigner学习笔记1――安装篇
OracleDesigner学习笔记1――安装篇 QQ:King MSN:qiutianwh@msn.com Email:qqking@gmail.com 一. 前言 Oracle是当 ...
- 设计模式学习笔记(目录篇)
设计模式学习笔记(目录篇) 为了方便查看,特此将设计模式学习笔记系列单独做一个目录. 1 设计模式学习笔记(一:命令模式) 2 设计模式学习笔记(二:观察者模式) 3 设计模式学习笔记(三 ...
- Redis学习笔记1-理论篇
目录 1,Redis 数据类型的底层结构 1.1,Redis 中的数据类型 1.2,全局哈希表 1.3,数据类型的底层结构 1.4,哈希冲突 1.5,rehash 操作 2,Redis 的 IO 模型 ...
- Redis学习笔记(实战篇)(自用)
Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...
- 树莓派4B学习笔记——IO通信篇(UART)
文章目录 UART简介 树莓派使用UART与串口屏通信 串口屏简介 硬件连接 配置串口接口 树莓派打开UART接口 树莓派安装串口调试助手 编程实现 wiringSerial.h Serial简介 C ...
- JavaScript学习笔记之入门篇
JavaScript学习笔记之入门篇 JavaScript引入 1. 页面级 js: 2. 外部js文件: JavaScript变量 1. 变量的作用: 2. 声明变量: 3. 变量赋值: 4. 单一 ...
- 《软技能-代码之外的生存指南》学习笔记之理财篇
<软技能–代码之外的生存指南>学习笔记之理财篇 作者:[美] John Z. Sonmez 摘要:这是⼀本真正从"⼈"(⽽⾮技术也⾮管理)的⾓度关注软件开发⼈员⾃⾝发展 ...
- 3、Latex学习笔记之表格篇
目录 表格 1.基本结构 1.1框架 1.2行高 1.3标题 1.4标签 1.5居中 1.6表格 2.引用表格 3.常见表格类型 3.1三线表 3.2 斜线表头 3.3合并单元格 4.在线表格生成工具 ...
- flink1.12.0学习笔记第2篇-流批一体API
flink1.12.0学习笔记第 2 篇-流批一体API flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇- ...
最新文章
- spi flash 无法写入数据_非易失性Flash详解
- S2系统相关-uptime命令总结(S代表系统相关)
- java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答
- leetcode算法题--石子游戏 II★★
- 【转】面向GC的Java编程
- java面试题2 牛客:定义类中成员变量时不可能用到的修饰是
- stackexchange.mysql_StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
- c语言编程字符串_C编程中的字符串
- Java爬虫Crawler
- axure rp编辑html模板,AxureRP教程—用模板封装UI标准
- 【随】BIDS 怪异现象
- 导出word文档生成docx格式,包含freemarker遍历多张图片
- windows10计算机放桌面,将win10计算器放在桌面上的操作方法
- iphone传输 android,安卓苹果数据互传,三种方法教你怎样把iPhone数据迁移到安卓手机...
- json 解析 转java对象数组对象数组对象_json字符串转java对象数组
- 解决OpenSSL 在VC2015下链接报错的问题。
- Redis网站热搜关键词加载实践,建议收藏
- [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
- 对英特尔在嵌入式市场的几个猜想
- php wmf png,php – 无法使用Imagemagick将SVG转换为WMF