逆向编程与反汇编的区别

最近看到逆向编程的问题,在此分享一下查找的结果


反汇编:一般是只对编译器根据高级语言生成的本机二进制可直接在芯片上执行的机器码”解析“为人类可读的汇编形式的代码(实际上最最早期的计算机操作员具备直接阅读机器码和使用机器码编程的能力,不需要转换为汇编形式,这是计算机普及,程序规模也爆炸性增大后,人们就有需要转换为汇编代码来读懂机器码程序),早期的反汇编目的是编译器生产商用来检查编译器生成代码的性能。当今主要在得不到源代码的情况下,研究分析其他人的程序,如病毒程序的分析,系统漏洞的挖掘,或者黑\灰色产业链里的山寨抄袭功能等。通过反汇编分析其功能、算法、逻辑等。

反编译原理:通常,编写程序是利用高级语言如C,pascal等高级语言进行编程的,然后再经过编译程序生成可以被计算机系统直接执行的文件(机器语言)。反汇编即是指将这些执行文件反编译还原成汇编语言或其他高级语言。但通常反编译出来的程序与原程序会存在些许不同,虽然执行效果相同,但程序代码会发生很大的变化,要读懂反汇编需要有扎实的高级语言编写功底和汇编功底。

逆向编程属于逆向工程逆向编程一般指根据反向分析别人程序的功能而使用其它编程语言编程再现该功能
反向分析(逆向工程)不仅仅是反汇编,对不同系统平台语言平台芯片平台的不同也囊括不同内容,如反汇编则基本有对各种芯片(如8086、arm、c51等芯片的反汇编)
反汇编实际属于反编译,反编译就包括各种语言从低级或中间级语言到高级语言的解析。如.NET平台的C#就可由中间语言MSIL反编译成C#,Java平台的就可由.class中的Java字节码反编译为Java代码后有其它的dex虚拟机的字节码,自定义的虚拟机字节码等等

总言之反汇编属于反编译的一个分支,反编译是实现逆向编程的必经步骤这些都属于IT界的”逆向工程“范畴

二者的区别:反汇编仅仅是使用一些反汇编软件把程序从机器码翻译成汇编语句,而逆向编程不仅要做完反汇编的工作,还要在此基础上彻底理解这些汇编代码是什么意思,准确的说是这些代码能够实现什么功能,然后用自己熟悉的语言写出功能相似(不可能和原作者的代码完全相同)的代码或软件
部分分析不到位的地方,希望给与评论共同进步!

你可能感兴趣的:(iOS开发)