OD 实验(二十一) - 对反调试程序的逆向分析(二)
程序:
运行程序
点击“Verify”
关闭该程序,启动 OD
再运行程序
逆向:
用 OD 载入程序
按 F8 往下走
执行完这个 call 指令就弹出了对话框
这个 call 指令调用了 DialogBoxParam 函数创建模态对话框
如果步入该函数的话,会跳到动态链接库中
如果按 Alt+F9 让程序回到执行区域的时候停下也不行
DialogBoxParam 函数具体实现什么样的操作由参数 IpDialogFunc 决定,IpDialogFunc 为指向模态对话框过程的指针
IpDialogFunc 参数指向的地址为 40108C
在该处下一个断点,运行程序
停在断点处
按 F8 往下走
执行跳转,一路默认往下走
到了动态链接库中,按 Alt+F9
程序又回到了起始处,继续往下走
这次的跳转没有实现
接着往下走
走到这个地方会响一声弹出对话框的声音,然后又回到原处
这个 call 处下一个断点,重新跑一下程序
停在这个地方后,按 F8
弹出了对话框
看来是这个 call 语句
步入这个 call 语句
这里先是调用了一个 API 函数 CreateToolhelp32Snapshot 来创建进程快照
这两个是它的参数
这个函数的第一个参数 dwFlags 用来指定“快照”中需要返回的对象,第二个参数 th32ProcessID 用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为 0
该函数如果调用成功,返回快照的句柄;调用失败,返回 INVALID_HANDLE_VALUE
eax 的值为 BC,函数调用成功
执行完这句,EDI 的值为 OLLYDBG.EXE
然后调用 Process32First 函数,前面两个是它的函数
当利用函数 CreateToolhelp32Snapshot 函数获得当前运行进程的快照后,可以用 Process32First 函数来获得第一个进程的句柄
接着往下走
[System Process] 为 Process32First 函数的结果
然后调用 lstrcmpi 函数对它的两个参数进行对比,前面两个是它的参数
如果两个的值相同返回 0,不同返回 1
值为 1,两个参数的值不同
这个跳转就没有实现,如果是 0 的话,跳转实现
接着往下走
接下来调用了 Process32Next 函数,前面两个为它的参数
Process32Next 函数用来获得下一个进程的句柄
接着往下走
Process32Next 获取的是 System
然后调用 lstrcmpi 函数进行字符串对比,两个值不一样,返回 1
跳转没有实现
往下走
这个跳转往上跳,是一个循环
通过 Process32Next 函数逐个地获取进程的句柄,并判断进程中是否有“OLLYDBG.EXE”
如果进程中存在 OLLYDBG.EXE 就会弹出错误的对话框
如果进程中没有 OLLYDBG.EXE,则调用 CloseHandle,然后返回,ollybug.exe 不区分大小写
OD 实验(二十一) - 对反调试程序的逆向分析(二)的更多相关文章
- OD 实验(二十) - 对反调试程序的逆向分析(一)
程序: Keyfile.dat 里的内容 该文件中要至少有 9 个 ReverseMe.A: 运行程序 用 OD 打开该程序,运行 弹出的是错误的对话框 该程序发现 OD 对它的调试,所以该程序对 O ...
- OD 实验(十五) - 对一个程序的逆向
程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...
- OD 实验(十) - 对一个 VB 程序的逆向
前话: VB 程序用 OD 进行逆向的话,可以先查找相关的变量和字符串,以寻找突破口 变量: __vbaVarTstEq __vbaVarCompEq __vbaVarTstNe __vbaVarCo ...
- linux(二十一):apache服务配置(二)
1.普通用户进入家文件夹 紧接着之前的进度,我们想想博客的实现.每一个用户在登录之后.都是在自己的家文件夹.那么对于我们的要求就是要设置每一个用户的默认公布文件夹为其家文件夹. 接着我们就来实现 ...
- scrapy 源码解析 (二):启动流程源码分析(二) CrawlerProcess主进程
CrawlerProcess主进程 它控制了twisted的reactor,也就是整个事件循环.它负责配置reactor并启动事件循环,最后在所有爬取结束后停止reactor.另外还控制了一些信号操作 ...
- 第十六届“二十一世纪的计算”学术研讨会 密西根州立大学教授Anil K. Jain主题演讲
Biometrics---How Do I Know Who You Are? 密西根州立大学教授Anil K. Jain主题演讲" title="第十六届"二十一世纪的 ...
- Bootstrap <基础二十一>徽章(Badges)
Bootstrap 徽章(Badges).徽章与标签相似,主要的区别在于徽章的边角更加圆滑. 徽章(Badges)主要用于突出显示新的或未读的项.如需使用徽章,只需要把 <span class= ...
- 第十六届“二十一世纪的计算”学术研讨会 图灵奖获得者Butler W. Lampson主题演讲
Personal Control of Digital Data 图灵奖获得者Butler W. Lampson主题演讲" title="第十六届"二十一世纪的计算&qu ...
- 第十六届“二十一世纪的计算”学术研讨会 牛津大学肿瘤成像学教授Michael Brady主题演讲
Computing and Healthcare 牛津大学肿瘤成像学教授Michael Brady主题演讲" title="第十六届"二十一世纪的计算"学术研讨 ...
随机推荐
- Java基础面试题 (一)
1.面向对象的三个特征 封装,继承,多态.这个应该是人人皆知,有时候也会加上抽象. 2.多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息 ...
- HTML编写规范
HTML和CSS编码规范内容 一.HTML规范 二.CSS规范 三.注意事项: 四.常用的命名规则 五.CSS样式表文件命名 六.文件命名规则 一.HTML规范: 1.代码规范 页面的第一行添加标准模 ...
- scala学习笔记(9): 语法续
1 不定长参数 def sum(args: Int*) = { var result = 0 for ( arg <- args) result += arg result } 2 数组初始化 ...
- php开发中一些前端知识杂总
推荐几个jqyuey插件的好地方 http://jqueryui.com/ http://www.jq22.com/ 背景: 服务端采用ci3.0框架,twig作为模板嵌套. twig模板手册: ht ...
- C# 速编神器LinqPad(新版5.25)
点此下载5.25 (支持.net4.6,有调试器)(页面有广告,一直点免费下载即可)(可用)密码 lp123456 批处理如下. @echo off start /b LINQPad.exe -n ...
- html5大纲算法(目录树)
看了<CSS那些事儿>我一直遵循着给每个板块写一个h标签,并保持层次,比如导航条.焦点图我都写了一个缩进隐藏的h标签.这种规范一般人根本看不出来,即使是行内的大多数人也觉得没有必要.可是我 ...
- margin top 无效
常出现两种情况: (一)margin-top失效 两个层box1和box2,box1具有浮动属性,box2没有,这时候设置box2的上边距margin-top没有效果. 解决办法: 1.box2增加f ...
- BZOJ4689 Find the Outlier 【高斯消元】*
BZOJ4689 Find the Outlier Description Abacus教授刚刚完成了一个制作数表的计算引擎的设计.它被设计用于同时计算一个多项式在许多点的取值.例如对于多项式 f(x ...
- Altera的几个常用的Synthesis attributes(转载)
各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方 ...
- mysql 安装(压缩包安装和exe安装)
1:mysql官网:https://dev.mysql.com/downloads/file/?id=482487 2:压缩包安装:https://www.cnblogs.com/jamespan23 ...