概述
逆向工程,也叫反求工程,英文是reverse engineering。
可以分为四个步骤:
(1)物体数据化:普遍采用三坐标测量机或激光扫描仪来采集物体表面的空间坐标值。
(2)从采集的数据中分析物体的几何特征:依据数据的属性,进行分割、再采用几何特征和识别方法来分析物体的设计及加工特征。
(3)物体三维模型重建:利用CAD软件,把分割后的三维数据作表面模型的拟合,得出实物的三维模型。
(4)检验、修正三维模型。
[编辑本段]逆向工程的研究与发展
1980年始欧美国家许多学校及工业界开始注意逆向工程这块领域。1990年初期包括台湾在内,各国学术界团队大量投入逆向工程的研究并发表成果。
逆向工程的硬件最早是运用仿制加工设备,制作出来的成品品质粗糙。后来有接触式扫瞄设备,运用探针接触工件取得产品外型。再来进一步开发非接触式设备,运用照相或激光技术,计算光线反射回来的时间取得距离。
逆向工程软件部分品牌包括Surfacer(Imageware)、ICEM、CopyCAD、Rapid Form等。逆向软件的演进约略可区分为三个阶段。十一年前在逆向工程上,只能运用CATIA等CAD/CAM高阶曲面系统。市场后来发展出两套主流产品约在七、八年前技术成熟,广为业界引用。到最近四年来,发展出不同以往的逆向工程数学逻辑运算,速度快。
逆向工程在台湾的发展轨迹持续在进行,工研院曾写过一套逆向工程软件,学术界不少研究团队也将逆向工程领域作为研究主题,开发出具不同功能的系统软件,但是最后这些软件都没有真正落实到产业界应用。工研院的团队后来也结束逆向工程研究,转而开发其它主题。原有的研发成果后继无人,殊为可惜。
1998年,NEWPOWER启动了逆向工程的一些项目,要求是把客户的现有源代码转变成设计, 如果需要的话,进一步转化成产品需求规约。这恰恰与类似于V模型的标准开发过程模型相逆。这样一来,客户就可以容易地维护他们的产品(需求,设计,源代码等等),而不需要想以前那样,每次改动产品都需要直接修改源代码。
是指从实物上采集大量的三维坐标点,并由此建立该物体的几何模型,进而开发出同类产品的先进技术。逆向工程与一般的设计制造过程相反,是先有实物后有模型。仿形加工就是一种典型的逆向工程应用。目前,逆向工程,逆向工程的应用已从单纯的技巧性手工操作,发展到采用先进的计算机及测量设备,进行设计、分析、制造等活动,如获取修模后的模具形状、分析实物模型、基于现有产品的创新设计、快速仿形制造等。
通俗说,从某种意义上说,逆向工程就是仿造。这里的前提是默认我们传统的设计制造为“正向工程(当然,没有这种说法)”。
软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。逆向工程工具可以从已存在的程序中抽取数据结构、体系结构和程序设计信息。
学习软件逆向一定要按照流程图中的步骤学习吗? C/C++→系统程序开发→算法数据结构→架构平台→汇编
以C为基础.学习语法.然后转向C#、C++、JAVA!先试学一下,不过不要花太长时间.然后觉得自己喜欢哪门就选哪门一直学下去.这3门是现在最热门的语言了.还有DELPHI,因为它主要是开发数据库的.所以可以兼学!你需要的就是了解各门语言在哪方面强大.比如JAVA的移植性非常好,跨平台强大.而且它在网络设计方面也很强大.C#的网络方面听说是最强大的,我没用过.还不知道.C++可以说是运用最广泛的了.现在世界上有的程序,基本上都可以用C++编写出来,而且很多游戏是C++编出来的!!呵呵!!!我这里只给楼主指明方向.而不说有没有前途.不过你要是能精通,全部都有前途!
补充:
瞎看瞎找这是很多人都会遇到的!!不可能完全避免,不过可以减少走的弯路,比如,要选一本循序渐进的好书作为入门!最好先去了解一些相关的术语,又如什么是地址啊,什么是变量,什么是变量类型啊等等一些简单的概念,从而使你在看书的过程中心里有个底,并能够知道是什么意思,等你入门之后再来深入研究!你先尝试根据书里的教程使用编译器!C语言的TURBO C.VB本来就是个编译器来的,C++的VC++6.0!!先尝试着使用,编写出第一个Hello world程序!!!!再学习一些语法和程序控制流程语句.就可以算是入门了!!
C语言谁的教程书记好呢,我有小甲鱼的零基础C语言教程,学习软件逆向先学习了c后是直接学习汇编语言还是要学习其他的
逆向分析能做什么或应用范围、应该怎么做
1、病毒行为特征的分析,更好进行反病毒软件的编写。
2、内部算法的了解分析,进行软件行为的模拟。
3、软件的破解,去除各类软件的限制。
4、解密算法,解密各类加密文件。
5、分析其算法,进行各类外挂的设计。
6、在没有源码的情况下,对现有软件进行直接的修改,扩展其功能。
7、分析网络数据包格式,模拟发送网络数据包。
逆向分析是考验人耐性的事情,如果你没有耐性可能很难出结果,往往一个大点的系统就可能需要几个月的时间,上年也有可能,所以耐性是第一,分析过程中往往觉得已经到尽头,无法再分析下去而退缩,但成功可能离你也许不远了,你需要沉着冷静,因为任何东西都是可能被逆向的,源码已经被编译成汇编代码后,在汇编代码前,代码量已经是成几何量倍增,而且大量的寄存器和指令,往往容易混淆,所以,你需要一个稳重的性格更好,其后需要一些基本知识,汇编是必须要掌握的,其次其他高级语言如:C++、pascal、basic等能掌握更好,至少应该精通一门,往往分析过程中不仅仅是汇编指令,更多的是在跟系统打交道,软件中会用到各类知识,winapi、COM、消息、多线程、内存管理、进程等等,对系统的了解更有利于你进行下一步的分析,所以知识全面更加有利于分析,当然,知识需要积累,积累需要过程和毅力,需要时间如果你愿意在这个方面发展,那么你需要坚韧的毅力。逆向分析过程中,一个重要的东西就是注释,我们在C++中编写软件的时候并不需要写太多的注释,因为我们通过函数名或者变量名都能辨别出意义,但是逆向分析中,你看到的是汇编代码,基本都是寄存器和指令的集合,那么注释就显得非常非常的重要,一定要多写注释,而且有可能注释会反复修改,因为你有可能第一次分析一段汇编代码后的意义并不正确,分析多次后就会推翻前面下的定义,又会写入新的意义,不用怕你的注释会错误,就怕你不写,IDA和OD都有很好的注释和书签的管理功能,这将大大有利于我们的分析。还有,你需要有一个OPEN的思想,不要局限于一个点,要从大的点入手,最好能模块化这些汇编代码,最后把这些模块集合在一起后,就是一套完整的思路了。人的潜力是无限的,没有触发的时候可能你自己都不相信,但所有的一切都需要积累,世上没有不劳而获。
Android逆向工程师是做什么的
必须掌握的技能
1、负责安卓程序的加解密和数据传输分析、拆解、逆向等工作;
2 、逆向APK,了解运行过程;
3 、Andorid本地提权获得root权限;
4 、熟练掌握软件逆向静态分析、动态调试、代码跟踪等;
5 、熟悉Android开发,了解打包、反编译、破解流程;
6 、so破解。
目前了解的如下:
1,加解密:这就很多了,一般都是遇到后再折腾解密,而且解密代码和秘钥一般都在代码里面。
2,Andorid本地提权获得root权限,一般真机是用recovery刷机包,但是病毒提权是怎么样的
目前掌握的一种提权的是像输入命令行一样输入su并且用pm提权
还有一种是修改init.rc文件
3,ida动态调式和代码跟踪
4,打包,编译和破解的流程是什么样的?
5,so破解:一般就是破壳。各种壳(360,娜迦等等)
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。加壳的程序经常想尽办法阻止外部程序或软件对加壳程序的反汇编分析或者动态分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。
6,了解反破解的技术
目前掌握的技术有:
1,反模拟器
2,反静态代码分析器如:反jeb
应该也是有很多反ida的,也就是加壳。
任职要求
1、具有丰富的Android开发分析经验,熟悉android系统架构,熟悉android安全机制;
2、精通汇编语言、Java、C/C++语言,熟悉Smali语言,对逆向工程有浓厚兴趣;
3、熟练掌握ida、gdb逆向分析工具;
4、熟练掌握软件逆向静态分析、动态调试、代码跟踪等;
5、熟悉so和Java层hook;
6、熟悉Android开发,了解打包、反编译、破解流程;
7、深入理解arm Linux和Android底层运行机制;
8、熟练掌握各种调试工具:Smali、Dedexer、Dexdump、Apktool、Dex2jar、jd-gui。
软件工程中的正向工程和逆向工程分别是什么?
正向工程是通过到实现语言的映射而把模型转换为代码的过程。
逆向工程是通过从特定实现语言的映射而把代码转换为模型的过程。
逆向怎么做。
可以用PROE做,首先在SURFACER里面摆正,然后找出分型面,这一步很重要,不然以后白忙,接着连出外型线,打截面线,转到PROE里面来铺面,这一过程是很繁琐的,有的要画好几天,一般是请专业的抄数公司做的,我们就是专门做逆向的
转载请注明出处51数据库 » 软件逆向的一般步骤为 程序逆向是什么
滚犊子12138