-
-
[原创]xposed的一些经验分享
-
发表于: 2020-11-5 10:45 5199
-
加壳的应用上如何用xposed
如下代码是某个通过棒棒加固的APP,首先获取到加固替换掉的Application然后再获取到ClassLoader,其实跟Xposed的loadPackageParam.classLoader一个原理,只是加固应用多了一步。
final Class clazz = XposedHelpers.findClassIfExists("com.secneo.apkwrapper.AW",loadPackageParam.classLoader); if(clazz!=null) { XposedHelpers.findAndHookMethod(clazz, "onCreate", new XC_MethodHook() { public void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { sApplication = (Application)XposedHelpers.getStaticObjectField(clazz,"a"); sClassLoader = syApplication.getClassLoader(); HookTools.hookFunc(sClassLoader); } }); }
函数中传的接口类(interface)
这个很多网站上有案例,通过java.lang.reflect.Proxy能解决。很多人到了hook异步请求或者rxjava就头疼,因为很多参数或者返回值都是类似A<T>或者interface,配合下面实例可以轻松解决。
public static Object Proxy(ClassLoader classLoader) { return Proxy.newProxyInstance(classLoader, new Class[]{XposedHelpers.findClass("bolts.Continuation", classLoader)}, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (method.getName().equals("then")) { Object task = args[0]; Gson gson = new Gson(); JSONObject object = JSON.parseObject(gson.toJson(XposedHelpers.callMethod(task,"getResult"))); //获取值 return null; } return null; } }); } //调用方法 XposedHelpers.callMethod(respon,"continueWith",Proxy(classLoader));
其他问题
如果需要用APP内的Context的话直接搜索public static Context关键词能搜索到很多函数随便调用。
需要某个实例化类先找找APP内的instance函数或者获取实例的static函数,如果没有的话用xposed去instance
callMetchod传enum类型的参数
// XposedHelpers.callMethod(classObject,"method", Enum.valueOf(enumClass, "One"))
处理异步请求结果时配合Map和sleep
//保存异步结果的全局map public static Map<String,String> keymap = new ConcurrentHashMap(); //异步框架的参数实现类代理 public static Object Proxy(ClassLoader classLoader,String key) { return Proxy.newProxyInstance(classLoader, new Class[]{XposedHelpers.findClass("bolts.Continuation", classLoader)}, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //获取到值后放到map里 keymap.put(key,object); return null; } }); } /** * 省略一段代码 */ //response等于bolts框架的Task.onSuccessTask或者Task.call的返回。 String key = String.valueOf(System.currentTimeMillis()); XposedHelpers.callMethod(response,"continueWith",Proxy(classLoader,key)); Thread.sleep(1000); if(keymap.containsKey(key)){ return JSON.parseObject(keymap.remove(key)); }
上述的一些问题可能不常见或者网上资料少分散的,xposed开发时遇到的问题其实很多,有些跟国产ROM相关,有些跟安卓版本相关,这些只能看命了。
最后于 2020-11-5 10:51
被AyonA333编辑
,原因:
赞赏
他的文章
- 基于xhook和xposed的改机软件 9210
- [原创]某直播弹幕协议分析 11611
- [原创]某手quic转https后抓包 17185
- [原创]利用xhook安卓系统底层抹机原理 15930
- [分享][原创]分析微信视频号的过程 12831
赞赏
雪币:
留言: