一种基于逆向技术的软件开发方法技术

技术编号:34368954 阅读:16 留言:0更新日期:2022-07-31 10:11
本发明专利技术提供了一种基于逆向技术的软件开发方法,包括,S1.对目标软件进行反编译获得源码;S2.对目标软件进行功能分析,确定源码中各代码块与功能的对应关系;S3.对目标软件进行解构分析以获得目标软件包括系统部署环境、体系架构、调度模式、接口规范、通信协议、引用方式、数据存储方式在内的软件信息;S4.基于所述的软件信息重构系统,并将与功能具有对应关系的代码块填充入重构系统中。本方案根据软件实际功能有针对地对软件部分进行逆向,剩余部分可按需扩展,能够减轻逆向开发工作量,同时能够最大程度实现软件逆向的可操作性。够最大程度实现软件逆向的可操作性。

A software development method based on Reverse Technology

【技术实现步骤摘要】
一种基于逆向技术的软件开发方法


[0001]本专利技术属于软件开发
,尤其是涉及一种基于逆向技术的软件开发方法。

技术介绍

[0002]逆向工程又称软件反向工程,是指从可运行的程序系统出发, 运用反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。可以简单理解为通过识别并分析计算机软件的源代码来构造出一个新的系统轮廓。它对计算机软件的原始系统进行基础分析,继而识别系统软件的构成部分,通过将软件各组成部分的关系明确化而构造全新的、高级的软件系统。通常,人们把对软件进行反向分析的整个过程统称为软件逆向工程,把在这个过程中所采用的技术都统称为软件逆向工程技术。
[0003]通过软件逆向技术可以探究目前软件防护的漏洞,有针对的对现有软件成果的保护进行审查,或者实现在生产环境无源码的情况下进行对软件的调试以及功能修复等,也可以对软件进行功能扩展,基于已有软件开发新软件。现有的软件逆向都是对已有软件进行全部逆向,但是全部细节逆向是一个巨大耗时的工程,效率很低,而且还存在可操作性不强的问题。

技术实现思路

