本文主要讨论如何在 xposed 模块中调用app中的方法,以及如何 hook 加壳的 app。
调用app中的方法
主要依靠 xposed 提供的几个 api,使用起来类似反射,不过比反射要简单的多。
静态方法
public static java.lang.Object callStaticMethod(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Object... args)
public static java.lang.Object callStaticMethod(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Class<?>[] parameterTypes, java.lang.Object... args)
需要的参数:
-
类名
-
方法名
-
方法参数类型,是数组,比如有两个参数,形式应为:
java.lang.Class<?>[] parameterTypes = {String.class, int.class};,也可以不传,xposed 会自动匹配参数类型。 -
方法参数值
实例方法
public static java.lang.Object callMethod(java.lang.Object obj, java.lang.String methodName, java.lang.Object... args)
public static java.lang.Object callMethod(java.lang.Object obj, java.lang.String methodName, java.lang.Class<?>[] parameterTypes, java.lang.Object... args)
参数与调用静态方法就第一个参数不一样,显然实例方法需要对象,静态方法需要类对象。
构造方法
public static java.lang.Object newInstance(java.lang.Class<?> clazz, java.lang.Object... args)
public static java.lang.Object newInstance(java.lang.Class<?> clazz, java.lang.Class<?>[] parameterTypes, java.lang.Object... args)
需要的参数:
-
类名
-
方法参数类型,是数组,比如有两个参数,形式应为:
java.lang.Class<?>[] parameterTypes = {String.class, int.class};,也可以不传,xposed 会自动匹配参数类型。 -
方法参数值
加壳app的hook
想要hook加壳app中的方法,需要先知道两个基础知识:
-
加壳原理
-
脱壳
脱壳现在有很多的开源项目与脚本,fart,dexdump 都可以完成,只不过可能有些app做了 frida 特征识别,导致脱不下来,这个后面会说到。
加壳的原理其实也不难,简单来说就是,开发者编写的app被藏起来了,展示给我们看的只是包着app的一个壳,所以我们无法看到里面的app内容。但是一个重要的点是,app始终是要运行的,既然要运行,那么壳就会将它包着的app内容给拿出来,所以只要抓住这个点就能很好的理解脱壳。
至于加壳,就是相当于先将 app 给加密,然后在某个时机再解密出来,让其运行。具体可以看下面这些文章:
https://bbs.kanxue.com/thread-254555.htm
https://bbs.kanxue.com/thread-252630.htm
https://bbs.kanxue.com/thread-254028.htm
实战
<看一个例子,材料已上传到 p23 (lebo.apk)。

本文介绍了如何在Xposed模块中调用被加壳应用的方法,包括使用`callStaticMethod`、`callMethod`和`newInstance`,并揭示了如何针对加壳应用进行Hook,特别关注了类加载器和脱壳原理的应用。


1417

被折叠的 条评论
为什么被折叠?



