|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 shuiyu 于 2018-1-3 22:21 编辑
越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢
一、寄存器
(1)今天的程序中我们涉及到九个寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、EIP。
(2)这些寄存器的大小是32位(4个字节),他们可以容纳数据从0-FFFFFFFF(无符号数),除了以下三个寄存器,其他我们都可以随意使用:
EBP:主要是用于栈和栈帧。
ESP:指向当前进程的栈空间地址。
EIP:总是指向下一条要被执行的指令。
二、栈
(1)先进后出:可以想象成一个装羽毛球的羽毛球筒,只有一个出口,先放进去的肯定在最下面喽
(2)栈有两个基本的操作:入栈(push)和出栈(pop)。
入栈(push):将一个新的元素放到栈顶;
出栈(pop):从栈顶取出一个元素。
(3)出栈和入栈的执行步骤:(这是我按8086汇编推理的,不知道对不对 )
push指令的执行步骤:
1.ESP=ESP-4;
2.向ESS:ESP指向的字单元中送入数据。
pop指令的执行步骤:
1.从ESS:ESP指向的字单元中读取数据;
2.ESP=ESP+4。
(4)地址反向增长(栈顶为大地址,栈底为小地址),任意时刻,ESS:ESP指向栈顶元素。
三、关于CALL
(1)call XXX; 等于 push eip; 然后 jmp XXX.
(2)call有以下几种方式:
call 404000h ;直接跳到函数或过程的地址
call eax ;函数或过程地址存放在eax
call dword ptr [eax]
call dword ptr [eax+5]
call dword ptr [<&API>] ;执行一个系统API
四、关于mov指令
(1)mov指令格式: mov dest,src 即将src的内容拷贝到dest中。
(2)mov指令一共有以下几种扩展:
1.movs/movsb/movsw/movsd edi,esi 即这些变体按串/字节/字/双字为单位将esi寄存器指向的数据复制到edi寄存器指向的空间。
2.movsx符号为扩展(基于有符号数),byte->word,word->dword,(扩展后高位全用符号位填充,这样是确保取补码的值是一样的),然后实现mov。
3.movzx零扩展(基于无符号数),byte->word,word->dword,(扩展后高位全用0填充,这样就忽略了符号位),然后实现mov。
五、关于cmp指令
(1)cmp指令格式:cmp dest,src 为第一个操作减去第二个操作数,但不影响第两个操作数的值,并通过计算结果设置C/O/Z标志位。
(2)cmp指令大概有以下几种格式:
cmp eax,ebx 比较eax和ebx两个操作数
cmp eax,[404000] 将eax和404000地址处的dword型数据相比较
cmp [404000],eax 同上
六、关于标志位
(1)事实上所有的标志位归并于于一个32位的标志位寄存器,也就是说有32个不同的标志位。
(2)每个标志位有两个属性:为1或者为0,就相当于我们平时说的OK或者不OK。
(3)在逆向中我们只要注意三个标志位,也就是cmp指令能修改的那三个:Z/O/C
(4)
Z标志位(零标志位):这个标志位是最常用的,运算结果为0时,Z标志位为1,否则为0。
O标志位(溢出标志位):在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时O位为1,否则为0。(具体关于溢出可参考8086汇编的OF标志位)
C标志位(进位标志位):记录运算时从最高有效位产生的进位值。(具体可以参考8086汇编的CF标志位)
七、逻辑运算和test指令
(1)
逻辑与:and 两真才为真。
逻辑或:or 一真为真。
异或:xor 两个数不相同为1(真),相同为0(假)
取反:not 顾名思义真(1)为假(0),假(0)为真(1)
(2)test指令格式:test eax,eax 即对两个操作数进行按位‘与’运算,但不影响第两个操作数的值,并通过计算结果设置Z标志位。如果逻辑与运算结果为零,就把ZF(零标志)置1;反之为0。
八、关于条件跳转指令
(1)条件跳转指令,就是根据各种不同标志位的条件判断是否成立,条件成立则跳转。
(2)各种情况见下图:
九、关于补丁(patch)
(1)patch也就是我们平时所说的补丁。所谓给程序打补丁就是我们对程序破解所进行的修改,就是说像我们衣服破了,如果没有打过补丁,就会走光的意思。
(2)OD中可以点击快捷栏的 ” / “查看所有打过的补丁。
十、逆向算法实践
逆向成功,具体情况如下图:下了断点的是程序的大致算法模块。
逆向出它的大致算法:
谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢
|
|