鱼C论坛

 找回密码
 立即注册
查看: 3781|回复: 1

[学习笔记] 《解密系列-调试篇》第三讲:OD使用教程3

[复制链接]
发表于 2018-1-2 17:50:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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)各种情况见下图:
1.PNG

九、关于补丁(patch)
(1)patch也就是我们平时所说的补丁。所谓给程序打补丁就是我们对程序破解所进行的修改,就是说像我们衣服破了,如果没有打过补丁,就会走光的意思。
(2)OD中可以点击快捷栏的 ” / “查看所有打过的补丁。

十、逆向算法实践
逆向成功,具体情况如下图:下了断点的是程序的大致算法模块。
2.PNG
逆向出它的大致算法:
3.PNG


谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-31 20:44:15 From FishC Mobile | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表