鱼C论坛

 找回密码
 立即注册
查看: 1885|回复: 0

解密调试笔记3

[复制链接]
发表于 2020-4-15 11:46:37 | 显示全部楼层 |阅读模式

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

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

x
OD使用教程3

关于寄存器

寄存器就好比是CPU身上的口袋,方便CPU随时从里边拿出需要的东西来使用。今天的程序中我们涉及到九个寄存器:
- EAX:扩展累加寄存器
- EBX:扩展基址寄存器
- ECX:扩展计数寄存器
- EDX:扩展数据寄存器
- ESI:扩展来源寄存器
- EDI:扩展目标寄存器
- EBP:扩展基址指针寄存器
- ESP:扩展堆栈指针寄存器
- EIP:扩展的指令指针寄存器

这些寄存器的大小是32为(4个字节),他们可以容纳数据从0-FFFFFFFF(无符号数),除了一下三个寄存器,其他我们都可以随意使用:
- EBP:主要是用于栈和栈帖。
- ESP:指向当前进程的栈空间地址。
- EIP:总是指向下一条要被执行的指令。


call指令

call xxx;等于push eip;然后jmp xxx;

call有以下几种方式:
- call:404000h;直接跳到函数或过程的地址
- call eax;函数或过程地址存放在eax
- call dword ptr[eax]
- call dword ptr[eax+5]
- call dword ptr[<&API>];执行一个系统API


关于系统API

系统所提供的函数,所以要通过API才能实现对内核的操作;


关于mov指令

mov指令格式:mov dest,src
这是一个很容易理解的指令,mov指令将src的内容拷贝到dest,mov指令总共有以下几种扩展:

- movs/movsb/movsw/movsd edi,esi:这些变体按串/字节/字/双字为单位将esi寄存器指向的数据复制到edi寄存器指向的空间。
- movsx符号位扩展,byte->word,word->dword(扩展后高位全用符号位填充),然后实现mov。
- movzx零扩展,byte->word,word->dword(扩展后高位全用0填充),然后实现mov。


关于cmp指令

cmp指令格式:cmp dest,src
cmp指令比较dest和src两个操作数,并通过比较结果设置C/O/Z标志位。
cmp指令大概有以下几种格式:
- cmp eax,ebx;如果相等,Z标志位置1,否则0.
- cmp eax,[404000];将eax和404000地址处的dword型数据相比较并同上置位。
- cmp[404000],eax;同上。


标志位

事实上所有的标志位归并与一个32位的标志寄存器,也就是说有32个不同的标志位。
每个标志位有两个属性:置1或置0,就相当于我们平时说的ok或不ok。
在逆向中,只要修改cmp指令中的三个:Z/O/C。
- Z标志位(0标志),这个标志位是最常用的,运算结果为0时候,Z标志位置1,否则置0;
- O标志位(溢出标志),在运行过程中,如操作数超出了机器能表示的范围则成为溢出,此时OF位置1,否则置0;
- C标志位(进位标志),记录运算时从最高有效位产生的进位值。例如执行加法指令时,最高有效位有进位时置1,否则置0。


关于test指令

test指令格式:test dest,src
这个指令和and指令一样,对两个操作数进行安慰的‘与’运算,唯一不同之处是不将‘与’的结果保存到dest。
即本指令对两个操作数的内容均不进行修改,仅是在逻辑与操作后,对标志位重新置位。


关于条件跳转指令

条件跳转指令,就是根据各种不同标志位的条件判断是否成立,条件成立则跳转。
ja        CF=0 and ZF=0
jab        CF=0
jb        CF=0
jbe        CF=1
jc        CF=1
jcxz        CX=0
je        ZF=1
jecxz        ECX=0
jg        ZF=0 and SF=OF
jge        SF=OF
jl        SF!=OF
jle        ZF=1 and SF!=OF
jmp        无条件跳转
jna        CF=1 or ZF=1
jnae        CF=1
jnb        CF=0
jnbe        CF=0 and ZF=0
jnc         CF=0
jne         ZF=0
jng        ZF=1 or SF!=OF
jnge        SF!=OF
jnl        SF=OF
jnle        ZF=0 and SF=OF
jno        OF=0
jnp        PF=0
jns        SF=0
jnz        ZF=0
jo        OF=1
jp        PF=1
jpe        PF=1
jpo         PF=0
js        SF=1
jz        ZF=1

patch

patch也就是我们平时所说的补丁。
所谓给程序打补丁就是我们队程序破解所进行的修改。
ollyDBG的“/”可以查看所有打过的补丁。


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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