解密系列之OD使用教程17——inline patch

程序:ReverseMe. NAGs.exe
新内容:硬件断点
用PEID打开,看到程序是用VC6.0写的,用OD载入,按F9运行后,出现NAG窗口,在OD中按下暂停,再打开堆栈窗口

如上图高亮行正是调用NAG窗口的call,双击来到反汇编窗口并下断

重新运行程序,发现程序的3个窗口都是对话框,且都来自这个call,因此不能直接将该指令NOP掉。继续往上浏览,发现有je跳转语句,只要让第1次和第3次跳转实现,第2次跳转不实现即可。

在数据段00445E80的位置定义个变量作为计数器,在这个字节下硬件写入断点进行测试,看程序在运行过程中有没有改动该地址处的内容,发现程序并不会修改,可行。在该跳转指令下断,在00437D70地址处添加个书签,方便来回查看。但此处直接用NonaWrite 1.2插件进行修改,打开插件,输入

0x437D70:
inc byte ptr [445E80]
cmp byte ptr [445E80],2
jnz 004203BA
lea ecx,dword ptr [esp+4C]
jmp 42037F

然后点击“汇编”按钮即可修改完成。

再讲该条指令修改如下

进行保存到文件即可。

解密系列之OD使用教程18

程序:Urlegal.exe
新工具:FishcOD、eXeScope.exe(可进行资源的修改)
首先安装程序,再用eXeScope载入程序

得到退出时弹出的NAG窗口的模板名103(0x07),由以下2个函数可知

HWND DialogBoxParam (HINSTANCE hlnstance, LPCTSTR IpTemplateName, HWND hWndParent, DLGPROC IPDialogFunc, LPARAM dwlnitParam);
HWND CreateDialogParam (HINSTANCE hlnstancem, LPCTSTR IpTemplateName, HWND hWndParent, DLGPROCIpDialogFunc,  LPARAM dwlniParam);

在OD里查找push 0x67

往上查看,这个过程并不是破解的关键,因为没有关键跳转,因此回溯到调用该过程的位置,由提示窗口

转到调用处,查看

如上图注释所示,在关键call下断并重新运行程序,跟进发现该过程非常短,猜测可能是程序验证是否注册的过程,在开始处下断,重新运行程序;如果是的话,程序运行开始就会执行该过程以检测是否注册。

如猜测,程序运行后在此断下,现在只需要将eax的值修改为1即可,但仅修改

00403E22  |.  8B40 2C       mov eax,dword ptr ds:[eax+0x2C]

这条指令的话,将覆盖掉后面的一条指令,因此可以直接同时修改2条指令

00403E1F  |.  8B45 FC       mov eax,[local.1]
00403E22  |.  8B40 2C       mov eax,dword ptr ds:[eax+0x2C]

修改后保存到可执行文件,运行测试,发现注册按钮已经变成灰色,点击关闭按钮也不会弹出NAG窗口。

解密系列之OD使用教程19

程序:movgear.exe
运行程序,点关闭按钮后,弹出NAG窗口,出现试用还剩30天等信息。同上一节课所讲,用eXeScope载入程序,找到该NAG窗口的模板名为100(0x64),用OD载入,查找push 0x64指令。

在每个命令下断,如上,运行程序并关闭后断下的地方才是我们关注的地方,地址为00406725,删掉其他断点;往上浏览程序,发现有关键跳转和call。

在该call和跳转处下断,重新运行程序并关闭,断下,跟进

RegOpenKeyEx:打开注册表的键值。

