首页
社区
课程
招聘
[原创]Android风险环境检测 —— 签名校验
发表于: 2026-5-18 00:17 20294

[原创]Android风险环境检测 —— 签名校验

2026-5-18 00:17
20294

最近在阅读《Android设备指纹攻防与风险环境检测》时,发现光靠阅读书中的思路和代码片段不能很好的理解,所以打算自己写一个app,实践一下

java层通常使用PackageManager进行签名校验

在Android9以上,签名可以通过PackageInfo -> signingInfo -> signatures获得,以下则是通过PackageInfo -> signatures

无论是哪种,获取PackageInfo都会使用getPackageInfo这个api

在Android9引入了密钥轮换机制,因此废弃了GET_SIGNATURES,转而推荐使用GET_SIGNING_CERTIFICATES获取证书

但是单纯java层检测并不安全:PackageManager的getPackageInfo可能会被hook、用来比对的签名值也可能被篡改

在MainActivity调用这个方法

并对应用重新签名

此时签名校验失败,尝试通过hook PackageManger返回正确校验值

脚本hook了getPackageInfo方法,返回了伪造的PackageInfo -> SigningInfo -> SigningDetails值

此时签名校验失败。

如何防止这种方式hook getPackageInfo呢

最直接的思路就是不使用getPackageInfo,可以通过反射获取Binder对象,直接和系统服务进行通信

不使用getPackageInfo,减少hook点。运行应用观察,发现此方法的签名校验失败

但这种方法同样有缺点

上面这段代码中

解析PackageInfo.CREATOR为PackageInfo对象,所以可以通过反射替换此静态变量,伪造签名信息

hook方法如下

CREATOR里包含两个方法

1.createFromParcel(Parcel source) 从二进制字节流里读取数据 拼装还原出一个完整的Java对象

2.newArray(int size) 用来创建该对象的数组

在我们自己创建的CREATOR中,截取到数据之后将PackageInfo替换即可成功替换

在Java代码中新建一个方法检测PackageInfo.CREATOR是否被替换

现在运行完整脚本,发现此方法被检测到

先来写一个简单的native检测

native-lib.cpp

(有些工具类函数,比如解析v2 v3签名的函数,使用ai辅助生成)

在上面这个例子中,完全可以hook open函数,将参数一的地址替换成原始apk,这样签名校验一定会成功

hook脚本如下:

编译保护将open函数自动替换为__open_2,所以这里不能只hook open函数,效果如下


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 2026-5-18 00:30 被mb_wckjnnha编辑 ,原因:
上传的附件:
收藏
免费 188
打赏
分享
最新回复 (104)
雪    币: 1351
活跃值: (2507)
能力值: ( LV8,RANK:121 )
在线值:
发帖
回帖
粉丝
2
学习学习
2026-5-18 00:19
0
雪    币: 187
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
沙发
2026-5-18 00:35
0
雪    币: 3130
活跃值: (5875)
能力值: ( LV7,RANK:116 )
在线值:
发帖
回帖
粉丝
4
学习
2026-5-18 00:42
0
雪    币: 3737
活跃值: (4904)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
过来瞧瞧
2026-5-18 07:13
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
666666666666
2026-5-18 07:48
0
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
学习
2026-5-18 08:04
0
雪    币: 6230
活跃值: (11182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
2026-5-18 09:13
0
雪    币: 247
活跃值: (527)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习
2026-5-18 09:18
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2026-5-18 12:04
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
666
2026-5-18 13:58
0
雪    币: 862
活跃值: (1365)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
233333
2026-5-18 14:09
1
雪    币: 158
活跃值: (4851)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习学习 
2026-5-18 15:52
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
学习学习 
2026-5-18 16:28
0
雪    币: 76
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
学习
2026-5-18 17:57
0
雪    币: 258
活跃值: (136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢分享
2026-5-18 19:09
0
雪    币: 0
活跃值: (460)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
111
2026-5-18 19:12
0
雪    币: 32
活跃值: (413)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
ooo
2026-5-18 19:37
0
雪    币: 5
活跃值: (2540)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
看看,感觉应该早就过掉了
2026-5-18 19:39
0
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
66666
2026-5-18 21:22
0
雪    币: 3
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
学习学习
2026-5-18 22:00
0
雪    币: 6583
活跃值: (7087)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
来学习了。
2026-5-18 22:01
0
雪    币: 191
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
666
2026-5-19 00:45
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
看看
2026-5-19 01:58
0
雪    币: 95
活跃值: (3042)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
66666666
2026-5-19 09:32
0
游客
登录 | 注册 方可回帖
返回