首页
论坛
课程
招聘
[原创]Cydia Substrate到Windows的简单移植以及自制调试器、反调试器断点检测
2020-9-13 15:52 888

[原创]Cydia Substrate到Windows的简单移植以及自制调试器、反调试器断点检测

2020-9-13 15:52
888

由于自己的业务需求,需要一个简单跨平台的Inline Hook框架,又不想自己写,于是找到了Cydia Substrate。

Cydia Substrate是iOS以及安卓平台上有名的Hook框架,对于安卓,能进行Java层的Hook以及Native层Hook。但是Cydia Substrate并不支持Windows,也没有任何好用的跨平台钩子框架,于是就自己造轮子写了一个。

使用效果:

代码部分

运行起来的效果:


可以看见我们要钩的ZwTerminateProcess已经被成功挂钩,执行TerminateProcess必定走ZwTerminateProcess,因此我们安装的钩子实际上是生效的。

我们知道,32位的Windows跟64位的Windows,在Windows API函数头部是不一样的,32位预留了钩子空间,64位没有跟32位一样直接预留短跳空间。而Inline Hook框架主要就是在函数头部插入自己的OpCode,跳到跳板,再执行Hook函数。而对于原始函数,Fix过程是很重要的,Substrate的Fix存在BUG,可以自己修复。

下面说说怎么简单移植Cydia Substrate到Windows:

我们从各种开源网站把Cydia Substrate的so库源码down下来,再导入到Visual Studio当中,由于没有Makefile,一切都是简单无脑的操作。只需要将所有cpp文件导入到源文件,所有h跟hpp文件导入到头文件即可。

接下来就是删掉GNU系列的一些属性定义,我用的是MSVC,对齐之类的都是没问题的,后面自己根据本机的定义,对于一些Linux上才有的内容进行转译,例如一些缺失的头文件以及缺失的定义。

后面就是编译了,由于X86平台函数调用上,Windows跟类Unix是一样的,因此不会遇到用不了的问题。

具体的移植过程 可以看我的博客网站,网址:https://www.die.lu/core/index.php/2020/09/13/328/

一个反反调试断点检测:

有很多软件会对调试器断点进行检测,例如对IsDebuggerPresent的断点是可以检测的。我们可以这样做:

这是IsDebuggerPresent的函数内容,我们并不需要在这个地方下断点,如图:

我们可以不下断点,这个函数下面又很多0xCC,即int3,实际上我们完全可以填充掉。

将ret以及下面的几个int3抹掉,改位指令xor rax,rax以及ret。如图:

这样就能拥有完整的调用链,过很多关于该函数断点的检测了,别的函数也大同小异。

不一样的是某些带有防调试软件,NtQueryInformationProcess函数会调用32位的版本,这里我们只需要在WOW64 Bridge里面直接下钩子,抓取32位版本即可。

自制调试器-不一样的思路:

我们知道,System32里面的部分dll是有保护的,但是我们可以在注册表里面删除这些保护,通过dll劫持这个古老的技术,主动连接到我们的调试器。

目前市面上调试器普遍为远线程注入,再attach等等,为什么我们不可以跟木马的反向连接(反弹)一样,让程序主动连接到我们的程序呢?

实际上我们完全可以修改注册表,将user32.dll剔除于保护名单之外,直接使用我们自己的劫持dll并对任意软件进行注入和hook。

目前已经开发出初代的新调试器,完全不使用任何debugger的内容,而是自主对整个软件运行环境进行监控,自然也没有debugger检测一说。


[公告]请完善个人简历信息,好工作来找你!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 55
活跃值: 活跃值 (154)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
killpy 活跃值 2 2020-9-14 17:29
2
0
666
雪    币: 351
活跃值: 活跃值 (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
笑熬浆糊 活跃值 2 2020-9-18 13:10
3
0
战术性mark
雪    币: 562
活跃值: 活跃值 (99)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
莫灰灰 活跃值 9 1天前
4
1
你倒是把修改过的代码发上来啊。。。。搞个bin是什么情况?
而且上来一顿吹,也没点实质性的干货,就来个“优”,版主是不看帖子的么?
雪    币: 652
活跃值: 活跃值 (214)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lhxdiao 活跃值 20小时前
5
0
莫灰灰 你倒是把修改过的代码发上来啊。。。。搞个bin是什么情况? 而且上来一顿吹,也没点实质性的干货,就来个“优”,版主是不看帖子的么?
怀疑你并没有仔细看完。具体修改哪里,已经很详细。吹哪里,请指明。bin是文中代码编译出来的内容,方便对照而已。
Substrate每个人版本都不一样,我的版本来自iOSre上down下来的。
游客
登录 | 注册 方可回帖
返回