由于自己的业务需求,需要一个简单跨平台的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直播授课
莫灰灰 你倒是把修改过的代码发上来啊。。。。搞个bin是什么情况? 而且上来一顿吹,也没点实质性的干货,就来个“优”,版主是不看帖子的么?