[0004]本专利技术的目的是针对上述问题,提供一种基于逆向技术的软件开发方法。
[0005]为达到上述目的,本专利技术采用了下列技术方案:
[0006]一种基于逆向技术的软件开发方法,包括以下步骤:
[0007]S1.对目标软件进行反编译获得源码;/>[0008]S2.对目标软件进行功能分析,确定源码中各代码块与功能的对应关系;
[0009]S3.对目标软件进行解构分析以获得目标软件包括系统部署环境、体系架构、调度模式、接口规范、通信协议、引用方式、数据存储方式在内的软件信息;
[0010]S4.基于所述的软件信息重构系统,并将与功能具有对应关系的代码块填充入重构系统中。
[0011]在上述的基于逆向技术的软件开发方法中,步骤S1具体包括:
[0012]S11.读取目标软件的目标代码至内存;
[0013]S12.对目标代码进行分析以分离出指令代码和数据;
[0014]S13.通过反汇编工具对目标代码进行反汇编得到汇编文件;
[0015]S14.通过反编译工具对汇编文件进行反编译得到源码。
[0016]在上述的基于逆向技术的软件开发方法中,步骤S11具体为:
[0017]A1.从目标二进制格式文件中读取若干个字节存放到 Content对象里;
[0018]A2.将Content对象存放到Vector容器里;
[0019]A3.重复步骤A1和A2,直到文件结尾。
[0020]在上述的基于逆向技术的软件开发方法中,步骤S12具体为:
[0021]B1.跟踪指令控制流,遍历并标识出每条指令;
[0022]B2.将指令流可到达的代码部分标识为指令代码,其余部分标识为数据。
[0023]在上述的基于逆向技术的软件开发方法中,步骤S13具体为:
[0024]C1.从Vector容器里依次取出对象,并根据指令代码和数据的分离结果判断该对象是指令代码还是数据;
[0025]C2.若对象是指令代码,则通过反汇编工具将指令代码反汇编成汇编指令形式;若是数据,则直接或通过反汇编工具将数据翻译成数据的值。
[0026]在上述的基于逆向技术的软件开发方法中,步骤S13和S14 之间还包括:
[0027]D1.将汇编指令代码归一化为中间代码;
[0028]D2.提取库函数,并识别系统库函数和用户自定义函数;
[0029]D3.恢复用户自定义函数包括名称、参数个数、返回值和类型在内的关键信息;
[0030]步骤S14中,反编译工具对系统库函数和用户自定义函数分别进行反编译。
[0031]在上述的基于逆向技术的软件开发方法中,步骤S2中,根据运行手册、帮助文档以及通过动态运行目标软件的方式确定目标软件的功能。
[0032]在上述的基于逆向技术的软件开发方法中,步骤S2中,通过对源码进行动态调试的方式查找和提取关键代码,并根据确定的功能标记关键代码与功能之间的对应关系。
[0033]在上述的基于逆向技术的软件开发方法中,步骤S3中,通过静态解析和/或动态解析方法对目标软件进行解构分析。
[0034]在上述的基于逆向技术的软件开发方法中,步骤S4之前先将源码/代码块转换为目标开发语言;
[0035]步骤S4中,所述的重构系统为具有开放接口的开放系统以供用户开发、完善和校核。
[0036]本专利技术的优点在于:
[0037]1、根据软件实际功能有针对地对软件部分进行逆向,剩余部分可按需扩展,能够减轻逆向开发工作量,同时能够最大程度实现软件逆向的可操作性;
[0038]2、首先分离目标代码中的指令代码和数据,在使用反汇编工具进行反汇编时能够直接针对指令代码和数据进行有针对性的处理,避免数据对指令代码反汇编工作造成干扰,提高反汇编效率;
[0039]3、使用Vector容器存放Content对象,便于内容提取与标记以及便于后续跟踪指令控制流;
[0040]4、通过跟踪PC值的方式跟踪指令控制流能够保证遍历每一条指令,从而确保指令代码与数据分离的彻底分离,保证分离效果;
[0041]5、对汇编文件进行处理之前先识别用户自定义函数,分开用户自定义函数和系统库函数,并还原用户自定义函数的关键信息,便于后续的源代码级别代码的还原工作。
附图说明
[0042]图1为本专利技术基于逆向技术的软件开发方法的方法流程图;
[0043]图2为本专利技术基于逆向技术的软件开发方法中获得源码的方法流程图;
[0044]图3为本专利技术基于逆向技术的软件开发方法中读取目标代码至内存的方法流程图;
[0045]图4为本专利技术基于逆向技术的软件开发方法中跟踪指令控制流的方法流程图;
[0046]图5为本专利技术基于逆向技术的软件开发方法中反汇编过程的工作流程图;
[0047]图6为本专利技术基于逆向技术的软件开发方法中反汇编过程中对数据和指令代码的具体处理流程图;
[0048]图7为函数在存储器中的位置布局示意图。
具体实施方式
[0049]下面结合附图和具体实施方式对本专利技术做进一步详细的说明。
[0050]如图1所示,本实施例公开了一种基于逆向技术的软件开发方法,包括以下步骤:
[0051]S1.对目标软件进行反编译获得源码;
[0052]S2.对目标软件进行功能分析,确定源码中各代码块与功能的对应关系;
[0053]S3.对目标软件进行解构分析以获得目标软件包括系统部署环境、体系架构、调度模式、接口规范、通信协议、引用方式、数据存储方式在内的软件信息;
[0054]S4.基于所述的软件信息重构系统,并将与功本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于逆向技术的软件开发方法,其特征在于,包括以下步骤:S1.对目标软件进行反编译获得源码;S2.对目标软件进行功能分析,确定源码中各代码块与功能的对应关系;S3.对目标软件进行解构分析以获得目标软件包括系统部署环境、体系架构、调度模式、接口规范、通信协议、引用方式、数据存储方式在内的软件信息;S4.基于所述的软件信息重构系统,并将与功能具有对应关系的代码块填充入重构系统中。2.根据权利要求1所述的基于逆向技术的软件开发方法,其特征在于,步骤S1具体包括:S11.读取目标软件的目标代码至内存;S12.对目标代码进行分析以分离出指令代码和数据;S13.通过反汇编工具对目标代码进行反汇编得到汇编文件;S14.通过反编译工具对汇编文件进行反编译得到源码。3.根据权利要求2所述的基于逆向技术的软件开发方法,其特征在于,步骤S11具体为:A1.从目标二进制格式文件中读取若干个字节存放到Content对象里;A2.将Content对象存放到Vector容器里;A3.重复步骤A1和A2,直到文件结尾。4.根据权利要求3所述的基于逆向技术的软件开发方法,其特征在于,步骤S12具体为:B1.跟踪指令控制流,遍历并标识出每条指令;B2.将指令流可到达的代码部分标识为指令代码,其余部分标识为数据。5.根据权利要求4所述的基于逆向技术的软件开发方法,其特征在于,步骤S13具体为:C1.从Vector容器里依次取出对象,...

【专利技术属性】
技术研发人员:平洋陈光张伟华梁东晨白小燕钟远杨华
申请(专利权)人:中国人民解放军军事科学院战争研究院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1