首页
社区
课程
招聘
[讨论]JNI注入学习研究讨论
发表于: 2014-7-25 14:42 4184

[讨论]JNI注入学习研究讨论

2014-7-25 14:42
4184
由于公司需要,要对APK某些功能进行调整,由于APK是第三方滴,不想改APK,所以想在平台上做一些操作处理改变APK的行为(主要就是APK的so库 jni 注入替换)。
平台:MTK6572
安卓版本:4.2.1
其他工具IDA,apktools

做过的操作。
把制作好的so文件放入system,并且在init.rc写入
export LD_PRELOAD /system/lib/jnihook.so
生成bin文件下载。
实现不了jni函数的替换,不知道什么原因,知道的童鞋可以指导下。

但是发现一些东西,大家可以讨论下。
发现一:
当安装apk后,在data目录下的apk同名下面会解包so文件,暂时叫1111.so
同时,我在system/lib目录下放入相同名字的1111.so但不同内容
apk运行的时候会去调用自己data目录下的1111.so
如果删除data区的so文件,apk系统会用到system下面的so文件。
我可以在系统上修改在安装的时候,把安装时候会拷贝1111.so不让其拷贝
原文件在com_android_internal_content_NativeLibraryHelper.cpp里的iterateOverNativeFiles里面实现。
但是这种方法带来一个问题,就是apk升级,原库修改很大,特别是接口修改,可能导致apk升级后不能使用。
发现二:
如下有两个so 同时load起来,两个so里面有同名函数供java native调用,对应的库同样放在system/lib下面
        System.loadLibrary("anihook");
        System.loadLibrary("em_gpio_jni");
当使用上面的后,同名的函数,系统会去调用em_gpio_jni的函数。
我现在把anihook 改为 jnihook,库名作相应的修改,系统会区调用jnihook的函数。
总结: 系统字母顺序排序so,并且字母靠后的同名函数会被调用。

目前就发现这两个现象,至于init.rc写入
export LD_PRELOAD /system/lib/jnihook.so
实现不了注入还在研究。
改了linker.cpp相关函数后,还是不行!

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

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//