这篇文章给大家聊聊关于探索Xposed:深度定制Android的利器,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
场景
需求开发完成,测试通过,制作正式包,加固,上传应用市场。第二天突然发现线上申请有bug,测试环境无法出现。如果使用在线官方包,则看不到日志、调试等。
当然,你说可以在本地构建一个正式的包,可以调试,可以读取日志。如果你觉得不麻烦,当然可以(对于较大的项目可能需要一点时间来编译和打包),但是如果应用程序进行了加固,那么它仍然需要加固,并且调试和修复bug可能有点头疼。
这时候可以用xpose写个插件来调试官方包,打开日志开关,提供崩溃的对话框提示等,这样就不会在原项目中添加任何代码或修改,非常方便。
参考
xposed 开源框架地址xposed-github xposed 插件Xposed Module Repository 不同sdk 版本的框架下载地址Frameworkxpose 编译工具XposedTools 重启系统即可生效。
说明
当然,关于插件开发过程中如何避免修改后重启,网上有解决方案。你可以自己搜索一下。
免重启
设备
root手机、xpose卡刷机包
从框架下载xposed卡刷机包。下载时请务必检查您手机的系统版本和CPU型号。你可以在百度上查CPU型号。使用第三方recovery来刷xposed卡刷写包。 Xpose安装程序.apk
从xda-developers 安装包将其安装到您的手机上。重启手机并打开Xpose installer.apk
如果出现如下界面则说明安装成功。
截图2020-04-13 PM 3.19.27.png 右上角可以打开或关闭xpose。左上角菜单中的模块列出了手机当前安装的xpose插件。它们可以在内部打开或关闭,但需要重新启动系统才能生效。
安装
开发xposed插件需要XposedBridge包。下载后放入项目中。
新建筑
Android Studio 创建一个新的Android 项目或模块来编写钩子类public class XposedHookTest Implements IXposedHookLoadPackage {
@覆盖
公共无效handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam)抛出Throwable {
//待办事项
}
当然,不仅仅可以实现IXposeHookLoadPackage,xpose的具体用法可以自行百度。告诉xpose插件hook实现类
在assets目录下新建xposed_init文件,然后写入hook类的全路径名,例如:com.pds.xposed.hook.XposedHookTest告诉xposed该模块是一个xposed插件
在manifest下的application标签下配置如下代码:安装并启用插件
在手机上安装插件,然后打开上面安装的xpose软件,在模块中找到自己的xpose插件,打开,然后重启系统。核实
重启后,你可以验证一下你的插件是否有效或者你的hook逻辑是否有问题。
开发
如果我们想修改应用程序中的某个变量
公共无效handleLoadPackage(XC_LoadPackage.LoadPackageParam paramLoadPackageParam)抛出Throwable {
//通过包名判断是否是我们要修改的应用程序
if (HOOK_APP_PACKAGE_NAME .equals(packageParam.packageName)){
//查找变量所在的类文件
clazz=XposedHelpers.findClass("com.pds.base.network.RetrofitConfig",classLoader);
//修订
XposeHelpers.setStaticIntField(clazz,"level",2);
}
}
修改变量
现在许多应用程序都使用第三方进行加固。此时传入handleLoadPackage方法的XC_LoadPackage.LoadPackageParam参数中获取的ClassLoader就是第三方加固程序的ClassLoader。如果我们使用这个ClassLoader来查找自己应用程序中的类,就会报“class not found”异常。
加固程序会在自己的Application类中执行一些解密操作。我们可以hook加固程序的Application来获取应用程序真实的ClassLoader实例。下面是360加固的解释。
加固
获取应用程序真正的ClassLoader实现:
私人无效_360Firm(最终XC_LoadPackage.LoadPackageParam packageParam){
//挂钩360外壳
XposeHelpers.findAndHookMethod("com.stub.StubApp", packageParam.classLoader,"getOrigApplicationContext", Context.class, new XC_MethodHook() {
@覆盖
protected void afterHookedMethod(MethodHookParam param) 抛出Throwable {
super.afterHookedMethod(param);
XposeBridge.log("_360Firm afterHookedMethod");
//获取360的Context对象,通过该对象获取classloader
上下文上下文=(上下文) param.args[0];
//获取360的classloader,然后hook加固后的代码就会使用这个classloader
类加载器classLoader=context.getClassLoader();
//替换classloader和hook加固后的真实代码
hookMethod(packageParam,classLoader);
}
});由于第三方加固可能随时修改Application名称、文件位置、方法名称等,所以你还是要懂得自己分析。
分析
首先,解压应用程序,获取解密用的未加固的dex,使用工具反编译成jar,检查Application实现。然后进行相应的修改即可。
360加固
幸运补丁
Xpose模块,有各种破解功能以及网上资料,可以破解HttpCanary,但是我没有成功。
相信我
Xpose模块,关闭证书检测,让https可以直接抓包。
【探索Xposed:深度定制Android的利器】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我一直想试试Xposed框架,听说可以自定义很多手机功能。
有6位网友表示赞同!
最近看到有人说Xposed框架很好用,有没有哪个模块比较推荐的吗?
有16位网友表示赞同!
Xposed的框架这么强大吗?感觉玩了安卓多年还是有些没接触过~
有13位网友表示赞同!
我有一段时间想要刷机,但是担心可能会出现问题。听说Xposed可以不需要刷机就能修改手机功能?
有14位网友表示赞同!
想在手机上安装某个第三方应用,可是需要root权限,听别人说Xposed可以用么?
有14位网友表示赞同!
玩安卓的同学们,有没有用过Xposed框架的建议?有哪些需要注意的地方?
有11位网友表示赞同!
感觉很多手机的功能都比较固化,如果能用Xposed自己修改就好了。
有18位网友表示赞同!
听说Xposed框架可以提高手机性能?是真的吗?
有9位网友表示赞同!
之前我用手机的时候经常会遇到一些bug,不知道用Xposed会不会解决这些问题?
有20位网友表示赞同!
最近在网上看有人说Xposed框架比较危险,真的这样吗?
有13位网友表示赞同!
有没有使用过Xposed的同学分享一下你们的使用经验呢?什么模块好用啊?
有20位网友表示赞同!
Xposed框架的教程比较难学吗?想尝试一下但不知道从哪开始。
有20位网友表示赞同!
用Xposed修改手机功能会对手机造成风险吗?会不会影响保修?
有7位网友表示赞同!
我已经root权限了,那么可以用Xposed来进行一些操作了是么?
有18位网友表示赞同!
想知道Xposed框架的使用范围有多广啊,还能干什么?
有13位网友表示赞同!
听说现在很多手机都自带Xposed框架功能了吗?是真的吗?
有9位网友表示赞同!
我手机没有root权限,可以用Xposed吗?有什么替代方法吗?
有5位网友表示赞同!
想通过Xposed来提升手机的运行效率,请问有哪些模块比较推荐?
有11位网友表示赞同!