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

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

2022-1-26 22:01
29202

前几个月自己的应用被破解了,作为安全小白在看雪努力学习了一段时间,搞了一个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包的文件信息用于服务器校验

 

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


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2022-4-28 08:45 被uestccokey编辑 ,原因:
收藏
点赞5
打赏
分享
最新回复 (2)
雪    币: 921
活跃值: (873)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SomeMx 2022-1-27 03:11
2
0
还可以 支持一下!
雪    币: 6
活跃值: (980)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
菜鸟也想飞 2022-1-27 10:49
3
0
感谢分享
游客
登录 | 注册 方可回帖
返回