2022年破解软件教程入门篇--汇编语言 .pdf
《2022年破解软件教程入门篇--汇编语言 .pdf》由会员分享,可在线阅读,更多相关《2022年破解软件教程入门篇--汇编语言 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章 - 汇编语言稍微有点儿计算机知识的朋友一定知道,计算机是只识别0 和 1 的,最初那会儿,要写程序,就要用0 和 1 来写,呵呵, Cool 吧!所以曾经有过的对程序员的崇拜,可能就源自那个时候吧后来,人们发现用0和 1 来写程序,太不爽了,不但写起来不上手,而且回过头来看的话,应该很难再看明白了,总之出于这些原因,就有了汇编语言。汇编语言用一些助记符来代替0 和 1 的多种组合, 也就是各个指令, 这样的话,从一定程度上来说, 方便了许多 (一头老牛: 方便太多了)(一只菜鸟:一点儿也不方便,完全看不懂)。但是,汇编也同样不方便,同样写起来不爽, 而且后期维护同样不方便,再加上人们慢
2、慢地需要写一些更大的程序,在这样的情况下,高级语言就被人发明了出来,就是我们今天用的Basic 、pascal 、C、C+ 等等等等,这些语言的出现,一下了使程序的开发难度大大减低了(一头老牛:减低太多了,我膝盖就能写程序了) (一只菜鸟:还不是一样难),以前用汇编要很长时间才能开发出来的程序,现在只需要很短的时间且很轻松的就可以搞定了,特别是最近几年, 可视化编程的大肆普及,使程序员的神秘感一下子摔了下来, Coder这样的词现在都满天飞了。最惨的就是汇编,一夜之间变成了低级语言、下流的语言、吃完大蒜不刷牙的民工、开车加完油不给钱的地痞、在公共汽车上吐口水的冰岛人等等等等(汇编:呜呜呜 我不
3、活了)。但是汇编还是有它先天的优势的,因为其与CPU 内部的指令一一对应,所以在一些特殊的场合,必须由汇编来实现,比如访问硬件的端口、写名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 病毒.而且生成的可执行文件效率巨高,且生成的可执行文件贼小,写小程序是很爽的,呵呵,而且用汇编写注册机,是件很轻松的事,你不用再为怎样还原为你所熟悉的语言而为难。说了这么多,还是切入主题吧(昏倒观众若干):既然计算机只识别0 和 1,那么,所有存
4、储在计算机上的文件,也都是以二进制的形式存放的,当然也包括可执行文件了。所以,你只要找一个十六进制编辑器比如UltraEdit 什么的,就可直接打开并查看可执行文件了,呵呵,如果你能看懂的话你会发现,此时看到的, 全是些十六进制数值 (每 4 位二进制数可转换为一位十六进制数),这就是可执行文件的具体内容,当然,其中就包括可执行文件的代码了。(一头老牛:好亲切啊)(一只菜鸟:笨牛,你给我闭嘴,我眼都花了)。呵呵,此时,你是不是觉得看这些东西,有些那个?这些东西看起来就像有字天书, 没人能靠这玩意儿来进行分析,于是乎。就有了相应的软件,可以将这些十六进制数值转换为相应的汇编代码,这样的话, 我们
5、就可以对别人的软件进行分析了。这就是所谓的逆向分析了。呵呵,聪明的你现在一定在想,如果找到软件计算注册码的部分,并对其进行分析, 弄懂它的计算方法, 那么你不就不用通过¥的方式来进行软件注册了吗?当然, 你也可以将此计算过程还原为任意一个你所熟悉的编程语言,那么,编译后的这个程序,就叫做注册机,它的功能就是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 计算某一特定软件的注册码。(呵呵,是不是经常在软件中看到此类说明? 禁止制
6、作和提供该软件的注册机及破解程序;禁止对本软件进行反向工程,如反汇编、反编译等)作者这样做, 心情我们是可以理解的,毕竟人家花了那么多心思在自己的软件上, 所以,我不希望你仅仅是因为交不起注册费的原因来学习破解。总的说来,上边儿的介绍有点儿太理想化了,上面提到的分析方法,就是所谓的静态分析,此类分析常用的工具有W32DASM、IDA和 HIEW等。静态分析, 顾名思义, 就是只通过查看软件的反汇编代码来对软件进行分析。一般如果只是想暴破软件,只进行静态分析就够了。但要想真正的弄清注册算法, 一般还是要进行动态分析的,即能过调试器来一边执行程序一边进行分析。 具体内容, 我会在破解原理 和调试器
7、入门中详细说明,呵呵,毕竟现在都以经有点儿跑题了。我废话说了这么多, 其实就是想告诉你汇编的重要性,我不要求你精通,但最少你也得能看懂吧, 要不,还谈什么分析?虽然有哥们儿一点儿汇编都不懂就上路了,甚至还破掉了几个软件,但是,这样是不是惨了点儿?难不成你想暴破软件暴破一辈子?其实你完全不用惧怕汇编的,看上去怪吓人的, 其实跟你平时背那些控件的属性方法差不多,MFC 那么多你都搞的定,汇编命令才有多少?而且,汇编不光只是在Crack 软件时有用,在好多地方也都有用,且用处巨大,所以我觉得,把汇编拿下,是件义不容辞的事:你只要相信它并不难就好了。名师资料总结 - - -精品资料欢迎下载 - - -
8、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - (以下为第二次修改时加入)先给你讲一下CPU 的组成吧:CPU 的任务就是执行存放在存储器里的指令序列。为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O 之间的数据传送任务。早期的 CPU 芯片只包括运算器和控制器两大部分。到了近几年, 为了使存储器速度能更好地与运算器的速度相匹配,又在芯片中引入了高速缓冲存储器(知道为什么P4比 P4赛扬贵那么多吗?)。(当!一个硬物飞了过来,话外音:你讲这些做什么,我们又不要设
9、计CPU )你急什么嘛,由于汇编比较“低级 ” ; 所以它是直接操作硬件的,你以为这是用 VB呢,想什么时候用变量随手就可以拿来用,你不掌握好CPU 内部的一些工作分配情况,到时怎么来看汇编代码啊。(当!又一声,重要还不快点儿说)除了高速缓冲存储器之外的组成,大体上可以分为3 个部分:1. 算术逻辑部件ALU (arithmeticlogicunit )用来进行算术和逻辑运算。这部分与我们的关系不太大,我们没必要管它。2. 控制逻辑。同样与我们的关系不大。3. 这个才是最最重要的。工作寄存器,它在计算机中起着重要的作用,每一个寄存器相当于运算器中的一个存储单元,但它的存取速度却贼快贼快,比存储
10、器要快很多了。 它用来存放计算过程中所需要的或所得到的各种信息,包括操作数地址、操作数及运算的中间结果等。下面我们专门的介绍这些寄存器。在介绍之前,有必要说点儿基础性的知识。知道什么是32 位吧,就是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - 说寄存器是 32 位的,晕 等于没说。在 CPU 中,一个二进制位被看作是一位,八位就是一个字节,在内存中,就是以字节为单位来在存储信息的,每一个字节单元给以一唯一的存储器地址,称为
11、物理地址,到时候访问相应的内存, 就是通过这个地址。 八个二进制位都能表达些什么呢?可以表达所有的ASCII 码, 也就是说一个内存单元可以存储一个英文字符或数字什么的, 而中文要用 Unicode 码来表示, 也就是说两个内存单元,才能装一个汉字。 十六位就是两个字节这不难理解吧,当然啦,那有了十六位,就肯定有三十二位六十四位什么的,三十二位叫做双字,六十四位就叫做四字。今天我们所使的CPU ,相信全是32 位的了,除非你用的是286 或更早的话。自然而然,CPU 中的寄存器,也就是32位的了,也就是说一个寄存器,可以装下32 个 0 或 1(这其中不包括段寄存器)。大体上来说, 你需要掌握
12、的寄存器, 有十六个,我一个一个给介绍给你:首先,介绍小翠儿(当! ,我自己打我自己一下得了,最近看周星驰看多了),重说,首先,介绍通用寄存器。一共八个,分别是EAX 、EBX 、ECX 、EDX 、ESP 、EBP 、EDI、ESI。其中, EAX EDX这四个寄存器又可称为数据寄存器,你除了直接访问外,还可分别对其高十六位和低十六位(还计的我说它们是32 位的吗?)进行访问。它们的低十六位就是把它们前边儿的E去掉,即 EAX的低十六位就是AX 。而且它们的低十六位又可以分别进行八位访问,也就是说, AX 还可以再进行分解,即AX还可分为 AH (高八位) AL(低八位)。其它三个寄存器请自
13、行推断。这样的话,你就可以应付各种情名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - 况,如果你想操作的是一个八位数据,那么可以用MOV AL ( 八位数据)或 MOV AH( 八位数据 ) , 如果你要操作的是一个十六位数据,可以用 MOVAX ( 十六位数据 ) 三十二位的话,就用MOVEAX( 三十二位数据 ) 也许我这样说,你还是会不明白,没关系,慢慢来,我给你大概画张图吧,虽然不怎么漂亮: 高十六位EAXAH AX A
14、L ( 我倒啊 .这个图为啥老是不能正常显示?我都重画三遍了)明白了吗?不明白没有关系,你就按你自己的理解能力,能理解多少,就理解多少。这四个寄存器, 主要就是用来暂时存放计算过程中所用的操作数、结果或其它信息。而 ESP 、EBP 、EDI、ESI 这四个呢,就只能用字来访问,它们的主要用途就是在存储器寻址时,提供偏移地址。因此,它们可以称为指针或变址寄存器。话说回来,从386 以后,所有的寄存器都可以用来存储内存地址。(这里给你讲一个小知识,你在破解的时候是不是看到过EBX这样的形式呢?这就是说此时EBX中装的是一个内存地址, 而真正要访名师资料总结 - - -精品资料欢迎下载 - - -
15、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - 问的,就是那那个内存单元中所存储的值)。在这几个寄存器中, ESP称为堆栈指针寄存。 堆栈是一个很重要的概念,它是以 “后进先出 ”方式工作的一个存储区,它必须存在于堆栈段中,因而其段地址存放于SS寄存器中。它只有一个出入口,所以只有一个堆栈指针寄存器。ESP 的内容在任何时候都指向当前的栈顶。我这样说你可能会觉的还是不明白,那我举个例子吧,知道民工盖房吧,假设有两个民工, 一个民工(以下简称民工A)要向地上铺砖, 另一个民工 (
16、以下简称民工 B)给民工 A递砖,民工 A趴在地上,手边是民工B从远处搬来的板砖,他拿起来就用,民工B从远处搬来后,就还放在那一堆砖上,这样,民工 A拿着用后,民工 B 随既就又补了上去,这就是后进先出。你在脑子里想象一下这个这程。有没有想明白,民工A永远是从最上边开始拿砖。堆栈就是这样,它的基址开始于一个高地址,然后每当有数据入栈,它就向低地址的方向进行存储。相应的入栈指令是PUSH 。每当有数据入栈,ESP 就跟着改变,总之,它永远指向最后一个压入栈的数据。之后,如果要用压入堆栈的数据,就用出栈指令将其取出。相应的指令是 POP ,POP 指令执行后, ESP 会加上相应的数据位数。特别是
17、现在到了Win32系统下面,堆栈的作用更是不可忽视,API 所用的数据,均是靠堆栈来传送的,即先将要传送的数据压入堆栈,然后CALL 至 API 函数, API函数会在函数体内用出栈指令将相应的数据出栈。然后进行操作。以后你就会知道这点的重要性了。许多明码比较的软件,一般都是在关键CALL前,将真假两个注册码压入栈。然后在 CALL内出栈后进行比较。所以,只要找到个关键CALL ,就能在压栈指令处,下d名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - -
18、- - - - - - 命令来查看真正的注册码。具体内容会在后面详细介绍,本章暂不予讨论。另外还有 EBP ,它称为基址指针寄存器,它们都可以与堆栈段寄存器SS联用来确定堆栈中的某一存储单元的地址,ESP用来指示段顶的偏移地址,而 EBP可作为堆栈区中的一个基地址以便访问堆栈中的信息。ESI(源变址寄存器)和EDI(目的变址寄存器)一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能,可以很方便地用于变址。在串处理指令中,ESI 和 EDI作为隐含的源变址和目的变址寄存器时,ESI 和 DS联用, EDI和附加段 ES联用,分别达到在数据段
19、和附加段中寻址的目的。目前暂时不明白不要紧。接下来,再介绍如花(当当当,我再打自己三下算了)接下来,介绍一下专用寄存器,呵呵,有没有被这个名字吓倒?看起来怪专业的。所谓的专用寄存器,有两个,一个是EIP,一个是 FLAGS 。我们先来说这个EIP,可以说, EIP 算是所有寄存器中最重要的一个了。它的意思就是指令指针寄存器,它用来存放代码段中的偏移地址。在程序运行的过程中,它始终指向下一条指令的首地址。它与段寄存器CS联用确定下一条指令的物理地址。当这一地址送到存储器后,控制器可以取得下一条要执行的指令,而控制器一旦取得这条指令就马上修改EIP 的内容,使它始终指向下一条指令的首地址。可见,计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年破解软件教程入门篇-汇编语言 2022 破解 软件教程 入门 汇编语言
限制150内