十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一般人弄不到的,微软控制的很严格,如果想要系统源码,建议用开放的
创新互联长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为锡林郭勒盟企业提供专业的网站制作、成都网站设计,锡林郭勒盟网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
反汇编只是按将010二进制码这样的目标码分析解释成Assembler ,所以我们叫DisAssembler,当然这与教科书上的汇编语言是不同的,这是由编译器优化生成的目标代码,而反汇编只是将通过如intel 指令手册就可以将之转换出来,而逆向编程是在反汇编的基础上,然后分析他的逻辑,从而用高级语言或是流式语言进行二次编程,比较常见的,就是使用嵌入asm(c语言),再则因为汇编的条件啥的其实基本都在goto,所以你用老一套的跟,只到你跟出自己的思路来了,那就真的就是逆向编程了,不过现在多是以上两种,当然高手我就没资格评论了.
DLL 属于可执行文件中的一类,又称为动态链接库,不能直接用DEBUG加载,一般由应用程序因使用该库中的函数,而由操作系统在应用程序加载的同时被加载入特定地址,这个地址一般是DLL在链接时指定的。当DLL被加载到运行空间,根据输出函数表,可以得到各个函数的入口地址,然后用DEBUG在各个入口下断点,调用该函数时DEBUG将跟踪进入该函数,从而实现反汇编。
反汇编属于逆向工程,逆向工程的主要手段有两大类,其中一类是动态分析,另一类是静态分析。
前面提到的方法属于动态分析,由DEBUG实现反汇编,该方法不容易得到完整的代码,一般只能形成一段一段独立分散的代码,同时由于DEBUG的局限性,反汇编的代码质量多不高,生成的代码不能直接使用,原因在于DLL在加载时若没有加载到指定地址空间,操作系统将对代码进行重定向,所以DEBUG只能得到重定向后的代码,这类代码必须修改每一个重定向点,才能形成可执行代码。作为WINDOWS32位操作系统, OLLYDBG是最为优秀的调试、跟踪、反汇编工具,多窗口运行,可以方便的通过窗口操作完成各类动作,而不需要像一般DEBUG那样由命令行来完成,OLLYDBG还有许多一般调试器不具备的功能,同时由于每一代高手不断的修改,使其具有多种功能,同时带来的就是混乱,谁也不知道有多少版本,谁也不清楚每个版本到底增加了什么功能,但就这样,也是瑕不掩疵, OLLYDBG任然是DEBUG中最强大,最好使用的。
静态分析和动态分析不同,静态分析直接打开原程序,加载而不运行,然后直接分析加载的代码。目前静态分析工具,最强大的当属IDA,IDA支持几乎所有种类的汇编语言。
IDA加载应用程序有许多选项,可以选择完整的加载整个程序,也可以选择加载程序的某个块,一般可选择的是否加载文件头、资源表、输入表、输出表等等。
IDA还支持调试,也就是说,当你在进行反汇编过程时,可以直接使用IDA来调试跟踪,以分析代码的动态执行情况,不过就动态跟踪来说,OLLYDBG更为强大。
IDA反汇编的正确率和代码的复杂程度有关,对于正规开发的代码,尤其是如果能够获得源程序的调试文件,即所谓的PDB文件,IDA可以读取PDB文件中的信息,使得反汇编的效率和准确度大为提高,生成的代码甚至比源代码易读。IDA将反汇编生成的结果存入IDB文件中。当你确认反汇编的结果达到你的要求,可以让IDA输出汇编源代码,IDA也提供其他格式的输出,例如HTML文件,便于用户阅读。楼主主要是用于分析DLL文件,一般来说这类文件更适合做静态分析,所以推荐使用IDA来进行。
IDA对于分析那些加壳或含有大量花指令、混淆代码、垃圾代码的程序,反汇编的正确率会大为下降,因为IDA无法正确的确认当期位置上的数值是属于代码,还是属于数据,是普通C字符,还是DELPHI的字符串,还是UNICODE字符串,是结构数据还是数组还是类表(DELPHI生成的代码中含有大量的类表)等等。遇到这种情况,就需要使用者掌握许多技巧,例如可以通过使用者对当前数据的认识,指导IDA如何处理当前的数据。对于大批量的,具有某些规律的数据,IDA还提供了脚本语言(文件尾位idc),通过对脚本的执行来指导IDA如何进行反汇编。对于更为复杂的情况,例如程序是自解压运行的,这时IDA就没有任何能力来进行正确的分析,通常都会用OLLYDBG动态跟踪,等程序完成自解压后从内存中将解压后的代码完整的挖下来形成文件,再由IDA进行静态分析。
对于成功进行反汇编的代码,IDA根据代码的入口、调用、转移等指令,可以为使用者提供各种格式的程序的流程图,IDA提供许多格式由用户选择,便于用户理解程序的结构。
下面提供的是一个汇编程序的源代码,然后将这个源代码编译成可执行文件后,用IDA反汇编得到的结果,由此可清晰的认识到IDA的强大(由于汇编代码都很长,所以截取部分来展示)。
汇编源代码(这是以前写“可执行文件头的变形技术”一书时书中示例的代码):
下面这些是通过IDA反汇编得到的结果,IDA以HTML格式输出(这里给出的是图形):
准确的说应该是intel 汇编,汇编有intel 汇编和ATT汇编,linux、unix等操作系统下一般使用的是ATT汇编。
OD等反汇编工具,反汇编出的代码属于是intel格式汇编,如果是32位程序反汇编出来的是32位汇编代码,在Windows平台下,就可以算是win 32汇编。
有专门的反汇编软件,可以对任意EXE文件进行反汇编,比如有W32DASM。
不过反汇编是把EXE转换为汇编语言,不能转换为DELPHI或者VB等高级语言的。
实话告诉你吧,最为基本的爆破之类的,确实不需要什么汇编编程基础,就很容易学会,可这只是最低级的,许多学了一俩月的菜鸟都会,但是你想要更进一层,就需要有汇编编程基础了,尤其是win32汇编。
比如说追踪注册算法,下消息断点、条件断点,你跟着教程的确会做的出来,可是真正的原理在教程里作者根本不会告诉你,知其然而不知其所以然,程序设计的水平直接区分了高手与菜鸟,高手与菜鸟同时遇到一个未知问题的时候,高手往往能从一个程序设计的角度去推测问题,然后想办法去验证自己的推测,但是菜鸟遇到了就往往一脸茫然,不知该从何下手,程序设计是菜鸟进军高手的台阶,不会程序设计就只能永远的停留在菜鸟的阶段。
反汇编和程序设计就是攻和防,想要精通进攻自然需要了解对手如何防守,从而想出有针对性的方法去解决问题。所以建议你的就是想要学反汇编,第一步先随便找本汇编的书,学习里面的计算机结构,比如说CPU里面的寄存器、总线、进制换算、基本的汇编指令、计算机如何寻址等等问题。第二步才是开始拿起来王爽汇编,开始学习如何写汇编程序,重点是每章后面留的题,认真做出来,这本书做完2/3的时候基本上就差不多了。第三步是win32汇编和windows程序设计,实际上两者的内容差不多,罗云彬的win32汇编那本书就不错,因为现在反汇编的对象都是windows下的32位程序,调用的都是系统的API,这块内容才是真正的精华,实际上也不是要求你的编程功底有多么深,但必须要了解win32程序的运行机制,这才是学win32汇编的真正目的。做完这三步,基本上你就可以专心的把注意力放到反汇编上了,剩下的就是积累经验。
一口气儿做完这三步肯定很枯燥,所以你可以一边按照这样的方式去学习,一边去看一些反汇编的资料和教程,学的枯燥了去玩玩反汇编,反汇编受挫了就回来继续学习。一点一点的提高,一口吃不成胖子。
PS:欢迎来反汇编爱好者群:54437932