OD 实验(十六) - 从对话框入手对程序的逆向
对话框:
对话框从类型上分为两类:modal 对话框和 modeless 对话框,就是模态对话框和非模态对话框,也有叫成模式和非模式
模态对话框不允许用户在不同窗口间进行切换,非模态对话框允许用户在不同窗口间进行切换
两者形成区别的原理是模态对话框由 windows 为它内建一个消息循环,而非模态对话框的消息则是通过用户程序中的消息循环派送的
创建模态对话框是由调用 DialogBoxParam 函数实现的,而创建非模态对话框是调用 CreatDialogParam 函数实现
程序:

点击 SETUP.EXE 进行安装
按默认步骤安装

这是主界面

点击 File -> Register 是进行注册的地方

关闭程序

它会弹出该对话框,该对话框是模态对话框

如果直接按退出会显示该帮助文档

只有点击 I Will Register Soon 才会退出程序
用 eXeScope 载入程序

选择 资源 -> 对话框 -> 103,是程序要退出时候的对话框

103 为 MFC 下的 lpTemplateName 对话框模板
逆向:
用 OD 载入程序

右键 -> 查找 -> 所有命令

查找 push 0x67,67 为 103 的十六进制
调用模态对话框 DialogBoxParam 的时候会将它的参数入栈,103 也是它的第一个参数

双击,来到它的位置

在该代码块开头下一个断点

跑一下程序

点击退出程序之后,没有弹出对话框,直接停在该断点处
如果函数 A 调用函数 B 的话,函数 A 会被 push 入栈,当函数 B 执行完之后返回到函数 A 的时候,函数 A 会被 pop 出栈
看一下栈窗口

返回到 004023C0 来自 00401220
右键 -> 反汇编窗口中跟随

来到了该地址
上面那个 call 就是调用刚才那个过程

上面有个 jnz 跳转指令,如果 eax 是一个非零值,它就会进行跳转,跳转就能跳过那个 call 指令
在 test 指令上面的 call 指令处下一个断点

重新跑一下程序
点击关闭程序的按钮之后停在该断点处

按 F7 步入

只有几条指令之后就执行 retn,没有条件跳转,可能程序一运行就直接在这里检查是否注册
在该过程开头下一个断点

重新跑一下程序

一打开程序,就停在该断点处,说明这个过程就是检查是否注册
如果该过程返回非零值就会跳过程序最后的那个对话框
接下来修改指令

如果修改将上面这条指令改为 mov eax, 0x1 的话,会覆盖掉后面的那条指令

所以把这两条对 eax 的值有影响的指令做修改,改为 mov eax, 0x1

选择这两行指令,右键 -> 汇编,进行修改

改完之后保存程序,运行

Register 按钮已经不能点击了,退出程序的时候也没有对话框了
OD 实验(十六) - 从对话框入手对程序的逆向的更多相关文章
- OD 实验(十九) - 对多态和变形程序的逆向
程序: 这个窗口显示这是一个需要去除的 Nag 窗口 点击“确定” 用 PEiD 看一下 这是一个用汇编语言写的程序 逆向: 用 OD 载入程序 Nag 窗口的标题和文本 右键 -> 查找 -& ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十六:IIC储存模块
IIC储存器是笔者用来练习精密控时的经典例子.<整合篇>之际,IIC储存器的解释,笔者也自认变态.如今笔者回头望去,笔者也不知道自己当初到底发什么神经,既然将IIC的时序都解释一番.由于开 ...
- OD 实验(十八) - 简单注册机的编写
程序: 运行 这是一个注册机 随便输入点内容,点击 Check 弹出错误的对话框 逆向: 用 OD 载入程序 在文本框处下断点 按 Alt+B 查看断点 这个断点在动态链接库那里 跑一下程序,输入内容 ...
- OD 实验(十五) - 对一个程序的逆向
程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...
- OD 实验(十四) - 内嵌补丁
内嵌补丁(inline patch): 内嵌补丁指在程序文件中把补丁代码写入文件里面达到破解的目的 如果修改某行语句会影响后面的语句,例如某语句占用 3 个字节,修改完变为 5 个字节,会覆盖后面的语 ...
- OD 实验(十二) - 对一个 Delphi 程序的逆向
程序: 运行程序 界面显示的是未注册 点击 Help -> About 点击 Use Reg Key 这里输入注册码 用 PEiD 看一下 该程序是用 Delphi 6.0 - 7.0 写的 逆 ...
- 【iCore3 双核心板_FPGA】实验十六:基于SPI总线的ARM与FPGA通信实验
实验指导书及代码包下载: http://pan.baidu.com/s/1hs6lDdi iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- MFC编程入门之十六(对话框:消息对话框)
前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消息对话 ...
- Python脚本控制的WebDriver 常用操作 <十六> 处理对话框
下面将使用webdriver来处理一些页面跳出的对话框事件 测试用例场景 页面上弹出的对话框是自动化测试经常会遇到的一个问题.前端框架的对话框经常是div形式的,下面是一些常见的对话框操作事件: 打开 ...
随机推荐
- Shell 命令行,实现一个获取任意位数的随机密码的脚本
Shell 命令行,实现一个获取任意位数的随机密码的脚本 每次我们想要获得一个密码的时候都很头疼,于是我之前自己用nodejs写了一个 Shell 脚本.这两天在学习 bash Shell 所以,想用 ...
- history.go(-1)在不同浏览器中的解析
今天遇到个问题: <a href="#" onclick="history.go(-1)">后退</a> 点击"后退" ...
- Elasticsearch安装配置和测试
官方教程:https://www.elastic.co/guide/en/elasticsearch/reference/master/_installation.html 中文教程:https:// ...
- 高德地图Demo运行报错 com.android.ide.common.process.ProcessException: Failed to execute aapt
最近由于有需求去做导航方面的Android开发,很是无奈,以前也的确是没有搞过,领导开大会当着所有人的面说这是给我分配的第一个工作,无论如何要做好,突然间感觉压力好大,自己已经多年没有敲过代码,而且A ...
- 实战maven私有仓库三部曲之二:上传到私有仓库
在上一章<实战maven私有仓库三部曲之一:搭建和使用>我们搭建了maven私有仓库,并体验了私有仓库缓存jar包的能力,避免了局域网内开发人员去远程中央仓库下载的痛苦等待,本章我们再来体 ...
- 两个线程与stringbuffer和stringbuiler以及lock synchronized线程测试
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...
- appium-java,同时连接多台机器,启动微信
1.配置appium信息 第一台机 第二台机类似,连接端口和监听端口不能重复 2.appium连接手机,微信中打开debugx5.qq.com,信息->TBS settings->是否打开 ...
- [转]:What happens to older developers?
原文链接可能失效. This post is old but will remain on the front page for the time being. 140313. Jeff Jenkin ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- Luogu 4724 三维凸包
Luogu 4724 三维凸包 增量法,维护当前凸包,每次加入一个点 \(P\) ,视其为点光源,将可见面删去,新增由"晨昏线"(分割棱)与 \(P\) 构成的平面. 注意每个平面 ...