吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 7938|回复: 5

[转载技术] 第二十一章-OllyDbg反调试之检测OD进程名,窗口类名,窗口标题名

[复制链接]
Shark恒 发表于 2015-1-20 16:34 | 显示全部楼层 |阅读模式

        第二十一章-OllyDbg反调试之检测OD进程名,窗口类名,窗口标题名
本章我们继续讨论反调试,将我修改过的一个CrackMe作为本章的实验对象。
该CrackMe的名字叫做buggers,其中做的一些修改是为了介绍检测OllyDbg进程名的其他一些API函数,同时该CrackMe也涵盖了检测OllyDbg窗口标题名以及窗口类名等知识点。
我们打开原始的OllyDbg程序,不使用重命名的,因为本章我们将对上一章的检测OD的方法进行延伸,因此让OD的文件名是OllyDbg.exe,保证该CrackMe可以检测出来OD。
我们用OD加载该CrackMe,接着将HideDebugger1.23版插件的IsDebuggerPersent选项勾选上。
image002.jpg
HideDebugger插件的配置如下:
image004.jpg
这里只是为了防止该程序调用IsDebuggerPresent对OD进行检测。我们打开原始的OllyDbg.exe,然后打开任务管理器,确保OD的进程名为”OLLYDBG.EXE”
image006.jpg
好了,我们回到buggers3,看看该程序使用了哪些API函数。
image008.jpg
image010.jpg
我的天啦!API列表中居然只是唯一的一个函数ExitProcess,其他API函数应该都是通过GetProcAddress加载的,但是GetProcAddress也不在该列表中。
image012.jpg
我们试试在命令栏中输入bp GetProcAddress,接着运行起来。
image014.jpg
断在了GetProcAddress函数的入口处,程序调用GetProcAddress加载一些API函数,如果我们对哪些API函数感兴趣,我们可以执行到返回,就知道了该函数的地址了,然后使用bp EAX断这个函数,因为EAX中保存了GetProcAddress获取到的函数地址。
这个函数我们不感兴趣,我直接按F9键运行起来。
image016.jpg
运行几次后,我们找到了一个可疑的API函数CreateToolhelp32Snapshot,你可能会问,你是怎么知道的,因为我知道这种检测方法,所以我介绍它,让大家知道哪些API函数还可以用于检测OD。
好了,现在我们选择主菜单项Debug-Executetill return来执行到返回。
image018.jpg
现在我们到了RET指令处,并且EAX保存了CreateToolhelp32SnapShot的函数地址,我们使用BP EAX该函数设置一个断点。
image020.jpg
下面是该API断点的位置。
image022.jpg
我们继续运行,看看有没有其他的可疑的API函数的被加载。
image024.jpg
恩,OpenProcess这个函数也是一个可疑函数,其可以获取进程的句柄(我们上一章节已经讨论过了),我们执行到返回,接着使用BP EAX给该函数设置断点。
image026.jpg
嘿嘿,Process32First又一个可疑的API函数,我们同样执行到返回,然后BP EAX给该函数设置断点,接着对下一个可疑的函数Process32Next进行同样的操作。
image028.jpg
接下来是TerminateProcess。
image030.jpg
我们知道这个函数是用来关闭OllyDbg的。因为必须检测OD进程才会执行该函数,所以不必给该函数设置断点,但是为了安全起见我们还是给该函数设置断点吧,嘿嘿。
image032.jpg
嘿嘿,FindWindowA又一个可疑的函数,依然按照上面的方法给该函数设置断点。
我们继续F9键运行就断在了CreateToolhelp32SnapShot的入口处。
image034.jpg
堆栈情况如下:
image036.jpg
让我们来看看MSDN中关于这个函数的说明。
image038.jpg
该函数是该当前机器上面运行的所以进程列表创建一个快照,但是返回给我们的仅仅是该快照的句柄,并且没有什么用于保存进程列表的缓冲区之类的参数,我们直接执行到返回。
image040.jpg
EAX中保存了进程快照的句柄。
image042.jpg
我机器上返回的进程快照句柄是2C,我们查看一下该程序的句柄列表。
image044.jpg
我们单击工具栏上面H按钮打开句柄列表窗口。
image046.jpg
我们发现句柄列表中并没有2C这个句柄值,不过还好,我们成功了创建了进程快照并获取到了进程快照的句柄,我们运行起来,看看该程序哪里使用了进程列表。
image048.jpg
断在了Process32First这个API函数的入口处,该函数配合Process32Next这个API函数可以读取进程快照中所有正在运行的进程的相关信息。
image050.jpg
好了,我们来看看MSDN中关于这个函数的说明。
image052.jpg
该函数用于获取第一个参数也就是进程快照(我这里是2C)中的第一个进程的信息。第二个参数为PROCESSENTRY32(进程相关信息)的结构体的指针。
image054.jpg
这个函数仅仅是用来获取第一个进程的信息的,Process32Next才是用来获取后面的进程的信息的。
image056.jpg
我们在数据窗口中转到PROCESSENTRY32结构体的首地址处,接着我们执行到返回就可以获取到第一个进程的相关信息了。
image058.jpg
我们可以看到第一个进程的名称,第一个进程总是SystemProcess,我们继续运行。
image060.jpg
嘿嘿,这里调用了FindWindowA,由于OllyDbg的窗口标题名和窗口类名是同名的,所以FindWindowA也可以指定第一个参数窗口标题名为“OllyDbg”,当前该程序指定是第二个参数窗口类名,同样也是“OllyDbg”。
我们可以使用一个实用的小工具WinDowse来获取窗口类名(其实VC自带的SPY++也可以,(*^__^*)嘻嘻……)
我们知道OllyDbg有对应的插件可以用于查看窗口的相关信息。但是WinDowse这款工具获取的信息更加详细一些,我们安装这个工具并运行起来。
image062.jpg
我们可以看到Window标签页中显示了OllyDbg的窗口标题名并且Class标签页中显示其窗口类名。
image064.jpg
正如我们看到的都是OllyDbg。
我们可以看到FindWindowA返回的是指定窗口的句柄,通过该窗口句柄,我们可以对该窗口进行任何操作。
image066.jpg
大家没有必要同时设置窗口类名和窗口标题名,你只需要任选择其一,另一个参数赋值为NULL即可。
image068.jpg
好了,现在我们执行到返回,看看该函数是否会返回OD的窗口句柄。
image070.jpg
恩,正如我们所看到的,返回的窗口句柄值跟WinDowse上面显示的窗口句柄值一致。
好吧,我们继续跟,看看该程序获取了OD的窗口句柄会干些什么。
image072.jpg
这里判断获取到的窗口句柄是否为空,如果窗口句柄为空,说明不存在OllyDbg窗口,如果返回的窗口句柄非空,该程序就会调用ExitProcess退出进程。
image074.jpg
直接跳转至退出进程的代码块并且不显示任何东西出来。
image076.jpg
所以,我们需要FindWindowA返回值EAX为空。
好了,我们现在知道如何手工绕过该反调试了,下面直接使用HideDebugger1.23版插件来绕过该反调试吧,我们来看看该插件的配置吧。
image078.jpg
我们可以看到第二个选项,可以绕过FindWindow和EnumWindows检测OD窗口方法,首先我们还是要知道如何手工绕过该反调试以及其原理是什么。好了,我们现在不设置该选项,直接重新启动OD,手工来实现跳过ExitProcess代码块并且继续执行。
image080.jpg
我们双击零标志位Z将其修改为1,这样JNZ条件跳转就不会实现了。
image082.jpg
现在JNZ指令不会跳转了。
image084.jpg
接下来将会执行JMP指令跳过ExitProcess的调用代码。
image086.jpg
好了,我们继续,介绍如何绕过FindWindowA了,现在继续讨论绕过检测OD进程名的方法,运行起来。
image088.jpg
断了下来,现在调用的是Process32Next,获取进程快照中第二个进程的相关信息,并且该进程的相关信息会保存在403134指向缓冲区中。
我们执行到返回看看保存了什么。
image090.jpg
现在获取到的是System进程,PID为4,我们结合任务管理器来看。
image092.jpg
同理,我们就可以看到获取到的每个进程以及其相关信息。
image094.jpg
这里我们可以看到lstrcmpA这个API函数,它将“System”与“buggers3.exe”两个字符串进行比较,即比较当前获取的进程名与该CrackMe名称,如果它们相等,将会调用MessageBoxA弹出notdebugged!没有被调试的信息。这里,两者并不相等,所以我们继续跟。
image096.jpg
上面两个字符串不相等,所以比较结果为FFFFFFFF。
image098.jpg
由于结果不为零,将会跳转至40119F地址处。
image100.jpg
这里,到了比较关键的地方了,比较获取到的进程名是否为OLLYDBG.EXE,如果是,结果为零并且JNZ条件跳转将不会实现,将会调用OpenProcess获取OD进程的句柄,然后通过TerminateProcess结束掉OD进程。跟上一章我们遇到的情况差不多。
image102.jpg
我们可以看到当前进程名并不是OllyDbg.exe,所以会继续执行Process32Next获取下一个进程的相关信息。
image104.jpg
我们同样是执行到返回,看看到获取到的信息。
image106.jpg
现在获取到的进程名称为smss.exe,其PID为26C。我们结合任务管理器来看。
image108.jpg
任务管理器中显示的smss.exe进程的PID,十进制为620,十六进制即26C。
恩,接下来该CrackMe会逐一比较每个进程看是否为OLLYDBG.EXE。
image110.jpg
现在我们处于4011B1这个条件分支处,当前找到一个进程名为OLLYDBG.EXE,条件跳转将不会发生并且会执行下面的关闭OD的代码,因此,我们需要将该JNZ指令修改为JMP指令,让关闭OD的代码永远得不到执行。
image112.jpg
现在删除所有断点运行起来。
image114.jpg
好了,这样该反调试就被绕过了。我们知道HideDebugger插件也可以绕过FindWindowA对于OD窗口的检测,并且我们也可以将原版的OLLYDBG.EXE重命名为PIRULO.EXE让其找到OLLYDBG这个进程名。
我们打开PIRULO.EXE。
image116.jpg
我们勾选上绕过FindWindow的选项,然后单击保存。
image118.jpg
接着我们重新启动OllyDbg。
image120.jpg
我们加载buggers3之前,先来解决一个小问题,我们来看一下WinDowse,看看WinDowse还是否能够检测OD的窗口名。
image122.jpg
我们可以看到OLLYDBG并没有出现在标题栏中,那OD的窗口类名呢?
image124.jpg
我们可以OLLYDBG的窗口类名被检测出来了,这里我们还需要借助另一个小工具。
它的名字叫做repair0.6,它是OLLYDBG的一个补丁程序。
好了,我们现在关闭OllyDbg然后运行该补丁程序。
image126.jpg

