背景
在不改变APP安装包的前提下修改APP页面的内容。真的可以吗,听起来就好像黑客的操作一样,其实客户端都是不安全。 当前Android有2大hook工具xposed,frida,都能劫持进程,获取堆栈的对象,实现修改,或者注入逻辑等骚操作
简单的修改方法的返回值
我们先写个demo,针对某些方法的返回值进行简单的hook
先写一个靶子,我们对他动刀子。
包好xxx方法,显示嘻嘻嘻内容。
打包,安装到手机中。
编写我们的我的插件程序。
依赖开发包
dependencies {
//不要用过依赖api
compileOnly 'de.robv.android.xposed:api:82'
}
配置版本信息,配置文件增加
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="Easy example" />
<meta-data
android:name="xposedminversion"
android:value="54" />
assets中增加入口配置
创建一个空文件,名字必须xposed_init
打开文件,写我们的启动类的全路径
入口启动类实现xp接口
public class Hook implements IXposedHookLoadPackage{
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
hookWheel(loadPackageParam);
}
}
初步完成配置了。
hook我们的目标程序。
在自己的某个app中,增加了一个工具类,里面有个方法,叫getMyName返回正常的字符串。 现在我们修改返回的字符串。 看看正常效果。
得到了包名,类的全路径,和方法名字。 根据代码,我们知道目标class和方法。
com.x.room.TextClazz#getMyName
开始作弊。
编写hookWheel(loadPackageParam) 记得xp激活我们的模块
Class c = XposedHelpers.findClass("com.x.room.TextClazz", lpparam.classLoader);
if (c != null) {
XposedHelpers.findAndHookMethod(c, "getMyName", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
Object result = param.getResult();
Log.i(TAG, "beforeHookedMethod: " + result);
param.setResult("我是大超越的老公");
}
});
}
重启手机。
第一个简单的例子就是这样了。 后面会出一个hook长按选择文字的工具。