软件逆向工程分析技术的实践与探索
- 格式:pdf
- 大小:1.19 MB
- 文档页数:3
软件反向工程技术研究与实现随着信息技术的迅猛发展,软件已成为人们日常生活的必需品,它们广泛运用在各种领域中,如企业管理、金融服务、医疗治疗和娱乐等。
在软件应用的开发和运行过程中,反向工程技术起着重要的作用。
反向工程是指分析已有软件的机器代码和相关文本,以获得有关其内部构造和运行方式的信息的过程。
本文将从反向工程的定义、应用、技术和实现等方面进行探讨。
一、反向工程的定义和应用反向工程通常包括两个基本过程,即静态分析和动态分析。
静态分析侧重于分析程序的代码,以确定程序的操作和流程,以及测量其对系统资源的使用。
静态分析工具可以帮助开发人员或攻击者查找代码中的漏洞和错误,进而改进代码质量或者进行黑盒测试。
动态分析的重点是观察程序在执行过程中的行为和操作。
它可用于监控和分析网络流量、内存分配、指令执行等,以便调试代码、发现漏洞和调整系统性能。
动态分析工具还可以用于检测恶意软件并阻止攻击行为。
反向工程技术最初是在软件开发领域中应用的。
开发人员使用反向工程工具来分析现有软件以获得优秀的代码,从而帮助他们开发和实施更好的软件解决方案。
反向工程在实施中遵循特定的流程和技术,首先是分析代码执行流程并识别算法和数据结构。
然后开发人员会对代码进行优化,消除不必要的代码和缩小程序大小。
本着节约成本的原则,另外一个应用反向工程的领域是通过分析竞争产品来获得基本的设计和开发知识,从而提高市场竞争力。
另一方面,黑客和病毒制造者也利用反向工程技术进行攻击。
他们使用反向工程工具来识别和利用存在的软件漏洞,从而更轻松地攻击软件或系统。
他们还可能使用反向工程技术来分析软件的源代码和算法,以评估自己的产品是否与可疑软件兼容。
反向工程技术的这种恶性应用使它成为了具有威胁性的技术。
二、反向工程技术及其实现反向工程技术主要包括静态分析技术和动态分析技术。
1. 静态分析技术静态分析技术是通过分析程序代码来理解和重构原始程序的技术。
它使用以下工具:(1)反编译器:将机器代码转换为源代码的工具。
第1篇一、实验目的本次实验旨在通过逆向工程的方法,深入了解软件的内部结构和运行机制,提高对编程语言的掌握程度,增强程序调试和问题解决的能力。
通过本次实验,我学会了如何使用逆向工程工具对程序进行解构和分析,为今后的软件开发和问题排查打下坚实的基础。
二、实验内容1. 实验环境- 操作系统:Windows 10- 逆向工程工具:OllyDbg、IDA Pro- 被分析程序:一款简单的计算器软件2. 实验步骤(1)导入程序:使用OllyDbg或IDA Pro打开被分析程序,将其加载到调试器中。
(2)分析程序入口:找到程序的入口点,即程序的开始执行位置。
(3)分析函数调用:观察程序中各个函数的调用关系,了解程序的整体结构。
(4)分析关键代码段:针对程序中的关键代码段,进行详细分析,包括变量、数据结构、算法等。
(5)分析程序流程:根据函数调用关系和关键代码段,绘制程序流程图,了解程序的执行过程。
(6)分析程序漏洞:在分析过程中,注意查找程序中可能存在的漏洞,如缓冲区溢出、整数溢出等。
(7)总结实验结果:对实验过程中发现的问题进行总结,并提出相应的解决方案。
3. 实验结果(1)程序结构:经过分析,该计算器软件主要由以下几个模块组成:- 输入模块:负责获取用户输入的数值。
- 运算模块:负责进行加、减、乘、除等运算。
- 输出模块:负责将运算结果输出到屏幕。
(2)关键代码段:在运算模块中,发现以下关键代码段:```cdouble result = 0.0;char operator = '+';while (scanf("%lf", &num) != EOF) {if (operator == '+') {result += num;} else if (operator == '-') {result -= num;} else if (operator == '') {result = num;} else if (operator == '/') {result /= num;}operator = getchar();}printf("Result: %lf\n", result);```(3)程序漏洞:在分析过程中,发现以下漏洞:- 缓冲区溢出:在读取用户输入时,未对输入长度进行检查,可能导致缓冲区溢出。
SolidWorks逆向工程的方法与应用研究逆向工程是指通过对产品或零部件的实体进行逆向建模和分析,以了解其形状、结构和性能等特征,并可用于设计改进、制造、仿真模拟以及产品维护和更新等方面。
在逆向工程领域,SolidWorks是一种功能强大且广泛应用的三维计算机辅助设计(CAD)软件。
本文将研究SolidWorks逆向工程的方法与应用。
一、逆向工程的方法及流程1. 获取数据:逆向工程的第一步是通过使用扫描仪、激光测量仪或其他测量设备获取产品的实际几何数据。
这些数据可以是点云数据、网格数据或CAD文件等。
2. 数据处理:得到原始数据后,需要对其进行处理,以便在SolidWorks中进行后续操作。
这可能涉及到数据清洗、滤波、修复和曲线拟合等步骤。
3. 数据导入:将处理后的数据导入SolidWorks中进行后续操作。
SolidWorks提供了多种导入格式的选项,如STL、IGES、STEP等。
选择合适的导入格式可以确保准确导入数据。
4. 几何重建:在SolidWorks中,逆向工程的核心任务是重建三维模型。
可以使用多种方法进行几何重建,如NURBS曲线拟合、曲面重建、实体建模等。
5. 模型验证:在完成几何重建后,需要对重建的模型进行验证。
这通常涉及到与原始数据进行比较,进行误差分析,并采取必要的调整和修复措施。
6. 后续操作:完成模型验证后,可以进行后续操作,如设计改进、产品优化以及与其他软件的集成等。
二、SolidWorks逆向工程的应用逆向工程在各个行业都具有广泛的应用。
以下是SolidWorks逆向工程在几个行业中的应用案例:1. 汽车制造业:在汽车设计和制造过程中,逆向工程可以通过对现有车辆或零部件进行扫描和建模,以帮助设计师进行改进或重新设计。
通过SolidWorks的强大功能,可以更快速地进行设计评估和优化。
2. 工业制造业:逆向工程在工业制造过程中也发挥着重要作用。
通过对现有设备和零部件进行逆向建模和分析,可以帮助改进产品设计、提高生产效率以及优化设备维护等方面的工作。
一、实验目的通过本次实验,使学生掌握软件逆向工程的基本原理、方法和工具,提高对软件程序的理解和分析能力,为后续的软件安全、漏洞挖掘和软件维护等方向的学习打下基础。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 逆向工程工具:IDA Pro4. 源代码:C语言编写的简易计算器程序三、实验步骤1. 编译源代码首先,使用Visual Studio 2019将C语言编写的简易计算器程序编译成可执行文件。
2. 加载可执行文件在IDA Pro中打开编译生成的可执行文件,开始逆向工程分析。
3. 分析程序结构观察程序的结构,了解程序的入口点、函数调用关系、数据结构等。
4. 反汇编代码将程序代码反汇编,查看汇编指令和寄存器使用情况。
5. 分析函数逻辑对关键函数进行逐行分析,理解函数的功能和实现逻辑。
6. 分析变量和参数分析程序中的变量和参数,了解程序的数据处理过程。
7. 恢复源代码尝试使用IDA Pro的插件或工具将反汇编代码恢复成C语言源代码。
8. 总结实验结果总结实验过程中遇到的问题、解决方法以及实验心得。
四、实验结果与分析1. 程序结构分析通过分析程序结构,发现该简易计算器程序主要由主函数(main)和辅助函数(如:add、sub、mul、div等)组成。
主函数负责处理用户输入,调用相应的辅助函数进行计算,并将结果显示在屏幕上。
2. 函数逻辑分析以加法函数(add)为例,分析其实现逻辑如下:```add:mov eax, [ebp+8] ; 将第一个参数(被加数)的值存储在eax寄存器add eax, [ebp+12] ; 将第二个参数(加数)的值加到eax寄存器mov [ebp+16], eax ; 将计算结果存储在内存地址[ebp+16]处ret```该函数首先将第一个参数的值存储在eax寄存器中,然后将其与第二个参数的值相加,并将结果存储在内存地址[ebp+16]处。
逆向工程技术在软件安全性分析中的应用与挑战逆向工程是一种将软件或硬件进行分析、查看以及理解其内部结构与功能的技术。
它在软件安全性分析中具有重要的应用,可以帮助安全专家发现潜在的漏洞、威胁和隐患。
然而,逆向工程技术也面临着一些挑战,如法律合规性、技术复杂性和伦理问题等。
本文将探讨逆向工程技术在软件安全性分析中的应用与挑战。
首先,逆向工程技术在软件安全性分析中的应用主要体现在漏洞检测、恶意代码分析和安全评估等方面。
通过逆向分析,安全专家可以深入了解软件的内部结构和运行机制,发现潜在的漏洞和薄弱点。
逆向工程技术可以帮助安全专家定位软件中的安全问题,为攻击者潜在的入侵路径制定防御策略。
此外,逆向工程还可以帮助分析恶意软件的行为和目的,从而提供更有效的安全保护措施。
然而,逆向工程技术在软件安全性分析中也面临着一些挑战。
首先,逆向工程可能涉及到法律合规性问题。
在一些国家或地区,逆向工程可能被视为非法活动,因为它涉及了对他人的软件进行非授权的访问和修改。
安全专家需要对逆向工程技术的应用进行谨慎评估,确保其在法律框架内合法使用。
其次,逆向工程技术本身的复杂性也是一个挑战。
逆向工程需要对底层的硬件和软件进行深入理解,需要掌握多种编程语言和工具。
此外,逆向工程常常需要对目标软件进行静态和动态分析,需要深入理解操作系统、编译原理以及软件工程等领域的知识。
对于安全专家来说,这无疑增加了学习和实践的难度。
此外,逆向工程技术在软件安全性分析中也存在一些伦理问题。
逆向工程可能涉及到对软件开发者或拥有者的权益侵犯。
安全专家需要在使用逆向工程技术时保持道德操守,避免非法使用或滥用逆向工程技术。
此外,对于一些闭源软件,逆向工程可能会暴露一些未公开的商业机密,这也需要安全专家谨慎权衡利弊,确保逆向工程的合法性和合理性。
尽管逆向工程技术在软件安全性分析中面临着一些挑战,但它仍然是一种强大的工具,可以帮助安全专家发现软件中的潜在问题。
为了克服这些挑战,有几个建议如下:首先,安全专家需要了解逆向工程技术的法律框架,确保其合法使用。
《逆向工程技术的研究与工程应用》篇一一、引言逆向工程技术是一种通过分析已有产品或系统的性能、结构、功能等,从而获取其设计原理、制造工艺、技术参数等关键信息的技术。
随着科技的不断进步,逆向工程技术已经成为产品创新、技术升级和市场竞争的重要手段。
本文将就逆向工程技术的原理、方法及其在工程领域的应用进行详细探讨。
二、逆向工程技术的原理与方法1. 逆向工程技术的原理逆向工程技术基于对已有产品或系统的逆向分析,通过获取其结构、性能、功能等关键信息,进行反向推导,从而掌握其设计原理、制造工艺和技术参数。
这一过程需要借助多种技术手段,如物理测量、化学分析、计算机辅助设计等。
2. 逆向工程的方法(1)物理测量法:通过使用各种测量设备,如三坐标测量机、激光扫描仪等,对产品进行尺寸测量和形状分析。
(2)化学分析法:通过对产品材料进行化学成分分析和组织结构分析,了解材料的性能和制备工艺。
(3)计算机辅助设计法:利用计算机辅助设计软件对测量和化学分析结果进行建模和仿真,获取产品的设计原理和制造工艺。
三、逆向工程技术在工程领域的应用1. 产品创新与优化逆向工程技术可以用于产品的创新与优化。
通过对已有产品的结构、性能、功能等进行深入分析,可以获取其设计原理和制造工艺,从而为新产品的设计和优化提供参考。
此外,逆向工程技术还可以用于对复杂产品的快速原型制作,缩短产品研发周期。
2. 技术升级与改造逆向工程技术可以用于技术升级与改造。
对于一些老旧设备或生产线,通过逆向工程技术获取其关键技术和制造工艺,可以对其进行技术升级和改造,提高其性能和效率。
此外,逆向工程技术还可以用于对一些复杂设备的维修和维护,降低维修成本和时间。
3. 知识产权保护与侵权调查逆向工程技术还可以用于知识产权保护与侵权调查。
通过对疑似侵权产品的分析,可以获取其设计原理和制造工艺,从而判断其是否侵犯了原产品的知识产权。
此外,逆向工程技术还可以用于对产品进行反伪造和溯源,保护消费者的权益。
逆向工程在软件安全性分析中的研究一、引言随着信息技术的迅速发展,软件安全性问题越发引起人们的关注。
软件安全性分析是指通过对软件源代码或二进制代码进行静态或动态分析,评估软件系统的安全性。
逆向工程是一种重要的技术手段,能够帮助分析人员深入了解软件系统的内部结构和实现细节。
本文将介绍逆向工程在软件安全性分析中的研究,并探讨其应用。
二、逆向工程概述逆向工程是指通过对已有的软件系统进行分析和研究,以了解其内部结构、算法和实现细节的过程。
逆向工程主要包括静态逆向工程和动态逆向工程两种方法。
静态逆向工程主要通过对软件的静态代码进行分析,研究软件的控制流、数据流和相关算法;而动态逆向工程则通过动态执行软件代码,观察其行为和运行过程,了解软件的运行机制和漏洞。
三、逆向工程在软件安全性分析中的应用1. 漏洞分析逆向工程可以帮助安全分析人员发现软件系统中的潜在漏洞。
通过对软件二进制代码进行逆向分析,可以定位代码中的漏洞影响点,并找出潜在的攻击路径。
同时,逆向工程还可以帮助分析漏洞的根本原因,为软件的修复提供有针对性的解决方案。
2. 恶意代码检测逆向工程还可以应用于恶意代码检测。
恶意代码通常采用各种技术手段隐藏自己的行为,例如植入木马、盗号软件等。
通过对恶意代码进行逆向分析,可以揭示其隐藏行为和功能,进而辨别和识别恶意代码。
逆向工程还可以帮助分析人员了解恶意代码的传播途径和攻击手法,为系统的安全加固提供参考。
3. 安全机制评估逆向工程还可以用于评估软件系统的安全机制。
通过对软件源代码或二进制代码进行逆向分析,可以了解软件实现的安全机制和策略是否合理,并评估其抵御攻击和保护用户数据的能力。
逆向工程还可以揭示软件系统中存在的潜在安全风险和漏洞,为系统的安全加固提供指导。
四、逆向工程在软件安全性分析中的挑战1. 隐蔽性软件开发者常常采取各种手段隐藏软件的实现细节和算法,使得逆向工程的分析工作变得困难。
例如,他们可能会使用代码混淆、加密和反调试等技术手段,以阻碍逆向分析人员的工作。
《逆向工程技术的研究与工程应用》篇一一、引言逆向工程技术是一种通过分析已有产品或系统的性能、结构、功能等,以获取其设计原理、制造工艺、技术参数等关键信息的技术手段。
随着科技的不断进步和市场竞争的日益激烈,逆向工程技术越来越受到关注和重视。
本文将对逆向工程技术的研究现状和工程应用进行深入探讨。
二、逆向工程技术的概述逆向工程技术是相对于正向工程技术而言的。
正向工程主要是根据产品的需求、功能等进行设计和制造,而逆向工程则是从已有产品出发,通过对产品的反求分析,了解其内部结构、设计原理、制造工艺等关键信息。
逆向工程技术的应用领域非常广泛,包括机械制造、电子设备、航空航天、生物医学等领域。
三、逆向工程技术的关键环节逆向工程技术的实施主要包括以下几个关键环节:1. 样品获取:通过购买、租赁、借阅等方式获取目标产品或系统。
2. 样品分析:运用各种手段对样品进行拆解、检测、分析等操作,以获取其内部结构、设计原理、制造工艺等关键信息。
3. 数据处理:将样品分析得到的数据进行整理、加工和提取,以形成可供分析和研究的数据集。
4. 建模与仿真:根据处理后的数据,建立样品的模型或仿真系统,以更好地了解其性能和特点。
5. 技术重现:在建模与仿真的基础上,重新设计和制造类似的产品或系统。
四、逆向工程技术的优点和挑战逆向工程技术的优点在于能够快速获取已有产品的关键信息,为新产品的设计和制造提供有力支持。
此外,逆向工程技术还可以帮助企业实现技术引进和消化吸收,提高企业的技术水平和创新能力。
然而,逆向工程技术也面临着一些挑战。
首先,样品分析需要专业的技术和设备支持,对操作人员的技能要求较高。
其次,由于不同产品的设计和制造工艺存在差异,逆向工程技术的应用需要针对具体情况进行具体分析。
最后,逆向工程技术的实施需要遵守相关法律法规和知识产权保护规定。
五、逆向工程技术在工程应用中的实例分析以汽车行业为例,逆向工程技术被广泛应用于汽车设计和制造过程中。
基于逆向工程的软件分析技术研究随着软件应用程序的普及,软件分析技术也越来越受到重视。
而基于逆向工程的软件分析技术则是在这一领域内应用最为广泛的技术之一。
逆向工程可以帮助我们深入了解软件中的细节和问题,同时也可以让我们更好地保护软件的安全性和隐私性。
一、逆向工程的定义逆向工程是将已经存在且可使用的产品,通过对其进行分解、剖析,发掘出其中的技术实现、算法原理、设计思路等相关信息的一种技术手段。
逆向工程的主要目的是了解软件和硬件的内部结构,以及从中提取信息,以便进行分析和修改。
在软件分析领域中,逆向工程被用来分析汇编代码、脆弱性和漏洞,重构二进制文件,甚至是恢复丢失的源代码等。
逆向工程技术的主要步骤包括:1. 翻译二进制代码为汇编代码;2. 分析和理解汇编代码,逆向出代码中控制流;3. 从控制流分析出代码的逻辑结构;4. 根据逻辑结构,重建代码,并进行分析和修改。
二、逆向工程在软件分析中的应用逆向工程在软件分析中的应用非常广泛,下面就来介绍一些常见的应用场景:1. 发现漏洞和脆弱性逆向工程是一种很有用的技术,可以用来发现软件中的脆弱性和漏洞。
通过对软件进行逆向工程分析,可以发现软件中的安全漏洞,进而加以修补,提高软件的安全性。
此外,逆向工程还可以发现其他问题,例如性能问题、代码不规范等等。
2. 反病毒和检测恶意程序逆向工程还可以帮助我们反向分析恶意程序,并生成相应的病毒定义文件。
通过逆向工程技术,可以深入了解恶意程序的相关信息,如其实现方式、代码结构等,并生成相应的病毒定义文件,以便进行病毒检测和防治。
3. 重构二进制文件逆向工程可以帮助我们重构二进制文件,以便进行代码的二次开发、调试和修改,提高软件的可维护性和可扩展性。
4. 恢复丢失的源代码逆向工程可以帮助我们恢复丢失的源代码,以便进行代码的二次开发和修改。
在某些情况下,源代码可能会丢失,但二进制文件仍然存在。
此时,逆向工程就可以帮助我们分析二进制文件,重新生成源代码。
第1篇一、实验背景随着信息技术的飞速发展,软件系统和硬件设备在各个领域得到了广泛应用。
然而,在软件开发过程中,由于设计者可能出于商业机密、技术限制或其他原因,对软件系统的内部结构和实现细节进行隐藏。
逆向工程作为一种重要的技术手段,可以帮助我们理解、分析和复现这些系统的内部工作原理,从而为系统改进、漏洞挖掘、安全评估等提供支持。
本实验旨在通过逆向工程的基本方法,认识并掌握逆向工程的基本流程和技术要点,为后续的深入学习和应用打下基础。
二、实验目的1. 理解逆向工程的基本概念和意义。
2. 掌握逆向工程的基本流程和方法。
3. 熟悉逆向工程工具的使用。
4. 培养逆向分析、漏洞挖掘和系统复现的能力。
三、实验内容1. 逆向工程基本概念逆向工程是指通过分析已有的软件系统或硬件设备,恢复其设计意图、实现细节和功能的过程。
逆向工程通常包括以下几种类型:(1)代码逆向:分析源代码,了解其功能、结构和算法。
(2)二进制逆向:分析可执行文件,恢复其功能、结构和算法。
(3)硬件逆向:分析硬件设备,了解其电路、结构和功能。
2. 逆向工程基本流程逆向工程的基本流程如下:(1)目标选择:确定逆向工程的对象,如软件、硬件等。
(2)信息收集:收集目标系统的相关信息,如版本、依赖库等。
(3)分析:对目标系统进行静态和动态分析,了解其结构和功能。
(4)解密与反汇编:对加密或保护过的目标系统进行解密和反汇编。
(5)理解与重构:理解目标系统的设计意图和实现细节,进行重构。
(6)验证与测试:验证重构后的系统是否与原系统一致,进行测试。
3. 逆向工程工具常用的逆向工程工具有:(1)静态分析工具:IDA Pro、Ghidra、OllyDbg等。
(2)动态分析工具:WinDbg、WinDbgX、Fiddler等。
(3)反汇编工具:NASM、FASM、GAS等。
(4)调试工具:OllyDbg、WinDbg、Ghidra等。
四、实验步骤1. 选择一个简单的可执行文件作为实验对象。
178研究与探索Research and Exploration ·探讨与创新中国设备工程 2018.03 (上)软件逆向工程是软件开发技术与方法的一大子课题,这一课题所强调的是通过密切结合可运行的程序,来归纳出集成化、系统化的开发模型及软件支撑媒介的内部集成模式,从而在更高层次上来有效解决软件面向的实际应用问题。
1 逆向工程及软件逆向工程的内涵分析1.1 逆向工程的内涵分析逆向工程涉及以下两大操作步骤。
第一步是对目标系统、标识系统的对象以及标识系统对象之间的关系进行分析。
第二步是创建不同形式或者是抽象层次更高的系统。
国外学者Scott R.Tilley 又对抽取和抽象进一步提炼,将其扩展成了建模、抽取与抽象这三大步骤。
第一步建模具体指的是采用建模技术构成相关应用程序的领域模型。
第二步抽取具体指的是借助于恰当的抽取机制,然后基于目标系统来对原始数据进行收集。
第三步抽象指的是将具体的目标系统抽象化,同时辅助以系统的理解,并允许进行信息浏览、信息分析和得出抽象的结果并加以表示。
1.2 软件逆向工程的内涵分析软件逆向工程所遵循的基本原理具体如下:其将软件系统中的关键内容抽取并提炼出来,同时对软件系统中的细节加以隐藏,然后借助于所抽取出来的实体,将其关键内容在更高层级系统上描述出来。
通常意义上,人们将软件工程当作一种开发的新系统存在。
事实上,软件工程还可分为很多更细的项目,即软件正向工程、软件逆向工程、软件系统重构、再工程以及软件的设计恢复等。
其中软件正向工程指的是一种传统意义上的过程,即基于软件系统的高层抽象与逻辑层面独立出来的,从实现设计到系统的物理设计过程。
具体而言,就是基于用户的实际需求到高层设计然后再回归到底层设计,最终实现的过程。
软件逆向工程是通过对系统的分析来确定系统组件以及系统组件间的相互作用,然后借助于其他形式来表示这一系统,或者是在更高层次上来对系统过程进行阐释和说明。
需要额外注意的是,针对某一系统进行逆向工程时,系统本身不发生任何变化,也不会在这一系统上建立新的系统。
软件系统重构就是在保持系统的功能和语义不变的前提下,在统一的抽象层次上改变表现形式。
再工程是一种在对软件逆向工程、软件系统重构以及软件正向系统进行审查改造后重组的新形式。
软件的设计恢复具体指的是密切结合领域知识、目标系统以及外部信息而认定的更高一层次的抽象。
上述几大概念间的关系如图1所示。
图1结合对逆向工程及软件逆向工程的内涵的分析,就得出了软件逆向工程的具体任务。
主要涉及以下方面。
其一,达成分析系统的任务。
这项任务具体是指对系统结构以及系统的运行过程进行分析,但是,无论目标系统所面向的是哪一种应用领域,其分析系统大体上都是一致的,基本上都可分为系统的动态信息及系统的静态信息。
目标系统所面向的通常都是不同的应用领域,要想更好地达成抽象目标系统的具体任务,通常需要具备相关领域的知识和丰富的专家经验。
其二是达成抽象系统的任务。
其三是达成展现系统的任务。
展现系统的最软件逆向工程分析技术的实践与探索高菁(天津机电职业技术学院,天津 300350)摘要:在信息技术飞速发展的背景下,软件系统的复杂度和规模也得到了提升。
在软件开发工作中,软件维护工作的重要性日益凸显。
软件逆向工程技术是进行软件维护的一大关键技术。
本文就主要围绕软件逆向工程分析技术的实践与探索进行研究,先阐述逆向工程及软件逆向工程的具体内涵,然后探讨常用的软件逆向工程分析方法,最后结合案例对这项技术的实践应用进行研究。
关键词:逆向工程;软件逆向工程分析;技术方法;实践中图分类号:TP311 文献标识码:A 文章编号:1671-0711(2018)03(上)-0178-03179中国设备工程Engineer ing hina C P l ant中国设备工程 2018.03 (上)佳实现方式是使展现系统可视化。
通过实现这几项任务来实现帮助用户更好地理解系统这一目的。
2 常用的软件逆向工程分析方法(1)程序切片法。
程序切片技术具体指的是将程序进一步简化为同某一特殊计算具有相关性的语句技术。
这一软件逆向工程分析方法源于数据流分析法。
程序切片技术法在实际使用的过程中通常将程序进行进一步分解,将其分解成更小的切片代码段,进而使其关注点缩放到一个更小范围内,而不需要关注整个程序。
某一程序切片是由程序中的判定表达式和部分语句组成的集合。
这些判定表达式和语句甚至会给程序中的某一位置,如常用的行号标识上所界定或使用的变量值产生相应的影响。
程序切片技术能够帮助我们更深入地理解程序。
(2)词法分析和语法分析。
这一软件逆向工程分析法主要是针对程序源代码进行分析,进而得到程序信息的多种类型的有用表示。
其中,使用频率最高的是交叉引用列表。
借助于对语法的分析能够得到分析树和抽象语法树AST 这两大类型的表示方法。
其中,抽象语法树AST 涉及很多同程序实际内容相关的细节,其能够为理解更加复杂的程序奠定基础。
(3)动态分析法。
动态分析法大多是在程序实际运行的过程中进行的,这一方法最基本的操作是植入程序。
具体来说,植入程序其实是在某一全局范围之内对源代码进行更改或者添加一些额外操作的具体过程。
动态分析法所采取的基本原理是依托代码的结构信息,同时按照固定的规则给原有的程序代码添加软件触发器。
3 软件逆向工程分析技术案例分析在实际运用软件工程分析技术的过程中,程序理解是最重要且最消耗资源的活动,要想更好地理解程序,必须从程序设计这一方面着手进行。
在实际操作过程中,要想更好地对某一软件进行维护并不容易,经常会遇到缺失代码的情况。
下面假设缺乏某一软件的源代码,然后探讨如何借助软件逆向工程分析技术进行软件维护。
第一步:结合对这一软件的作用、性能以及性质设计这些因素,来设计出相应的验证假设内容列表,然后结合相关内容一边进行验证,一边更好地理解这一软件,在理解软件代码期间一步步假设内容列表进行修正,进而深化对这一软件系统程序的认知和理解。
第二步:对软件执行过程中的二进制码进行分析可得知,这一二进制码是由多个函数组成的,具体分析步骤如下。
首先,借助于IDA 反汇编工具来分析出函数集合,具体如下所示。
{(f1、f2、f3、f3、......fn)}然后绘制函数调用图,图中的一个节点代表的是一个fj,节点间的连接线所代表的是函数的调用关系,fp 是被调用函数,fq 是调用函数,fp 是fq 的子函数,这一函数调用图能够较好地对整个软件执行过程中的函数关系进行描述。
其中一个节点代表的是一个函数,并且每一节点都可以用函数控制图表示出来。
第三步:进一步细化函数,将其细化为基本块来分析。
同时还可借助于控制流图来对二进制文件中的函数进行描述。
每一函数又可被分解成若干个不同的基本块。
基本块具体指的是程序遵照相应的顺序执行的语句序列,其中,仅有一个入口和一个出口。
第一个语句是入口,最后一个语句是出口。
对一个基本块本身来说,在具体执行时仅能从入口进入,从出口退出。
基本块具备的显著特点具体如下:一旦基本块中的第一条指令被执行之后,相应地,后续基本块中的所有执行都会按照顺序执行,且仅执行一次。
控制流的结点也是由基本块组成的,主要是用来表示运算、节点和节点间的有向边代表控制流向。
一个函数的控制流入口仅有一个,但是却可以有很多出口。
图2是函数的控制流图。
图2 函数的控制流图通过分析该图可知,这一函数包含五个基本块,六条有向边。
如果想生成控制流图和函数调用关系图就应进行如下操作。
第一步应对二进制代码的反汇编进行深入分析,借助于IDE Pro SDK 开发包有利于更好地对反汇编进行分析,依托所得出的分析结果得到信息建立的控制流图和函数调用关系图。
接着,以这两大流程图为基础进行相应的断点跟踪,之所以要设置断点主要是为了在执行程序时对程序有更深入地理解。
在设置断点之后,程序到达了断点将暂停程序。
然后可将寄存器内的数据和执行路径记录下来,以方便更好地对断点处的上下文环境和具体执行情况进行分析,借助于设计不同的断点能够使分析人员更好地明确程序的执行方式,180研究与探索Research and Exploration ·探讨与创新中国设备工程 2018.03 (上)并理解程序的结构,进而能够更好地将之前的函数调用关系同程序的实际运用信息有机结合起来,这样一来,就能清楚地把握整个程序的脉络。
通过对程序中的数据流信息和控制流程进行分析,能够推导出数据并建立文档。
上述几大步骤可密切配合起来并反复使用,这样能更好地推导出整个软件的脉络,并建立其开发文档。
4 结语综上,在软件维护中采用软件逆向工程技术能节约软件维护的资金和精力投入,程序员掌握这一技术不仅利于其更好地发挥软件维护的实力,同时还能借助这一技术学习同行的先进的理念和技术。
参考文献:[1]邓锐,吴俊超,黄坚.逆向工程技术及其在模具设计制造中的应用初探[J].山东工业技术, 2017,(21):136-138.[2]刘晓东.在软件维护中逆向工程的应用探究[J].数字技术与应用,2015,(12):123-123.[3]杜丹.逆向工程在软件维护方面的应用研究[J].软件导刊,2014,(5):47-48.[4]杜华,余小东.逆向工程在软件维护方面的应用研究[J].电子技术与软件工程, 2015,(11):136-138.[5]周小东.基于逆向工程技术与有限元分析的集成设计方法研究[D].广东工业大学,2016,38-40.[6]潘立业.快速逆向工程技术及其在产品开发中的应用分析[J].科技风, 2017,(9):103-104.1 工业互联网发展现状世界上第1个工业云平台Predix 由美国通用电气公司(GE)在2015年正式对外开放,第2个平台MindSphere 是德国西门子公司基于工业4.0理念建立,在2016年4月开放。
此外,亚马逊打造的AWS IoT 物联网云平台,顶级机器人制造商之一KUKA 和Infosys 联手开发的针对企业工业4.0解决方案的软件平台。
AWSIoT、微软Azure IoT 等物联网云平台,都是云服务提供商基于通用云计算服务延伸开发出来的一些工业应用。
但由于其对工业应用理解得不够,渗透到工业领域还不深,还未形成特定工业行业的专业应用。
2016年根据工业和信息化部电子科学技术情报所对我国7万多家工业企业开展的两化融合评估数据显示,企业互联化指数仅为32.7,智能制造就绪率仅为5.1%,总体来说我国工业企业两化融合发展水平处于起步建设阶段。
探索一条适合我国工业企业发展的两化融合道路是当务之急。
李伯虎院士曾提出云制造是一种面向服务、高效低耗和基于知识的网络化、敏捷化制造新模式和技术手段,它丰富和拓展了云计算的资源共享内容和服务模式,促进了制造的敏捷化、服务化、绿色化、智能化。