工具介绍 OllyDbg调试器什么是OllyDbg?OllyDbg简称OD,是一款具有可视化界面的用户模式调试器,结合了动态调试和静态分析,具有强大的反汇编引擎,能够识别数千个被C和Windows所使用的函数,并能将其参数注释出,能自动分析函数过程、循环语句、代码中的字符串等显示被调试程序的反汇编代显示被调试程序的反汇编代码码显示当前所选线程显示当前所选线程的的 CPU 寄存器内寄存器内容 显示反汇编窗口中选中的第一显示反汇编窗口中选中的第一个命令的参数及一些跳转目标个命令的参数及一些跳转目标地址、字串等地址、字串等 显示内存或文件的内容显示当前线程的堆栈显示当前线程的堆栈 反汇编窗口的列中,双击的效果反汇编窗口的列中,双击的效果:• 地址列:显示相对被单击地址的地址,再次地址列:显示相对被单击地址的地址,再次 双击返回到标准地址模式;双击返回到标准地址模式;• Hex数据列:设置或取消无条件断点,对应数据列:设置或取消无条件断点,对应的快捷键是的快捷键是F2键;键;• 反汇编列:调用汇编器,可直接修改汇编代反汇编列:调用汇编器,可直接修改汇编代码;码;• 注释列:允许增加或编辑注释,对应快捷键注释列:允许增加或编辑注释,对应快捷键是是“;;“键键调试中我们经常要用到的快捷键有这些:调试中我们经常要用到的快捷键有这些:F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点F8:单步步过。
每按一次这个键执行一条反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码F7:单步步入功能同单步步过(F8)类似,区别是遇到CALL等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上F4:运行到选定位置作用就是直接运行到光标所在位置处暂停F9:运行按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行CTR+F9:执行到返回此命令在执行到一个ret(返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空ALT+F9:执行到用户代码可用于从系统领空快速返回到我们调试的程序领空如何加载程序?如何加载程序?• 点击菜单点击菜单 文件文件->->打开打开 (快捷键是(快捷键是 F3F3)来打)来打开一个可执行文件进行调试开一个可执行文件进行调试 • 点击菜单点击菜单 文件文件->->附加附加 来附加一个已运行的来附加一个已运行的进程上进行调试注意这里要附加的程序必须已进程上进行调试注意这里要附加的程序必须已运行 基本操作:基本操作:1 1、准备工作、准备工作 我们以我们以TracemeTraceme这个软件为例,了解这个软件为例,了解TracemeTraceme序列号的验证流程序列号的验证流程2、加载目标文件调试、加载目标文件调试运运行行OllyDbgOllyDbg后,打后,打开开选项选项/ /调试设调试设置置程序运行之后,在系统程序运行之后,在系统空间里会触发一个空间里会触发一个INT3INT3文件入口点文件入口点程序的程序的WinmainWinmain()函数入口点,()函数入口点,但一般都是在文件入口点但一般都是在文件入口点设置完成之后,载入文件,出现如图所示:设置完成之后,载入文件,出现如图所示:虚拟地址机器码:机器码: CPUCPU执行的机器执行的机器代码代码汇编指令:汇编指令:和机器码对应的和机器码对应的程序代码程序代码3、单步跟踪调试器一个最基本功能就是动态跟踪,调试器一个最基本功能就是动态跟踪,OllyDbgOllyDbg单步跟踪功能键:单步跟踪功能键:F7F7与与F8F8的区别:在遇到的区别:在遇到CALLCALL时,时,F8F8会直接跳过,而会直接跳过,而F7F7就跟进去就跟进去4 4、设置断点、设置断点断点是调试器的一个重要功能,它能使程序中断在需要的断点是调试器的一个重要功能,它能使程序中断在需要的地方,从而方便对其分析,常用的断点是地方,从而方便对其分析,常用的断点是INT3INT3,其原理是,其原理是OllyDbgOllyDbg将断点处的代码设置为将断点处的代码设置为int3int3指令。
指令方法:将光标移动到要设断点的行,按方法:将光标移动到要设断点的行,按F2F2键就可以设置键就可以设置 了,了,也可以双击也可以双击HexHex数据列数据列目的:可以让软件运行的时候停在设断点的地方,以方便目的:可以让软件运行的时候停在设断点的地方,以方便反复跟踪调试反复跟踪调试当关闭程序时,当关闭程序时,OllyDbgOllyDbg会将设置好的断点保存在会将设置好的断点保存在UDDUDD文件文件中,下次运行时还有效中,下次运行时还有效5 5、、调试调试分析:分析:调试分析其实就是分析程序代码的意义,如图:阅读这些代码时,首先要搞清楚各阅读这些代码时,首先要搞清楚各APIAPI函数的定义,还弄明白函数的定义,还弄明白那些汇编程序代码的具体含义那些汇编程序代码的具体含义6 6、保存修改后的文件、保存修改后的文件图中红色的就是我们修改的地方,然后就点右键,复制到图中红色的就是我们修改的地方,然后就点右键,复制到文件,就可以保存当前的修改文件,就可以保存当前的修改我们现在来举个简答你的例子破解破解TraceMeTraceMe的注册码的注册码操作步骤如图:首先当然要载入首先当然要载入TraceMeTraceMe,载入之后就会出现如下窗口,载入之后就会出现如下窗口文件入口点文件入口点然后我们要找到然后我们要找到GetDlgItemTextAGetDlgItemTextA函数,因为程序从文本框函数,因为程序从文本框中将内容读取出来,需要用到这个函数。
我们就用中将内容读取出来,需要用到这个函数我们就用Ctrl+GCtrl+G打开跟随表达式的窗口,在里面输入函数名就可以跟踪到打开跟随表达式的窗口,在里面输入函数名就可以跟踪到函数名存在的地方函数名存在的地方注意:注意:此时的领空是模块此时的领空是模块USER32,领空就是在,领空就是在某一时刻,某一时刻,CPU的的CS:EIP所指向代码的所有者所指向代码的所有者领空领空接着,在接着,在USER32USER32的领空中,在的领空中,在77D6B05E77D6B05E代码行按下代码行按下F2F2,下断,下断点,然后按点,然后按F9F9运行运行, ,然后键入下图所示:然后键入下图所示:点点checkcheck,可以看到程序被,可以看到程序被ODOD截停在下断点的地方,如图所示:截停在下断点的地方,如图所示:接着,按接着,按Alt+F9Alt+F9,返回到用户代码,可以回到:,返回到用户代码,可以回到:注意:注意:这里又回到这里又回到TraceMe的领空了的领空了我们可以按我们可以按Alt+B调出断点窗口,然后将调出断点窗口,然后将GetDlgItemTextA的断点改为已禁止的断点改为已禁止接下来就在接下来就在004011AE004011AE下一个断点下一个断点, ,因为这里有调用到因为这里有调用到GetDlgItemTextAGetDlgItemTextA这个函数这个函数然后就要开始分析这些汇编代码的意义,所以,我们在使然后就要开始分析这些汇编代码的意义,所以,我们在使用这个软件的时候,一定要明白这些代码的含义,现在我用这个软件的时候,一定要明白这些代码的含义,现在我们只是先认识一下这个软件的作用,所以就不为大家做出们只是先认识一下这个软件的作用,所以就不为大家做出分析,接下来就是修改代码了。
其实我们要是分析下来,分析,接下来就是修改代码了其实我们要是分析下来,可以发现,其实问题就在于一个代码行可以发现,其实问题就在于一个代码行--004011F5修改这一反汇编代码段,双击反汇编列后者按空格键,修改这一反汇编代码段,双击反汇编列后者按空格键,键入键入NOP,点汇编,点汇编最后最后 F9运行,你会看到:运行,你会看到:下面就介绍一些分析常用的汇编代码含义:下面就介绍一些分析常用的汇编代码含义:MOV 传送字或字节传送字或字节 如如MOV A B,就是将,就是将B中的字传给中的字传给APUSH 把字压入堆栈把字压入堆栈 CALL 子程序调用指令子程序调用指令 XOR 异或运算异或运算 所谓异或,就是两值不同,则为真,反之,为假所谓异或,就是两值不同,则为真,反之,为假RET 子程序返回指令子程序返回指令 CMP 比较比较.(两操作数作减法两操作数作减法,仅修改标志位仅修改标志位,不回送结果不回送结果)JNZ(或或jNE) OPR --------------结果不为零转移结果不为零转移,测试条件测试条件ZF=0 DEC 减减 1 INC 加加 1JZ(或或jE) OPR---------------结果为零转移结果为零转移, 测试条件测试条件ZF=1 SUB 减法减法 LEA 装入有效地址装入有效地址 例例: LEA DX,string ;把偏移地址存到把偏移地址存到DX. MOVSX 先符号扩展先符号扩展,再传送再传送REP 当当CX/ECX0时重复时重复 AND 与运算与运算 TEST 测试测试.(两操作数作与运算两操作数作与运算,仅修改标志位仅修改标志位,不回送结果不回送结果)上面是我的总结,大家可以大致的了解一下,有什么上面是我的总结,大家可以大致的了解一下,有什么不清楚的地方,可以过来跟我交流。
共享的文件里面不清楚的地方,可以过来跟我交流共享的文件里面还有教程,大家可以根据里面的教程,做更深入的学还有教程,大家可以根据里面的教程,做更深入的学习还有很多汇编代码的含义没有介绍,共享文件里习还有很多汇编代码的含义没有介绍,共享文件里面有完备的代码解释,可以好好看看,参考参考面有完备的代码解释,可以好好看看,参考参考22 以上有不当之处,请大家给与批评指正,以上有不当之处,请大家给与批评指正,谢谢大家!谢谢大家!。