首页
社区
课程
招聘
[分享]一个Native层的Android应用防护库
发表于: 2022-1-26 22:01 30274

[分享]一个Native层的Android应用防护库

2022-1-26 22:01
30274

前几个月自己的应用被破解了,作为安全小白在看雪努力学习了一段时间,搞了一个Native层的Android应用防护库,不知道有没有实用价值,大佬轻拍。

https://github.com/uestccokey/EZProtect

具有一些比较孱弱的检测功能

1.检测是否被动态调试
有经验的破解者通常会通过IDA等工具来动态调试So,以过掉So库中的检测功能,因此首先需要对动态调试进行拦截,通常采用
1.通过ptrace自添加防止被调试器挂载来反调试
2.通过检查TracePid!=0来进行判断
3.通过系统提供的Debug.isDebuggerConnected()方法来进行判断

2.检测APK的签名
非常基础的检测手段,因为容易被一键破解,因此需要配合其他手段防御

3.检测APK的包名
判断opendir("/data/data/CORRECT_PACKAGE_NAME")是否等于nullptr,如果没有指定私有目录的访问权限,说明不是正确的包名

4.检测是否被Xposed等框架注入
检测"/proc/self/maps"目录下的文件,如果出现包含xposed、substrate、frida等名称的文件,说明有框架正在注入

5.检测PMS是否被Hook
通过检测PMS是否继承Proxy类可以知道是否已被Hook

6.检测Application的className属性
大部分工具都会通过修改入口Application类,并在修改后的Application类中添加各种破解代码来实现去签名校验,它们常常费了很大的劲比如Hook了PMS,同时为了防止你读取原包做文件完整性校验可能还进行了IO重定向,但偏偏忽视了对Application类名的隐藏,经测试该检测可以防御大部分工具的一键破解

7.检测Application的allowBackup属性
正常情况下应该为false,如果检测到为true,说明应用被Hook了,破解者正在尝试导出应用私有信息

8.检测应用版本号
破解者为了防止应用更新导致破解失效,通常会修改此versionCode,因此需要进行检测

9.检测Native与Java层获取到的APK的文件路径或者大小
因为pm命令获取到的APK文件路径通常不容易被修改,这里与通过JavaApi获取到的APK文件路径做比较,如果文件路径或者文件大小不一致时,大概率是应用被IO重定向了,或者使用了VirtualXposed等分身软件

10.Apk和So文件完整性校验
可以获取到当前APK文件和此加密So包的文件信息用于服务器校验

目标是能防住纯新手小白,哈哈


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-4-28 08:45 被uestccokey编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (2)
雪    币: 1623
活跃值: (1773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还可以 支持一下!
2022-1-27 03:11
0
雪    币: 197
活跃值: (1343)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2022-1-27 10:49
0
游客
登录 | 注册 方可回帖
返回
//