hook_dexClassLoader
2017-01-14 15:47:07 0 举报
hook_dexClassLoader是一种用于Android应用程序的Hook技术,它可以在运行时修改或替换系统的DexClassLoader类。通过使用这种技术,开发者可以绕过系统的安全限制,实现一些原本无法实现的功能,例如修改应用程序的行为、破解付费功能等。然而,由于这种行为涉及到对系统底层的篡改,可能会对应用程序的稳定性和安全性产生负面影响,甚至导致应用程序崩溃或被系统卸载。因此,在使用hook_dexClassLoader时需要谨慎,并确保了解其可能带来的风险。
作者其他创作
大纲/内容
performLaunchActivity()
initializeJavaContextClassLoader()
调用getPackageInfoNoCheck()来获取LoadedApk对象
之后,可以获取ClassLoader并利用反射添加进入ActivityThread的mPackages这个缓存中
以Activity为例,如何能加载插件中的Activity呢?从启动一个Activity的最后一步看起,即ActivityThread中的performLaunchActivity()
但是运行时会出现一个异常,提示说无法实例化Application
ClassLoader由r.packageInfo得到,而r.packageInfo是一个LoadedApk对象
getPackageInfoNoCheck()
getPackageInfo()有尝试获取缓存信息,所以可以考虑往缓存中添加数据入手
发现抛出异常是在LoadedApk.makeApplication()中
需要包名和LoadedApk来填充mPackages
之后,可以获取LoadedApk了
getPackageInfo()
构建ApplicationInfo需要解析AndroidManifest文件
加载插件的LoadedApk
至此,可以获取ApplicationInfo了
跟踪代码,发现LoadedApk是在H类的LAUNCH_ACTIVITY消息处被赋值,通过getPackageInfoNoCheck()方法
可以调用自己的XmlParser,也可以调用系统的PackageParser进行解析,不过PackageParser的兼容性不好,需要针对不同的版本进行适配。调用的是PackageParser的generateApplicationInfo()这个static方法
这个可通过Hook PMS之后进行欺骗
发现如果包名不是\"android\
0 条评论
下一页