OD使用教程3(上) - 调试篇03
让编程改变世界
Change the world by program
OD使用教程3
亲爱的鱼油们:当您看到这教程的时候,小甲鱼做了两个非常艰难的决定。 决定一,我们的OllyDBG使用教程将进一步给大家解释所以然,因为市面上几乎所有的教程都是告诉你应该怎么做,但是没有告诉你为什么要这么做。很简单,因为要把原理层面说清楚,需要有大量的知识积累和时间来准备。 决定二,我们的OllyDBG使用教程将大量使用实例来进行破解和逆向分析,不再停留于理论层面。 最后,从这节课开始,鸡冻吧?! 大家先一起来看看今天准备上我们“砧板”的程序吧:
reverseMe.exe(reverse就是逆向的意思,一般程序用这样的名字意思就像美国西部故事片的女主角最喜欢的台词:fuck me的意思) 让我们废话少说,开刀吧! 这回我们边讲解会边给大家介绍一些必须必要掌握的内容,如果你听过小甲鱼的《零基础入门学习汇编语言》,那么你会觉得这些内容很熟悉,如果没有,我会大概快速讲讲。
关于寄存器
寄存器就好比是CPU身上的口袋,方便CPU随时从里边拿出需要的东西来使用。 今天的程序中我们涉及到九个寄存器: EAX:扩展累加寄存器 EBX:扩展基址寄存器 ECX:扩展计数寄存器 EDX:扩展数据寄存器 ESI:扩展来源寄存器 EDI:扩展目标寄存器 EBP:扩展基址指针寄存器 ESP:扩展堆栈指针寄存器 EIP:扩展的指令指针寄存器 这些寄存器的大小是32位(4个字节),他们可以容纳数据从0-FFFFFFFF(无符号数),除了以下三个寄存器,其他我们都可以随意使用: EBP:主要是用于栈和栈帧,由于刚开始接触,不用担心太多,小甲鱼会逐渐给你介绍的。 ESP:指向当前进程的栈空间地址。 EIP:总是指向下一条要被执行的指令。
关于栈
栈是在内存中的一部分,它有两个特殊的性质:
FILO(Fisrt In Last Out,先进后出)
地址反向增长(栈底为大地址,栈顶为小地址) [caption id="attachment_700" align="aligncenter" width="444"]
地址反向增长(栈底为大地址,栈顶为小地址)[/caption]
关于CALL指令
很多朋友都问过如何“找CALL”,但很遗憾,从没有朋友问过为什么要“找CALL”。 call XXX; 等于 push eip; 然后 jmp XXX;
call有以下几种方式:
call 404000h ;直接跳到函数或过程的地址 call eax ;函数或过程地址存放在eax call dword ptr [eax] [caption id="attachment_701" align="aligncenter" width="434"]
call dword prt[eax][/caption]call dword ptr [eax+5] [caption id="attachment_702" align="aligncenter" width="439"]
call dword prt[eax+5][/caption]call dword ptr [<&API>] ;执行一个系统API [buy]
获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LGMVAAMMNUXT']视频下载[/Downlink] [Downlink href='http://urlxf.qq.com/?FZnieua']备胎下载[/Downlink]