image128.jpg
好了打完补丁以后我们现在有了第3个OllyDbg了,就是Nvp11.exe。我们来看看OD所在的文件夹。
image130.jpg
好了,我们现在运行它,看看其窗口类名。
image132.jpg

我们可以看到现在的窗口类名为Nvp11,进程名称也变成了Nvp11,好了,现在我们就可以完美运行buggers3了,我们来验证一下。
image134.jpg
运行起来。
image136.jpg
好了,我们给OD打了补丁以后,OllyDbg就不那么容易被检测到了,现在就不会被通过进程名,窗口名或者窗口类名的方法检测到了,嘿嘿,下一章我们继续讨论其他的反调试方法。我们首先弄明白如何手工绕过对应的反调试,然后使用插件来绕过就很简单了,嘿嘿。

本系列文章汉化版转载看雪论坛

感谢原作者:RicardoNarvaja(西班牙人)
原作者个人主页:http://www.ricardonarvaja.info/

感谢热心翻译的朋友:
1~3章译者:BGCoder
4~58章译者:安于此生

全集配套程序下载地址:
链接: http://pan.baidu.com/s/1eQzTWfo 密码: vytv



评分

参与人数 11HB +8 THX +7 收起 理由
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
Jawon + 1
一路走来不容易 + 1
af521 + 1
boot + 2
消逝的过去 + 1
l278785481 + 1
惜缘草 + 1 + 1
jaunic + 1
hackysh + 1
lies + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hanjunhao 发表于 2019-7-15 21:34 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-3-1 03:41 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-11-19 17:32 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2023-4-4 10:15 | 显示全部楼层

跟着大佬少走弯路
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一生逍遥 发表于 2023-4-20 10:45 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表