背景
在不改变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长按选择文字的工具。



 断点-含光君  回复 @ncayu618
 断点-含光君  回复 @ncayu618 


















