文章目录

  • 前言
  • OllyDbg
    • 基础介绍
    • 快捷操作
  • TraceMe
    • 调试分析
    • 破解校验
  • 总结

前言

OllyDbg 是一个新的动态追踪工具,是将 IDA 与 SoftICE 结合起来的产物,Ring3 级调试器,非常容易上手,另外由于 OllyDbg 是一个通用的 32 位汇编分析调试器且操作界面非常直观简单,己代替 SoftICE 成为当今最为流行的调试解密工具了。同时 OllyDbg 还支持插件扩展功能,是目前最强大的调试工具,OllyDbg中文官方网站。

OllyDbg

下面先简单介绍下 OllyDbg 这款工具的基本使用,OllyDbg下载地址(吾爱破解专用版)。

基础介绍

OllyDbg 的核心窗口如下:

简单解释一下各个窗口的功能:

窗口 功能
反汇编窗口 显示被调试程序的反汇编代码
寄存器窗口 显示当前所选线程的 CPU 寄存器内容
信息窗口 显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等
数据窗口 显示内存或文件的内容
堆栈窗口 显示当前线程的堆栈

OllyDbg 有两个关键的路径配置项目需要指定:

  • UDD 目录:其作用是保存你调试的工作,比如你调试一个软件,设置了断点,添加了注释,一次没做完,这时 OllyDBG
    就会把你所做的工作保存到这个 UDD 目录,以便你下次调试时可以继续以前的工作;

  • Plugin 插件目录:OllyDBG 支持插件功能,插件的安装也很简单,只要把下载的插件(一般是个 DLL 文件)复制到 OllyDBG 安装目录下的 PLUGIN 目录中就可以了,OllyDBG 启动时会自动识别。

配置页面如下图所示:

快捷操作

OllyDbg 的核心快捷键:

快捷键 备注
F2:设置断点 只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点
F8:单步步过 每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码
F7:单步步入 功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上
F4:运行到选定位置 作用就是直接运行到光标所在位置处暂停
F9:运行 按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行
CTRL+F9:执行到返回 此命令在执行到一个 ret (返回指令)指令时暂停,可用于快速定位到当前 CALL 所调用函数的末端位置
Alt+b:打开断点编辑器 可查看、编辑所有下过的断点
Alt+F9:执行到用户代码 如果跟进系统DLL提供的API函数中,此时想返回到应用程序领空里,可用该快捷键执行返回到用户代码命令

OllyDbg 的其他介绍和使用方法此处不再展开,有兴趣可学习一下 OllyDbg 的教程(B站视频):动态调试工具之OllyDbg(OD)教程。

TraceMe

本文所要演示的 TraceMe.exe 程序,来自段钢的《加密与解密》一书中的示例程序,程序下载地址。

程序的大致运行流程如下:

下文的目的是借助 OllyDbg 对程序的逻辑进行分析并尝试破解序列号校验(类似于软件破解)。

调试分析

1、使用 OllyDbg 打开 TraceMe.exe 程序,程序将自动暂停在 WinMain() 函数入口点( 该函数是 32 位应用程序开始执行时的入口点),点击如下按钮或者 F9 开始运行程序:
2、从工具栏的插件选项中打开 “API断点设置工具”,尝试勾选常见的的文本框数值获取的函数 “GetDlgItemTextA”,点击确定后程序将自动在程序中调用了该函数的位置设置断点:
3、接着任意输入用户名和序列号,点击 check 按钮,发现程序暂停到 上述设置的调用函数 “GetDlgItemTextA” 的地址处:4、按快捷键 Ctrl+F9,使程序快速执行到函数 “GetDlgItemTextA” 的末尾 ret 返回指令处暂停(结合堆栈窗口的信息,猜测本次函数调用仅获取了用户名 “11111”):
5、接着按 F8 单步步过,程序将返回至原先调用了该 “GetDlgItemTextA” 函数的程序位置处(结合汇编代码、注释栏目的信息可确认确实调用了两次获取控件值的参数):
6、继续按 F8 单步步过,直到 CALL 指令处,程序已经搜集完用户输入的用户名和序列号,同时在该位置将两个值压入栈中,猜测此处正式调用了判断序列号是否有效的核心逻辑函数:
7、按 F7 单步步入,跳转并查看被调用的函数的内部逻辑:
F8 单步步过,运行到该函数末尾,注意到栈中原来存储用户名的变量值发生了改变(同时请留意下 EAX 寄存器的值均为 0):
8、继续 F8,返回程序程序原来的运行位置,发现后面即将紧接着执行 test 判断指令( 汇编语言的 test 指令是测试指令,用于测试某些位是否为0,执行的是与运算,并且会将 CF 和 OF 置 0,并且影响 SF、ZF,若测试的位均为 0,则 SF=0、ZF=1),同时紧跟着执行了 je 判断跳转指令( je 指令即 Jump if Equals,在 ZF 被置位时跳转):
继续 F8,在 je 指令的汇编代码行处可以添加注释“疑似关键跳转”:
9、继续 F8,进行跳转,发现信息窗口已经开始提示序列号错误:

10、直接 F9 放行程序,弹窗提示序列号错误:

破解校验

通过上述调试分析,基本上可以判定 004011F5 地址处的关键跳转指令将直接影响程序进行序列号校验的运行结果,下面尝试通过 OllyDbg 对运行结果进行断点拦截和篡改,从而绕过序列号校验。

1、既然 je 指令对 ZF 标志位的值进行了判断,可以在 je 指令处设置断点,重新运行程序并输入错误的用户名密码,然后篡改 ZF 标志位的值(由 1 改为 0):
2、接着放行程序,奇迹就此诞生,成功破解:

