修改服务器返回的js

Author Avatar
贾康 7月 09, 2019

问题场景

android app 里有一个webview,webview加载一个http页,页内加载了一个js,我想修改这个js的内容,往里边加些日志,让他把一些值输出来。

解决过程

我想了两种可能解决方案

  1. 修改缓存在本地的js缓存。
  2. 用mitm拦截返回的js进行修改。这个看起来是可以的。

要修改本地的缓存就要知道js缓存在哪里,找了半天发现在 /data/user/0/{package_name}/cache/org.chromium.android_webview下边,但是里边的js名字已经变了,而且被压缩过了,都是二进制的没法改。
upload successful

换另一个方案,确实拦截到了返回的js,但是js太大了,有1000多kB,找起来太麻烦了。意外的发现可以远程调试android webVew里边的js,这个方案下需要WebView.setWebContentsDebuggingEnabled(true);,恰好这个应用确实把这一项设为true了,当然如果应用将这一项设为false,也可以用xposed模块来搞:
恰好有个现成的xposed模块里边有这个功能,起作用的代码如下:

1
2
3
4
5
6
7
8
findAndHookMethod(WebView.class, "setWebContentsDebuggingEnabled", "boolean", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
boolean value = (boolean) param.args[0];
param.args[0]=true;
XposedBridge.log(TAG + "Web Contents Debugging Enabled: " + String.valueOf(value));
}
});