FlyJingFish / AndroidAOP

🔥🔥🔥帮助 Android App 改造成AOP架构的框架,一个注解就可以请求权限、切换线程、禁止多点、监测所有点击事件、监测生命周期等等(Help you transform into an Android platform framework with AOP architecture)
https://flyjingfish.github.io/AndroidAOP/
Apache License 2.0
478 stars 30 forks source link

对于运行时动态织入代码的支持 #20

Closed eternallyjie closed 4 months ago

eternallyjie commented 4 months ago

详细说明功能

请问是否考虑不仅仅是编译时静态织入代码,新增运行时动态织入代码功能呢? 有如下场景:比如在安全隐私管控上(如读取用户手机信息、imei、权限申请等),大多都会接入第三方库或者 sdk 之类的,这些库如果是正常静态代码调用相关 api,那目前的编译时织入代码没问题,但如果是通过 c 层反射调用或者通过下发插件之类的形式,那么就无法进行相关管控和检测。 所以希望增加运行时动态织入代码的能力支持。

FlyJingFish commented 4 months ago

你遇到的具体场景描述一下

eternallyjie commented 4 months ago

你遇到的具体场景描述一下

目前遇到的场景是对于 android.telephony.TelephonyManager.getImei 这个 api,我们有做编译时代码织入不调用到系统 api,直接返回空字符串,但是在安全检测的时候却发现还是有调用该系统 api 的情况存在,而且安全检测工具也拿不到具体的堆栈信息,所以猜测可能是通过 c 层反射调用或者是动态下发的插件调用的。 所以想通过在运行时进行代码织入进行相关 api 的拦截。

具体安全检测到的堆栈如下:

QQ_1721015374551

FlyJingFish commented 4 months ago

你遇到的具体场景描述一下

目前遇到的场景是对于 android.telephony.TelephonyManager.getImei 这个 api,我们有做编译时代码织入不调用到系统 api,直接返回空字符串,但是在安全检测的时候却发现还是有调用该系统 api 的情况存在,而且安全检测工具也拿不到具体的堆栈信息,所以猜测可能是通过 c 层反射调用或者是动态下发的插件调用的。 所以想通过在运行时进行代码织入进行相关 api 的拦截。

具体安全检测到的堆栈如下:

QQ_1721015374551

你做的切面的代码发一下

eternallyjie commented 4 months ago

你遇到的具体场景描述一下

目前遇到的场景是对于 android.telephony.TelephonyManager.getImei 这个 api,我们有做编译时代码织入不调用到系统 api,直接返回空字符串,但是在安全检测的时候却发现还是有调用该系统 api 的情况存在,而且安全检测工具也拿不到具体的堆栈信息,所以猜测可能是通过 c 层反射调用或者是动态下发的插件调用的。 所以想通过在运行时进行代码织入进行相关 api 的拦截。 具体安全检测到的堆栈如下: QQ_1721015374551

你做的切面的代码发一下

目前并非通过本库实现的切面,而是基于 https://github.com/Knight-ZXW/LancetX 这个库做的切面。

代码如下:

QQ_1721016269790

FlyJingFish commented 4 months ago

说明下: 1、我认为你说的 C 层反射调用,尤其是调用的还是 SDK 的代码,动态织入也和这个搭不上边吧。 2、另外本库是致力于将代码改造为AOP的工具库,因此我认为要想完全解决你这个问题这已经超出了本库定义的范畴了