反汇编算法
1. 如何快速读懂反汇编的汇编代码
简单的逆向工程其实不难,IDA加Hex-Rays插件,可以直接把汇编还原成C代码。虽然还原出来的代码比较怪,但是已经比直接看汇编代码强多了。
静态反汇编工具: IDA Pro
动态反汇编工具: ollydbg/x64dbg
Windows内核调试工具: windbg
2. 在反汇编中怎么学习反汇编算法
先把编译原理学懂弄通后,再试着做一个简单点的编译器,然后再谈逆向工程。
3. 如何学习汇编语言和反汇编相关问题
哈,你这观点有点问题。第一在这开始学这汇编时不要多想那反汇编的。你想嘛,正的顺的还没学好就要一起学那反的逆过程了,别的不多说,那可就要多掌握更多的软件使用了也是多麻烦吧。
最好的学汇编的方法,是花几十元钱去淘宝网购一块开发板,并让老板给你配上大量的列程,你再在网上找点视屏教学,比着这些一个一个的做,在这做的过程中,再把根据单元片机厂家的资料把芯片内的硬件资源搞明白,在这我不建议你看什么谁写的书,因他们都不可能把最新芯片的新功能写进去,这只有厂家的资料中才有的。
学汇编能做什么,起码可做很多只学c语言做不到的事,比如加,解密。比如在前期的3Q大战中要有话语权,要真知事情的真象,这只有熟知熟用汇编的人才可办到。我的观点,你就是只想做程序员那只会C都要还远远的不够,更不要谈你想怎么真正的开发,应用设计计算机了,因这就要知计算机最底层的根本你才叫真正懂计算机的。你才可把计算机玩于股掌之中。
好了,最后在这我不否认C,它具有编制方便,编程速度快,更有利于计算方面的程序开发。它应该是程序员的ABC。。。。。。
还有什么不清楚的可再追问我。
4. 怎样可以快速学会反汇编分析
回复 1楼 天使联盟 的帖子这些东西可以去“看雪”或者“UpK”这两个论坛看看,技术挺不错的关键在于你要用反汇编去分析什么,完全没有目的一行一行的看汇编代码,谁都得吐血的……先确定一个目的,有了目的之后再根据目的去定位程序中的关键位置,然后去分析具体部分其实反汇编分析的入门阶段并不要求汇编水平有多高,基本汇编指令能看懂就OK,并不要求有基于汇编语言的开发背景加壳的东西可以去搜索脱壳的教程,自己分析的话需要对汇编算法和数据结构都很熟悉,一般压缩壳问题不大,F8一路跑下去就OK加密壳的话就看你的算法基础了。至于高级语言,反汇编Delphi程序蛮蛋疼的,不是Delphi语言的问题,而是Borland公司的编译器的问题(Borland C++编译的程序同样蛋疼)……简直就是call的浪费者,为了实现一个很小的功能,编译器能一层一层的向下call十几层……VB的东西就已经不能用蛋疼形容了……一般VB、.NET类的程序都有专门的反编译工具,不用反汇编的,都是直接反成高级语言进行分析。反汇编分析的基础建议从C/C++语言编译出的程序开始练起,尤其是VC编译出来的,比较标准,也很通用。自己编些最基础的控制台程序(比如只有一个简单循环的小程序,或者只有一个简单条件判断语句的小程序),然后自己用OD跟一下。能了解各种语句在反汇编中的汇编代码形式看雪一类的论坛有专门的CrackMe或者TraceMe的练习破解的小程序,可以用来练习破解、跟踪、脱壳等技能跟踪Win32程序进行行为分析的话,对Windows系统API的定位是非常实用的方法,能快速跟踪出程序的大体行为。至于快一点的方法——没有。成功没有捷径,技术是靠勤奋一点点积累起来的。
5. 本人想学习破解技术但是看不懂反汇编代码!求助!!
第一列就是指令的物理地址,由程序每次装入的不同而可能不同,若在不同机器上大多时候是不相同的,就是在内存中的地址,也就是所谓的"地址编号",可以这样理解的.
第二列就是指令字,也就是说二进制才是机器所认识的编码的,由于其计数较难,用十六进制表示,这个十六进行就是说机器码的.比如51就是将ECX入栈.等等,机器码是比较难记的,且一个指令可能有几个码来表示,就比如add指令,如果是加寄存器是一个指令,加内存又是一个指令,这时才出现了一种助记符,也就是所谓的汇编,比如将所有的加的功能都算作是add这个助记符,再根据指令泽成机器码.第三列你就明白了,就是反汇编出来的汇编语句,比如push ecx就是将ECX进栈,这个指令机器码都是根据CPU的不同而不太相同,所以一个类型的CPU都有自己支持的指令,而所有的指令的集合就叫做"集",比如我们常用的"X86指令集",用这个指令集所写的程序显然可以正常运行在X86构造的CPU系统上的.而CPU发展中一般是对以前的指令集的一个扩展而已,所以以后的型号的CPU也有可能支持的,但如果是不CPU指令集肯定是不行的.比如INTEL X86写出的程序工作在AMD上是不行的,所以如果软件支持很多平台时,要有不同的处理的!
地址是一般是顺序存放的,地址差就是指令字的长度,比如51就是一位长,而8BCF就是二位长,都是可以进行段内转移的!所以学这个你可能要学一下指令与汇编了,而这个不是window汇编,所以要学的一般是<<80X86汇编>>,而window32位汇编经罗云斌的较好,但必须先学过的是80X86汇编才行的!
6. 反汇编与逆向编程的区别
反汇编只是按将010二进制码这样的目标码分析解释成Assembler ,所以我们叫DisAssembler,当然这与教科书上的汇编语言是不同的,这是由编译器优化生成的目标代码,而反汇编只是将通过如intel 指令手册就可以将之转换出来,而逆向编程是在反汇编的基础上,然后分析他的逻辑,从而用高级语言或是流式语言进行二次编程,比较常见的,就是使用嵌入asm(c语言),再则因为汇编的条件啥的其实基本都在goto,所以你用老一套的跟,只到你跟出自己的思路来了,那就真的就是逆向编程了,不过现在多是以上两种,当然高手我就没资格评论了.
7. 反汇编与汇编一样吗有什么不同
汇编是最基础的计算机编程语言,用作动词时就是说用汇编语言写成的程序代码经过编译连接之后生成可执行程序的过程。而反汇编就是这个过程的逆过程,一般是针对商业软件或病毒等不知道源程序是如何书写的程序,经过反汇编,将由机器码(即一条条01组成的指令)方向翻译为汇编指令,这样一定程度上可以让人们理解认识程序的编写方式,使用的算法特点等,但是针对反汇编,有许多方法可以加大反汇编的难度,比如说在程序中加壳,使用大量跳转等
8. 反汇编逆向难学吗,入门难吗
反汇编是工具来做的,比如IDA,OD,你说的这个应该是逆向和破解技术。
逆向其实是有它的难度在里面的,要跟汇编打交道,很多时候破解要涉及加密算法,驱动保护还有壳。可以这么说,逆向技术本身不算太难,但是难的是逆向防御技术。
因为逆向在windows平台上的通用性而且不是太难学,导致了商业软件为了追求安全性,产生了很多逆向分析的对抗技术,来增强自己的安全性。毕竟自己辛辛苦苦花钱花时间搞出来的东西,被别人两下学了去,怎么想怎么不舒服。
这里面,加壳鄙人不了解,不做评论。驱动保护就是在内核里搞风搞雨,入手的门槛还是比较高的。所以学逆向不难,花时间花功夫多练手。但是想把你高超的逆向功力应用到实际的商业产品上,驱动和壳是你必须面对的东西,去研究这两者会花费大量精力。
AGP论坛站长,反游戏保护和windows内核技术大牛A总听说是高二就开始研究内核技术了,lz如果花时间,也是能学成的,毕竟有成功案例在了。有点基础想撸驱动,还可以找A总报名参加下付费培训。。。广告已打, 心满意足。
9. 向大侠求助一段arm反汇编代码的意思
反汇编:一般是只对编译器根据高级语言生成的本机二进制可直接在芯片上执行的机器码”解析“为人类可读的汇编形式的代码(实际上最最早期的计算机操作员具备直接阅读机器码和使用机器码编程的能力,不需要转换为汇编形式,这是计算机普及,程序规模也爆炸性增大后,人们就有需要转换为汇编代码来读懂机器码程序) 早期的反汇编目的是编译器生产商用来检查编译器生成代码的性能。 当今主要在得不到源代码的情况下,研究分析其他人的程序,如病毒程序的分析,系统漏洞的挖掘,或者黑\灰色产业链里的山寨抄袭功能等。通过反汇编分析其功能、算法、逻辑等。 反汇编实际就属于逆向过程,分析得到别人的功能、算法、逻辑后,再根据得到的信息再开发、增加补丁开发、防御产品开发等,在开发的过程根据实际需求而言,比如分析汇编代码得到的一个算法,可以用任意其它编程语言再现,这就是逆向编程了 逆向编程属于逆向工程, 逆向编程一般指根据反向分析别人程序的功能而使用其它编程语言编程再现该功能。 反向分析(逆向工程)不仅仅是反汇编,对不同系统平台语言平台芯片平台的不同也囊括不同内容,如反汇编则基本有对各种芯片(如吧0吧陆、arm、c5一等芯片的反汇编) 反汇编实际属于反编译,反编译就包括各种语言从低级或中间级语言到高级语言的解析 如.NET平台的C#就可由中间语言MSIL反编译成C# Java平台的就可由.class中的Java字节码反编译为Java代码 后有其它的dex虚拟机的字节码,自定义的虚拟机字节码等等 总言之,反汇编属于反编译的一个分支, 反编译是实现逆向编程的必经步骤 这些都属于IT界的”逆向工程“范畴
10. 什么叫汇编汇编可以干什么反汇编有是什么
什么叫汇编
汇编语言(Assembly Language)是面向机器的程序设计语言。
在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。
汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。
是能完成一定任务的机器指令的集合。
汇编可以干什么
汇编语言是一种面向机器结构的低级程序设计语言,汇编语言程序是把机器指令组成的机器语言"符号化",它同机器语言的目标代码一一对应.采用汇编语言进行程序设计,既可以充分发挥机器硬件提供的有利条件,又不像机器语言那样编制出的程序难于辨认,不易修改、维护。
在某些情况下,用高级语言编制的程序不能满足要求时,应当使用接近机器语言的汇编语言编制程序,它既可以弥补高级语言程序的某些不足,有可改善用机器语言编制程序的困难.
学会汇编后,你在用高级语言编程时会更了解机器到底做了什么,可以通过修改高级语言的代码来提高算法所不能提高的效率
反汇编...就是...就是...把目标代码转为汇编代码的过程.