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

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

2020-9-13 15:52
5392

由于自己的业务需求,需要一个简单跨平台的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的so库源码down下来,再导入到Visual Studio当中,由于没有Makefile,一切都是简单无脑的操作。只需要将所有cpp文件导入到源文件,所有h跟hpp文件导入到头文件即可。

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

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

具体的移植过程 可以看我的博客网站,网址:c44K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2V1K9h3g2Q4x3X3g2D9N6g2)9J5c8X3y4G2M7X3g2Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7q4)9J5c8U0t1H3x3U0m8Q4x3V1j5H3z5g2)9J5c8U0p5K6i4K6u0r3x3K6t1^5i4K6u0r3

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
666
2020-9-14 17:29
0
雪    币: 627
活跃值: (1202)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
战术性mark
2020-9-18 13:10
0
雪    币: 2528
活跃值: (2470)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
4
你倒是把修改过的代码发上来啊。。。。搞个bin是什么情况?
而且上来一顿吹,也没点实质性的干货,就来个“优”,版主是不看帖子的么?
2020-9-24 16:13
1
雪    币: 2090
活跃值: (3943)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
莫灰灰 你倒是把修改过的代码发上来啊。。。。搞个bin是什么情况? 而且上来一顿吹,也没点实质性的干货,就来个“优”,版主是不看帖子的么?
怀疑你并没有仔细看完。具体修改哪里,已经很详细。吹哪里,请指明。bin是文中代码编译出来的内容,方便对照而已。
Substrate每个人版本都不一样,我的版本来自iOSre上down下来的。
2020-9-25 17:14
0
游客
登录 | 注册 方可回帖
返回