首页
社区
课程
招聘
4
[原创]一种防止app inline hook自身的思路及其实现
发表于: 2025-3-14 19:31 3021

[原创]一种防止app inline hook自身的思路及其实现

2025-3-14 19:31
3021

一种防止app inline hook自身的思路及其实现

前言

1
一般的app不会主动去hook自身内存中so模块的一些函数,但经过加固的app就往往会在app启动后立即去inline hook自身内存中一些关键so模块中的关键函数,这主要是为了防止一些注入工具主动调用这些函数完成注入或者其他的一些事情。

如何绕过?

  1. 直接不再调用这些函数,只要没有调用过这些已经被hook的函数自然没有问题。
  2. 在app完成inline hook后再通过修改相应的内存数据将其恢复为原本没有被inline hook过的状态,这样就能卸载掉这些inline hook。但是这种方法容易被app检测到相应内存段的修改。
  3. 直接阻止app完成hook。

如何阻止app完成inline hook?

inline hook在hook之前需要修改相应内存段的权限,因为一般的可执行段都是不可写的,如果要对其进行inline hook,那必然要修改相应内存段的权限,而这就必然涉及系统调用__NR_mprotect,如果我们直接通过内核模块hook这个系统调用,使app在调用__NR_mprotect系统调用申请修改特定内存段权限时让其直接失败,那是不是就能直接阻止app完成inline hook。经过我的实验其实大部分加固厂商都没注意到这个点,所以绝大部分app都是能用这个思路的。基于此我简单写了个kpm内核模块。https://github.com/AndroidReverser-Test/NoHooker


[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 4
支持
分享
赞赏记录
参与人
雪币
留言
时间
琳宇
+1
期待更多优质内容的分享,论坛有你更精彩!
2025-3-21 17:46
Yangser
这个讨论对我很有帮助,谢谢!
2025-3-19 12:48
sinker_
谢谢你的细致分析,受益匪浅!
2025-3-15 00:13
Nickname知寒
谢谢你的细致分析,受益匪浅!
2025-3-14 21:33
最新回复 (2)
雪    币: 2871
活跃值: (4102)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2025-3-14 19:46
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
不错呦,感谢分享
2025-3-15 13:19
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册