程序篡改

问题来了:上述通过篡改程序运行过程中寄存器的值的方式不太方便,你总不能每次运行该程序都打开 OllyDbg 进行动态调试篡改吧?那么,能不能一步到位,永久实现破解,每次都开该程序都能自动绕过序列号校验呢?答案当然是可以,但是方法不是该寄存器标志位的值,而是该程序的汇编代码了(即 je 汇编指令),下面进行演示。

1、双击 je 指令处的汇编代码,将 je 修改为 jne 指令:
2、选中修改的这一条汇编指令(上下多选中几条也没关系),右键选择保存到可执行程序:
3、在弹出的新窗口继续右键选择“Save File”选项,将修改后的程序另存为 TrcaeMeHack.exe 文件:
4、随后运行篡改并保存的 TrcaeMeHack.exe 文件,随意输入用户名和序列号,发现均可绕过序列号校验:

至此,整个程序的破解工作已完成!

总结

本文介绍了 OllyDbg 调试工具的使用,并借助 TraceMe.exe 测试程序对其进行调试并成功破解其序列号校验。由于侧重介绍 OllyDbg 的使用和对程序的猜解思路,故调试过程中没深究与分析程序的校验逻辑,关于程序的逆向分析与破解脚本编写可参见:TraceMe注册机编写 与 OD工具使用-逆向TraceMe.exe。

同时可以看到,OllyDbg 的动态调试功能与作用,跟上一篇文章 GDB动态调试攻防世界Simple-Check-100 介绍的 Linux 下的动态调试工具 GDB 属于异曲同工!

OllyDbg动态调试与逆向破解TraceMe.exe相关推荐

  1. [课业] | 软件安全 | 使用OllyDbg破解TraceMe.exe程序

    文章目录 实验流程 1. 调试分析 2. 破解校验 参考内容 实验流程 1. 调试分析 下载并解压OllyDbg 配置调试项目信息存储位置以及OD插件本地存储位置 运行程序,弹出用户名和序列号界面,这 ...

  2. [系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  3. IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总

    IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总 ********************************** 案例一: 使用IDA PRO+OllyDbg+PEview 追踪w ...

  4. 软件安全 实验 2 软件动态、静态分析技术 TraceMe.exe OllyDbg IDA

    实验 2 软件动态.静态分析技术 练习 1 动态调试技术 1.实验说明 动态分析是在可控环境中运行程序或者模拟程序的执行过程,同时利用分 析工具,监控程序的所有操作,观察其执行流程和状态,获取执行过程 ...

  5. 《教我兄弟学Android逆向11 动态调试init_array》

    上一篇 <教我兄弟学Android逆向10 静态分析反调试apk>我带你用jeb+IDA静态分析了反调试apk,并且了解了init_array和jnionload的执行顺序 通过静态pat ...

  6. 第50篇:使用OD逆向破解流光Fluxay扫描器各种限制(怀旧)

     Part1 前言  大家好,我是ABC_123,最近在整理之前用过的工具,发现了大学时期曾经用过的小榕写的扫描器"流光Fluxay",一晃15年过去了,这个工具当年在国外的名气也 ...

  7. [网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步.前文分享了外部威胁防护和勒索病毒对抗.这篇文章将讲解逆向分析OllyDbg动态调试 ...

  8. Android逆向之旅---动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前说的主要采用的是静态方式,步骤也很简单,首先使用apktool来反编译apk,得到smail源码,然后分析smail代码,采用代码 ...

  9. OllyDbg操作——TraceMe.exe调试

    版本:OllyDbg v1.10 下载地址:http://www.ollydbg.de/ TraceMe.exe 下载地址:http://download.csdn.net/download/situ ...

最新文章

  1. java,将Image变量保存成图片
  2. Python3之字符串格式化format函数详解(下)
  3. Cocos2d-x之Sprite
  4. Vue实现仿音乐播放器7-实现音乐榜单效果
  5. 5.8 正则化和数据标准化
  6. 如何在Google文档中的图片周围换行
  7. 前端学习(2374):技术栈的使用
  8. iOS中的异步和多线程概况
  9. Django外键关系:一对一、一对多,多对多
  10. MapReducer随笔小记
  11. 全球地名中英文对照表(S)
  12. 超强 | 保险单据在线OCR,秒速识别保单信息
  13. js一键批量打印_JS 实现选中内容批量打印/导出
  14. FPGA实现对数log2和10*log10
  15. 再见了,我的黄色文件夹(内置福利)
  16. vue 中的el表达式_解释el页面数据表达式
  17. 【开发工具】【windows】Visual Studio Code(VS Code)常用插件
  18. apache和php的安装配置
  19. vector BLF 文件读写
  20. KNN算法(二) sklearn KNN实践

热门文章

  1. 19C环境ORA-01035登陆报错处理
  2. 做玫瑰花的方法 用纸_用纸折玫瑰花步骤图
  3. 组队学习可汗学院统计学1
  4. 万福之地——和珅恭王府蝙蝠纹样解读…
  5. vlookup反向查询_VLOOKUP的反向查找功能
  6. BIOS 启动类型:Legacy+UEFI、UEFI BOOT、Legacy BOOT
  7. QT五子棋游戏课设及源码(连接mysql数据库含打开并运行程序的教程)
  8. 4台机器完全分布式安装hadoop,bigbrother的补充
  9. 北斗系统基础知识1(北斗系统定位原理说明“图文详述”)
  10. 重构家用电器产业价值,S2B2C供应链系统模式助力企业拓展市场新空间