Shark恒 发表于 2014-10-27 16:58

【S02E02】Shark恒 零基础破解教程之图文!【走向大牛①】


通过上一课,我发现很多问题,大部分人的回应普遍都是不知道怎么就跳出了call,那我从今天起,给大家讲讲汇编知识吧。否则越往下看越糊涂了。同时我希望大家对待任何对你有帮助的帖子都像对待我的帖子一样有热情,这样才能让作者有动力有信心继续下去。如果你得到了收获却没有回馈他,也许你确实收获一个,从此以后却失去了很多……因为他没有动力再更新了。

在开始之前,请大家做好心里准备,汇编知识,既枯燥又乏味。学完了自己也编写不出来什么东西,但却能看懂OD返回的汇编代码。如果你不想让自己PJ技术成为大牛,你可以现在就关掉了。如果你想成为大牛,那就必须看懂这一课。

下面我们开始今天的课程。 汇编命令,我就不在这里全部详细的讲解了,即便是讲了,也许你们也记不住。倒不如给你们一个查询的工具,随时查看相关命令的功能。“汇编金手指”我会打包附件的。但常用的一些命令,我会讲解的。请看下图,这是OD右上角窗口的“寄存器窗口”,我们先说说这个。



通用寄存器有8个,分别是:EAX ECX EDX EBX ESP EBP ESI EDI寄存器后面的数字,就是寄存器里储存的数值,请看下图
寄存器是干什么的?EAX ECX EDX EBX 是暂时储存计算过程中所用的操作数与结果或其他信息的寄存器。

分别是干什么的?EAX:累加器,算数运算的主要寄存器。ECX:计数器,在循环指令和传处理指令中当作计数器。EDX:数据寄存器,一般在做双字长运算时把 EDX 和 EAX 组合在一起放一个双字长数,EDX用来存放高位数字。EBX:基址寄存器。
ESP EBP ESI EDI 它们可以像数据寄存器一样在运算过程中存放操作数,但它们只能使用16位。其实他们通常的用途是在段内寻址时提供偏移地址。
分别是干什么的?ESP:堆栈指针寄存器,表示栈顶的偏移地址。EBP:基址指针寄存器,可作为堆栈区中的基值地址以便访问堆栈中的其他信息。ESI:变址寄存器,原地址指针寄存器,一般与 EDS配合使用,有自动增减量的功能。EDI:变址寄存器,目的地址指针寄存器,一般与 EDS 配合使用,有自动增减量的功能。

说完了8个通用寄存器,咱们再说说6个段寄存器:ES CS SS DS FS GS请看下图

6个段寄存器,分别是干什么的?CS:代码段(存放代码段的段地址)DS:数据段(存放数据段的段地址)ES:附加数据段SS:堆栈段(存放堆栈段的段地址)FS:附加段GS:附加段


下图的EIP里面的值,是指向CPU当前执行的代码位置。
还有标志寄存器没有介绍,就是下图这个东西。我们通常看他们的值来控制跳转成功与否。


那他们8个又是干什么的?他们受到比较与运算的影响来变换数值,从而让跳转成功或失败。各种跳转成功或失败是参考那个值来判断的,请参考第一季第六集的附件,里面有超详细的解释。

他们分别是记录什么的?C:进位标志,记录运算结果的符号,结果为负数时则1,否则 0P:奇偶标志,用来为机器中传送信息时可能产生的代码出错情况听歌检验条件。当结果操作数中 1 的个数为偶数时置 1,否则置 0 A:FZ进位标志位Z:零标志,运算结果为 0 时 ZF 位置 1,否则置 0 S:符号标志,记录运算结果的符号,结果为负时置 1,否则置 0 T:中断允许标志位,由CLI,STI 两条指令来控制D:向量标志位,由CLD,STD两条指令来控制O:溢出标志,在操作数超出了计算能表示的范围称为溢出



然后我们说说“寻址”的那些事立即寻址,这种寻址方式下,操作数以常量的形式出现在指令中比如下图,JMP Shark恒.00513426意思是无条件跳转到内存00513426处,其中00513426是立即数。这叫做立即寻址。
存储器寻址分为直接寻址与间接寻址。直接寻址是带方括号的常量或是变量。DS是操作数默认的段寄存器。如下图所示,BA520073处的内容与ah寄存器相加后,结果给BA520073
寄存器间接寻址下图内容是DS为数据段段地址,edi寄存器的内容为偏移地址,与al做比较。
寄存器相对寻址什么是相对寻址? 就是在间接寻址的基础上和立即数做一个加法运算。请看下图
基址变址寻址也很容易理解,就是基址+变址在方括号里,如下图什么是基址,什么是变址,我们在刚才讲过了,可以向上看。
相对基址变址寻址这名字真长啊,不过也很好理解。还记得刚才的寄存器相对寻址吗?方括号内有个立即数与寄存器做加法,就叫寄存器相对寻址。如果没有立即数做加法,那就叫寄存器间接寻址。然后结合我们刚才的基址变址寻址,我们在与一个立即数做加法,请看下图。
前面2个寄存器相加,我们学过了,叫基址变址寻址,然后又加上一个立即数,我们管他叫“相对”,那3个在一起,就是“相对基址变址寻址”。


这一课先讲到这里,虽然枯燥但很有用,如果你学懂了这一课,你打开OD的时候,也许就不是那么朦朦胧胧了,好像近视眼戴上了眼镜一样。还是那句话,如果想成为大牛,那请认真学习这一课!考验你的时候到了!!!
我写汇编课程是因为我站在了新手的角度思考问题制作教程。如果不讲汇编,如果你们又没看过汇编课程。后面的东西看起来会很吃力,甚至完全看不懂了。
重要的汇编知识我正在教你,学不学就是你的事了。能不能成为大牛,就看现在谁能坚持下来了!




地球人类 发表于 2014-11-18 22:48

的确非常的枯燥,没有视频教程看的入神,不过真的很有用

sjw799206595 发表于 2014-11-18 23:43




初学者的福音谢谢 顶

guowei0422 发表于 2014-11-27 15:49

看了大半天,好像都没记住什么,还得努力学 啊

weiiewweiw 发表于 2014-12-26 16:31

后排学习中!~{:5_118:}{:5_117:}

luojianeng 发表于 2014-12-26 23:13

看完懂一点点,,,谢谢

防盗锁 发表于 2014-12-31 11:48

艾。。完全看不懂啊。头晕晕的。

(转)能不能成为大牛,就看现在谁能坚持下来了!

tyfjmll 发表于 2015-1-4 22:55

认真学习中

rango 发表于 2015-1-22 22:39

感谢楼主,继续学习中

hrf5692 发表于 2015-1-26 21:21

看不懂{:5_117:}再学习
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【S02E02】Shark恒 零基础逆向教程之图文!【走向大牛①】