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

OD界面介绍

1.分析TraceMe.exe

界面

功能:验证序列号是否正确

验证流程:
输入用户名和序列号–>调用GetDlgItemTextA函数(获取对话框文本)–>计算序列号–>调用lstrcmp函数(将计算结果与用户输入作比较)–>正确/错误

2.加载前设置
菜单Options/Debugging options/Event
设置暂停点:主模块(文件)的入口点。

3.加载.exe到OD
方法一:直接加载
菜单File/Open,或快捷键F3 (支持带参数打开:打开对话框中Arguments栏中输入参数行)
实际是调用CreateProcess创建一个用来调试的进程

方法二:附加,即调试正在运行的程序
菜单File/Attach,选中进程即可
若是隐藏进程,获得隐藏进程的pid,在控制台 C:\OllyDbg.exe -p pid值

4.快捷键
F8单步执行,跳过CALL和LOOP
F7单步执行,跟进CALL和LOOP
Ctrl+F9,跳出CALL调用的函数
Alt+F9,跳出系统API函数
F9,程序运行
F12,暂停程序(进入死循环时)
F4,执行到光标所在的行

F2设置断点(双击Hex dump也可)
Alt+B打开断点窗口,管理断点

反汇编面板:Ctrl+G查找.test区块中expression–>双击修改指令
数据面板:Ctrl+G查找.data区块中expression–>选中数据,Binary–>Edit修改十六进制数或字符串(字符串要以00h结尾)

5.调试
1、加载后,目标程序会暂停在Ntdll.dll的DbgBreakPoint处,按一下F9让程序继续运行。
(Ntdll.dll:Windows系统从ring3到ring0的入口,win32 API 最终都是调用ntdll.dll中的函数实现的)

2、找到GetDlgItemTextA(在Address栏),设置断点
注:鼠标点击选中反汇编面板
方法一:直接查找:Ctrl + G -->输入函数名
(因为事先不知道程序具体调用了什么函数,所以要多试几次,找到相应的函数)

方法二:输入表查找:Ctrl+N -->在name栏找到函数名

3、输入用户名和序列号,点击check,程序中断。

4.分析
Comment栏,即注释,很详细

GetDlgItemTextA的四个参数:对话框句柄,控件标识(ID号),缓冲区指针,缓冲区最大字符数
(参考Win32.API手册,搞清定义中参数)
(标准调用约定:从右到左顺序入栈(push),被调用者清理栈中参数,返回值放在eax中)
(C调用约定:从右到左顺序入栈,由调用者清理栈中参数)

按F8单步执行,GetDlgItemTextA执行之后,数据窗口显示读入了输入的用户名和序列号

找到序列号判断的关键代码,发现只要4011F5一句不跳转就可注册成功。

5.爆破(或补丁patch)
即屏蔽程序的某些功能,或改变程序流程,使程序的保护方式失效。

修改方法一:改变标志寄存器的值
执行到4011F5行,在寄存器面板中找到寄存器ZF,双击一次取反,由1变0或由0变1

修改方法二:改变汇编代码
选中4011F5行,双击,输入指令“NOP”

目前修改是内存中数据,选中修改过的代码–>右键–>Copy to executable–>Selection–>Save File,把修改复制到.exe 文件中

6.找到正确序列号
加载TraceMe之后运行,输入pediy和假序列号“121212”,跳出错误提示框。
M(内存窗口)–>最上一行Ctrl+B搜索框–>Ascll输入121212定位–>在其前后位置找到正确序列号2470

(根据数据约束性,即密码相邻性)

6.制作注册机
方法一:用Keymake软件(针对序列号在内存中是明码的)
在指定位置拦截程序指令,将内存或寄存器的值读出来,得到正确序列号
第一次拦截处:
.text:004011E5 E8 56 01 00 00 call sub_401340
第二次拦截处:
.text:0040138D 55 push ebp ; lpString2

Keymate设置如下:其他–>内存注册机–>生成注册机和原程序放在一个目录下

方法二:内存注册机

常用断点

  1. INT 3断点,即用CC指令(机器码是CCh),替换原来的指令。调试器捕捉到CC指令就停在断点处。
    快捷键F2,或双击Hex dump
    好处:可同时设多个断点;
    缺点:易被检测(因为修改了原指令),检测API地址的第一个字节,若是CCh,则认为被下断。
    若要躲过检测,只要将断点下在函数内部(例如,函数入口的下一行)即可。

2.硬件断点
利用DRx调试寄存器。DR0~DR3放断点的地址,DR7设定相应的控制位。当运行到相应地址时中断。
右键–>Breakpoint–>Hardware设置断点;菜单Debug–>Hardware breakpoints–>Delete删除断点
优点:速度快,不易被检测
缺点:最多只能4个断点

3.内存断点
对所设的地址设为不可访问/不可写,当访问/写入时中断。
右键–>Breakpoint–>Memory设置断点;右键–>Breakpoint–>Remove memory breakpoint删除断点
优点:不易被检测,当硬件断点失灵时,用它来替代
缺点:降低OD速度。

