OD的简单使用以及一个小程序的破解

OD的简单使用

    • 一、下载
    • 二、窗口
    • 三、调试
        • 打开方式
        • 调试中我们经常要用到的快捷键有这些:
    • 附:破解(绕过)一个CRACKME.EXE
        • 1、分析程序
        • 2、使用OD打开
        • 3、寻找 MessageBoxA()函数在何处被调用
        • 找到了 MessageBoxA()函数在何处被调用,如下图所示
        • 分析反汇编程序
        • 接下来是重点操作(思路)
        • 成功!!!!!
        • 另一种方法:直接修改程序汇编代码

从这这篇博客开始开一个新坑:reverse 的入门

OD(OllyDbg)和IDA Pro这两款工具分别是调试逆向的两款重要工具。虽然两者都兼容动态和静态的调试方式,但就动态调试而言,OD更为灵活和强大,而静态调试工具的王者理所应当是功能极为强大的IDA Pro。

一、下载

建议下载地址 https://down.52pojie.cn/Tools/Debuggers/

诸多款式,任君选择
OD的简单使用以及一个小程序的破解_第1张图片

二、窗口

OD的简单使用以及一个小程序的破解_第2张图片

反汇编窗口
显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。

寄存器窗口
显示当前所选线程的 CPU 寄存器内容。同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。

信息窗口
显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。

数据窗口
显示内存或文件的内容。右键菜单可用于切换显示方式。

堆栈窗口
显示当前线程的堆栈。

菜单窗口
顾名思义,一些命令以及操作、显示等都在这里。

命令行窗口
用来下断点等相关命令。

三、调试

打开方式

od开始调试方法一般有2种:
1.直接文件–打开(F3),进行调试
2.文件-附加 ,进行调试,附加必须是已经运行的程序才可以。

调试中我们经常要用到的快捷键有这些:

F2设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。

F8单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。

F7单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。

F9运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。

F4:运行到选定位置。作用就是直接运行到光标所在位置处暂停。

CTR+F9:执行到返回。此命令在执行到一个 ret (返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空。

ALT+F9:执行到用户代码。可用于从系统领空快速返回到我们调试的程序领空。

上面提到的几个快捷键对于一般的调试基本上已够用了。要开始调试只需设置好断点,找到你感兴趣的代码段再按 F8 或 F7 键来一条条分析指令功能就可以了

附:破解(绕过)一个CRACKME.EXE

1、分析程序

现在有一个 CRACKME.EXE 程序,将其打开出现如下

OD的简单使用以及一个小程序的破解_第3张图片
发现需要注册登录
OD的简单使用以及一个小程序的破解_第4张图片
输入一个不正确的用户名和密码

OD的简单使用以及一个小程序的破解_第5张图片
显示发生错误。判断此处有一个MessageBoxA();

关闭EXE文件

2、使用OD打开

OD的简单使用以及一个小程序的破解_第6张图片

3、寻找 MessageBoxA()函数在何处被调用

在命令行输入

bp MessageBoxA

bp即breakpoint缩写

OD的简单使用以及一个小程序的破解_第7张图片

F9运行
.exe文件运行
再次随意输入

OD的简单使用以及一个小程序的破解_第8张图片

注意断点处的变化
OD的简单使用以及一个小程序的破解_第9张图片

在堆栈区—>选中------>右键---->反汇编 ,找到该函数的反汇编代码
OD的简单使用以及一个小程序的破解_第10张图片

找到了 MessageBoxA()函数在何处被调用,如下图所示

OD的简单使用以及一个小程序的破解_第11张图片

分析反汇编程序

可以判断出[0040 1362]处为判断调用什么函数的入口
在 [0040 1362]处下断点,并禁掉原先的断点
OD的简单使用以及一个小程序的破解_第12张图片
OD的简单使用以及一个小程序的破解_第13张图片

再次运行程序

OD的简单使用以及一个小程序的破解_第14张图片

点击OK后,在此处停下
OD的简单使用以及一个小程序的破解_第15张图片

查看堆栈窗口,反汇编跟随(单步步入)

OD的简单使用以及一个小程序的破解_第16张图片

通过分析反汇编代码,发现程序做了一个比较[0040 1241]je跳转[0040 1243]

此时程序运行到了此行

 0040124A    jmp short CRACKME.004011E6

可以判断出

00401245     call CRACKME.00401362         调用的是输入错误的函数

                                           而

0040124C      call CRACKME.0040134D        调用的才是我们想要的函数


如下图所示
OD的简单使用以及一个小程序的破解_第17张图片

接下来是重点操作(思路)

1、如果修改ZF的值,那么就可以使程序可以跳转到第二个call中

2、我们可以在在[0040 1243] 处打断点,待到运行到此处时,修改ZF的值

打断点
OD的简单使用以及一个小程序的破解_第18张图片
梅开三度。。。
OD的简单使用以及一个小程序的破解_第19张图片
OD的简单使用以及一个小程序的破解_第20张图片

成功!!!!!

OD的简单使用以及一个小程序的破解_第21张图片

另一种方法:直接修改程序汇编代码

双击此行,进行修改
OD的简单使用以及一个小程序的破解_第22张图片
保存…
OD的简单使用以及一个小程序的破解_第23张图片

你可能感兴趣的:(reverse,的入门)