程序:

运行程序

点击“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 实验(二十一) - 对反调试程序的逆向分析(二)的更多相关文章

  1. OD 实验(二十) - 对反调试程序的逆向分析(一)

    程序: Keyfile.dat 里的内容 该文件中要至少有 9 个 ReverseMe.A: 运行程序 用 OD 打开该程序,运行 弹出的是错误的对话框 该程序发现 OD 对它的调试,所以该程序对 O ...

  2. OD 实验(十五) - 对一个程序的逆向

    程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...

  3. OD 实验(十) - 对一个 VB 程序的逆向

    前话: VB 程序用 OD 进行逆向的话,可以先查找相关的变量和字符串,以寻找突破口 变量: __vbaVarTstEq __vbaVarCompEq __vbaVarTstNe __vbaVarCo ...

  4. linux(二十一):apache服务配置(二)

    1.普通用户进入家文件夹 ​ ​紧接着之前的进度,我们想想博客的实现.每一个用户在登录之后.都是在自己的家文件夹.那么对于我们的要求就是要设置每一个用户的默认公布文件夹为其家文件夹. 接着我们就来实现 ...

  5. scrapy 源码解析 (二):启动流程源码分析(二) CrawlerProcess主进程

    CrawlerProcess主进程 它控制了twisted的reactor,也就是整个事件循环.它负责配置reactor并启动事件循环,最后在所有爬取结束后停止reactor.另外还控制了一些信号操作 ...

  6. 第十六届“二十一世纪的计算”学术研讨会 密西根州立大学教授Anil K. Jain主题演讲

    Biometrics---How Do I Know Who You Are? 密西根州立大学教授Anil K. Jain主题演讲" title="第十六届"二十一世纪的 ...

  7. Bootstrap <基础二十一>徽章(Badges)

    Bootstrap 徽章(Badges).徽章与标签相似,主要的区别在于徽章的边角更加圆滑. 徽章(Badges)主要用于突出显示新的或未读的项.如需使用徽章,只需要把 <span class= ...

  8. 第十六届“二十一世纪的计算”学术研讨会 图灵奖获得者Butler W. Lampson主题演讲

    Personal Control of Digital Data 图灵奖获得者Butler W. Lampson主题演讲" title="第十六届"二十一世纪的计算&qu ...

  9. 第十六届“二十一世纪的计算”学术研讨会 牛津大学肿瘤成像学教授Michael Brady主题演讲

    Computing and Healthcare 牛津大学肿瘤成像学教授Michael Brady主题演讲" title="第十六届"二十一世纪的计算"学术研讨 ...

随机推荐

  1. Java从入门到精通全套教程免费分享

    这是我自己早前听课时整理的Java全套知识,适用于初学者,也可以适用于中级进阶的人,你们可以下载,我认为是比较系统全面的,可以抵得上市场上90%的学习资料.讨厌那些随便乱写的资料还有拿出来卖钱的人!在 ...

  2. ubuntu 终端命令颜色的修改

    http://blog.chinaunix.net/uid-13954789-id-3137184.html http://blog.chinaunix.net/uid-26021340-id-348 ...

  3. 用户空间与内核驱动的交互过程 — ioctl

    在Linux内核模块的开发过程中,经常涉及到运行在用户空间上的应用程序与内核模块进行交互,ioctl系统调用是常用的一种方式.本文并不涉及vlan的具体原理,仅通过vconfig与vlan内核模块进行 ...

  4. Hibernate 一对一 (one-to-one)

    一对一(one-to-one)实例(Person-IdCard) 一对一的关系在数据库中表示为主外关系.例如.人和身份证的关系.每个人都对应一个身份证号.我们应该两个表.一个是关于人信息的表(Pers ...

  5. BZOJ1801 Ahoi2009 chess 中国象棋 【DP+组合计数】*

    BZOJ1801 Ahoi2009 chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行 ...

  6. maven的介绍以及使用

    maven的介绍以及使用 1.什么是maven maven是一个项目管理工具,一个依赖管理系统,maven通过项目对象模型来管理jar包(POM.xml文件) 2.maven的优点 1.maven使用 ...

  7. hadoop入门手册2:hadoop【2.7.1】【多节点】集群配置【必知配置知识2】

    问题导读 1.如何实现检测NodeManagers健康?2.配置ssh互信的作用是什么?3.启动.停止hdfs有哪些方式? 上篇: hadoop[2.7.1][多节点]集群配置[必知配置知识1]htt ...

  8. 《DSP using MATLAB》示例Example 6.10

    上代码: % Pole-Zero IIR filter to Lattice-ladder structure filter b = [1, 2, 2, 1]; a = [1, 13/24, 5/8, ...

  9. LeetCode String Compression

    原题链接在这里:https://leetcode.com/problems/string-compression/description/ 题目: Given an array of characte ...

  10. lapis 路由

    1. 路由以及url 模式 参考如下: local lapis = require("lapis") local app = lapis.Application() app:mat ...