4.内存访问一次性断点
一次性,即中断发生后,断点就被删除。
M(memory map)–>找到相应的内存段–>Set break-on-access
优点:脱壳时特别有用

5.消息断点
当用户点击一个按钮。移动鼠标或向文本框输入文字时,会发送消息到当前窗体。当窗体接收到特定消息时程序中断。
W(Windows)–>找相关参数:句柄(Handle)、ID等–>右键–>Message breakpoint on ClassProc–>Messages设置消息种类,即设置中断;Alt+B断点窗口,删除中断。

6.条件中断
断点满足一定条件时才中断,是一个带有条件表达式的 INT 3 断点。
右键–>Breakpoint–>Conditional

7.条件记录断点
有条件断点的作用,还能记录断点处 函数表达式的值、参数的值、断点的次数等。
右键–>Breakpoint–>Conditional log–>输入条件和表达式,设置断点

OllyDbg操作——TraceMe.exe调试相关推荐

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

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

  2. OllyDbg动态调试与逆向破解TraceMe.exe

    文章目录 前言 OllyDbg 基础介绍 快捷操作 TraceMe 调试分析 破解校验 总结 前言 OllyDbg 是一个新的动态追踪工具,是将 IDA 与 SoftICE 结合起来的产物,Ring3 ...

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

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

  4. TraceMe.exe注册码破解及注册机编写

    一.追注册码步骤解析 打开OllyDbg反汇编软件,对实验程序TraceMe.exe进行反汇编. 点击View-Executable modules查看可执行模块,在新窗口中右击,选择Show nam ...

  5. 使用Mdbg.exe 调试.Net 程序

    Windows SDK 里面的Mdbg.exe 是一个命令行的CLR调试工具,在没有VS的情况下,可以较为方便调试. 下面演示一下如何使用这个工具 调试 一个winform 应用程序:MemLeakP ...

  6. ollydbg,ring3级别的调试软件

    ollydbg,ring3级别的调试软件.基本上,调试自己的程序因为有源码,一般用vc,破解别人的程序用ollydbg,而调试驱动可用softice,这个原则虽不绝对,但在大多数情况下是行得通的.以下 ...

  7. OllyDbg笔记-暴力破解简单判断程序(TraceMe.exe与简单Qt程序)

    目录 基本概念 代码与实例 打包下载 基本概念 分析一个程序,用什么API函数作为切入点十分关键. 设置OllyDbg中断在程序的入口: System breakpoint:系统断点,OllyDbg用 ...

  8. OllyDbg笔记-软件逆向调试技巧

    在某些收费软件中,有些是通过注册表,来判断是不是使用到期,或者次数到了. OllyDBG从原理上来区分,有两种不同的断点:软件断点和硬件断点. 软件断点就是常说的F12. 而硬件断点它们只用于调试:用 ...

  9. ffmpeg.c(ffmpeg.exe)调试笔记一

    调试参数: ffmpeg -ss 00:00:00 -i D:\media\Linux.mpg -vcodec copy -acodec copy -t 00:01:00 C:\Users\a\Des ...

最新文章

  1. raymarching算法
  2. Meavn 搭建项目遇到Error creating bean with name 'sessionFactory' defined in class path resource...
  3. Linux线程——线程同步
  4. 如何在CRM WebClient UI里打开外部链接
  5. lambda中orElse(null)使用
  6. php界面设置编码格式,php设置编码格式的方法
  7. escape mysql_mysql_escape_string()函数用法分析
  8. 并发和并行的区别简单介绍
  9. 探讨 | 深入探讨Redis管道
  10. C# 很基础的那些东西
  11. 使用Java FXGL构建太空游侠游戏
  12. matlab中fft定点运算,可用于嵌入式计算的定点FFT算法 (转载)
  13. 【AI视野·今日CV 计算机视觉论文速览 第224期】Tue, 22 Jun 2021
  14. 测试开发面试题(一)-----appium相关
  15. 电子文档迎接“双轨制”
  16. 线性代数中满足乘法交换律的运算-行列式与迹
  17. 论文阅读笔记- Dremel
  18. 学计算机买笔记本是i5 i7,为什么懂电脑的人选择买i5处理器, 而不是i7, 背后是什么原因?...
  19. java保存cookie在本地_Java保存Cookie
  20. Android开发艺术探索完结篇——天道酬勤

热门文章

  1. java公交查询系统开题报告_毕业设计论文-基于JAVA的公交查询系统的设计与实现.doc...
  2. vuforia ar unity 案例从零制作 三 番外 假如想在一个程序扫描多个图片,出现不同模型
  3. 假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用直写(Write Throght)方式,则能存放32K字数据的cache的总容量
  4. EOS智能合约开发(十八)从EOS数据分析history_plugin插件和mongo_db_plugin插件区别级EOS网络MongoDB配置
  5. 如何成为一名技术专家
  6. [收藏] FC交换机基础知识详解
  7. VSG中的虚拟调速器和无功-电压调节
  8. 总结--红蓝对抗中的蓝队。
  9. xbee模块和单片机_基于XBee进行ZigBee组网
  10. 场景金融丨对话:走中国特色的开放银行之路