0043168A  |.  8D5424 14     lea edx,dword ptr ss:[esp+0x14]
LONG RegQueryValueEx(HKEY  hKey, // handle of key to query LPTSTR  lpszValueName,    // address of name of value to query LPDWORD  lpdwReserved, // reserved LPDWORD  lpdwType,  // address of buffer for value type LPBYTE  lpbData,    // address of data buffer LPDWORD  lpcbData     // address of data buffer size );

edx为倒数第2个参数,指向数据缓冲区。继续往下浏览程序,发现在获取了注册表信息后,可能将用户名和密码压栈,然后调用关键call进行检测

最后,如果验证失败的话,会跳到过程的结尾

观察程序,eax的值最终来源于ebx,因此可将该指令
mov eax,ebx修改为mov eax,1
但是经测试,这样修改会覆盖后面的指令,因此可修改为
mov al, 1即可爆破。

解密系列之OD使用教程20

程序:KeygenMe.exe
DialogBoxes类型常用APIs(通常在注册界面获取)

DialogBoxParamA
GetDlgItem
GetDlgItemInt
GetDlgItemTextA
GetWindowTextA
GetWindowLong

该程序是一个注册机程序,用的是GetDlgItemTextA来获取输入的文本,用OD载入,键入命令 bp GetDlgItemTextA下断,输入用户名、密码:Ontrd、1234567,点击Check,在动态链接库中断下,再按下Alt+F9回到用户领空。

待续。。。

Ollydbg使用教程学习总结(五)相关推荐

  1. Ollydbg使用教程学习总结(二)

    解密系列之OD使用教程4 程序1:RegisterMe.exe 把程序跑一遍之后我们发现程序有两个NAG,一个是在程序界面启动前出现,另一个是在程序关闭后出现的. 去掉第一个Nag方法如下: ①jmp ...

  2. Ollydbg使用教程学习总结(四)

    解密系列之OD使用教程13--迷途 程序:XoftSpy41._96.exe 用PEID查看,是VC6编写的程序,用OD载入 获取文本框输入内容API:GetWindowTextA API下断方法: ...

  3. Ollydbg使用教程学习总结(三)

    解密系列之OD使用教程9 程序:MrBills.exe 点击注册,输入邮箱和序列号后提示如下 突破口:该提示窗口中的字符串,查找如下 双击来到反汇编窗口,有个关键跳转,往上查看影响跳转的语句是test ...

  4. Ollydbg使用教程学习总结(一)

    解密系列之OD使用教程1 使用例子程序为Hello.exe OD基本快捷键及功能 从系统DLL领空返回到程序领空,Alt+F9 通过OD将程序的标题"Hello world"改为& ...

  5. SQL基础教程学习第六站:数据更新

    仅用于记录学习,欢迎批评指正,共同交流,共同进步,大神勿喷 系列文章 SQL基础教程学习第一站:PostgreSQL下载安装以及如何创建并登录数据库: SQL基础教程学习第二站:数据库基本知识: SQ ...

  6. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

  7. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  8. 阿里云高校计划视觉AI五天训练营教程学习笔记

    阿里云高校计划视觉AI五天训练营教程学习笔记 Day 1 Topic: 视觉生产技术 定义:通过(一个或者一系列)视觉过程,产出 **新的** 视觉表达. 分类 通用基础框架 关键维度 精细理解--举 ...

  9. OllyDBG完美教程(超强入门级)

    OllyDBG 视频教程:https://www.bilibili.com/video/av6889190 动态调试工具之OllyDbg(OD)教程:https://www.bilibili.com/ ...

最新文章

  1. async await异步发送请求例子
  2. 处理时间_7_60个Mysql日期时间函数汇总
  3. 安全网关之三:IPTables
  4. 修改表格字体颜色_word排版应用:如何创建文本样式和表格样式
  5. translateZ 带来的Z-index 问题
  6. (又有惊喜)Redis5.0重量级特性Stream尝鲜
  7. sql隐式转换_SQL Server中的隐式转换
  8. java调用数据库的基本步骤_Java实现数据库操作的基本流程(转)
  9. Unity sendmessage发送多个参数
  10. 配置VIM语法高亮及自动缩进
  11. Linux下原生异步IO接口Libaio的用法
  12. 威纶和s7200通讯线_S7-200PLC和威纶通触摸屏MODBUS RTU协议通讯实例
  13. Render to Texture
  14. Ubuntu20.04系统联网
  15. [工作记录]在线表格比对系统实现思路整理
  16. APP推广渠道分析:5种方法和2种思路
  17. 仙剑奇侠传3 全开注册表改法
  18. python词频统计_用Python实现一个词频统计(词云+图)
  19. SRC漏洞提交平台和应急响应中心
  20. sw转cad映射文件_SW转CAD图层映射

热门文章

  1. 只读ViewObject和声明性SQL模式
  2. 使用UIBinder的GWT自定义按钮
  3. PIT和TestNG突变测试简介
  4. Java并发教程–重入锁
  5. 正则表达式中的分组的匹配次数的理解
  6. 混合模式商城的可经销商品池
  7. 在linux上安装mysql5.6,在linux(Centos 7以上版本亲测)上安装mysql5.6
  8. c语言全局变量和局部变量作用域重合时,c语言全局变量与局部变量(当变量重名时)的使用情况...
  9. php数组按时间排序,按日期时间在PHP中对数组中的数组进行排序
  10. php thread linux,Linux_linux内核函数kernel_thread,设备驱动程序中,如果需要几 - phpStudy...