HCLonely / EnableWebViewDebugging-Rules

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

EnableWebViewDebugging-Rules [启用 WebView 调试的规则库]

如何提交

  1. fork 本仓库
  2. 如果是本规则库已收录的app,请直接进入第3步,否则:
    • 新建rules/{包名}文件夹
    • 新建rules/{包名}/metadata.json文件,内容参考其他已有规则
    • 修改rules/rules.json文件,添加{包名}
  3. 如果是本规则库已收录的app版本,请直接进入第4步,否则:
    • 新建rules/{包名}/{版本名}({版本号}).json文件
    • 修改rules/{包名}/metadata.json文件,在versions节点添加{版本名}({版本号})
  4. 修改rules/{包名}/{版本名}({版本号}).json,以如下格式进行规则的编写,其中用*包裹的内容请自行替换
    {
      "*在这填写内置 hook 方法名*": [
        {
          "name": "*在这里填写规则名*",
          "version": *在这里填写规则版本号,格式为正整数,用于检查规则是否有更新*,
          "remark": "*在这里填写规则的相关备注*",
          "require": *在这里填写规则需要的最低模块版本号,格式为正整数*,
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          ...
        }, {
          "name": "*在这里填写规则名*",
          "version": *在这里填写规则版本号,格式为正整数,用于检查规则是否有更新*,
          "remark": "*在这里填写规则的相关备注*",
          "require": *在这里填写规则需要的最低模块版本号,格式为正整数*,
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          ...
        }, {
          "name": "*在这里填写规则名*",
          "version": *在这里填写规则版本号,格式为正整数,用于检查规则是否有更新*,
          "remark": "*在这里填写规则的相关备注*",
          "require": *在这里填写规则需要的最低模块版本号,格式为正整数*,
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          "*在这里填写 hook 参数名*": "*在这里填写 hook 参数内容*",
          ...
        },
        ...
      ]
    }
  5. 对修改进行commit
  6. commit进行pushpull requests

内置 hook 方法及其标准 demo

  1. hookWebView
    {
      "name": "标准 WebView Hook 点",
      "version": 1,
      "remark": "",
      "require": 0,
      "Class_WebView": "android.webkit.WebView",
      "Method_getSettings": "getSettings",
      "Method_setWebContentsDebuggingEnabled": "setWebContentsDebuggingEnabled",
      "Method_setJavaScriptEnabled": "setJavaScriptEnabled",
      "Method_loadUrl": "loadUrl",
      "Method_setWebViewClient": "setWebViewClient"
    }
  2. hookWebViewClient
    {
      "name": "标准 WebView Client Hook 点",
      "version": 1,
      "remark": "",
      "require": 0,
      "Class_WebView": "android.webkit.WebView",
      "Class_WebViewClient": "android.webkit.WebViewClient",
      "Method_onPageFinished": "onPageFinished",
      "Method_evaluateJavascript": "evaluateJavascript",
      "Class_ValueCallback": "android.webkit.ValueCallback"
    }
  3. replaceNebulaUCSDK
    {
      "name": "标准 UC_U4 内核替换 Hook 点",
      "version": 1,
      "remark": "",
      "require": 0,
      "Class_UcServiceSetup": "com.alipay.mobile.nebulauc.impl.UcServiceSetup",
      "Method_updateUCVersionAndSdcardPath": "updateUCVersionAndSdcardPath",
      "Field_sInitUcFromSdcardPath": "sInitUcFromSdcardPath"
    }
  4. hookCrossWalk
    {
      "name": "标准 CrossWalk Hook 点",
      "version": 1,
      "remark": "",
      "require": 0,
      "Class_XWalkView": "org.xwalk.core.XWalkView",
      "Method_getSettings": "getSettings",
      "Method_setJavaScriptEnabled": "setJavaScriptEnabled",
      "Method_loadUrl": "loadUrl",
      "Method_setResourceClient": "setResourceClient",
      "Class_XWalkPreferences": "org.xwalk.core.XWalkPreferences",
      "Method_setValue": "setValue"
    }
  5. hookXWebPreferences
    {
      "name": "标准 XWeb Preferences Hook 点",
      "version": 1,
      "remark": "",
      "require": 0,
      "Class_XWebPreferences": "org.xwalk.core.Preferences",
      "Method_setValue": "setValue"
    }

各内核 demo 可参考如下文件:

  1. WebView
  2. TBS X5
  3. UC U4
  4. CrossWalk

一些说明

  • Method_xxx的参数值可以有两种格式:
    • 纯方法名,如onPageFinished
      • 此时类中所有的onPageFinished方法都会被 hook
    • 方法名+方法参数类型,如onPageFinished(android.webkit.WebView,java.lang.String)
      • 此时只有传参形如(WebView, String)onPageFinished方法才会被 hook
      • 如果无参数,则写作onPageFinished(),表示只有传参形如()onPageFinished方法才会被 hook
  • 规则的参数不是必须的,未设定值的参数将使用模块中内置的默认值
    • 何为未设定:
      • "Class": "123""Class": "",这都是已设定的情况
      • "Class": null、没写这个参数,这都是未设定的情况

一些使用条件

  1. 如需开启远程调试,请确保以下条件满足其中之一:
    1. 对于 WebViewTBS X5 ,至少有一个hookWebView规则生效。
    2. 对于 UC U4 ,至少有一个replaceNebulaUCSDK规则生效,已开启UC 调试内核注入,且选择版本与目标页面所用的内核版本一致。
    3. 对于 CrossWalk ,至少有一个hookCrossWalk规则生效。
  2. 如需注入vConsole,请确保以下条件满足所有:
    1. 至少有一个hookWebViewClient规则生效。
    2. 如果目标页面未开启javascript 执行功能,请确保 #1 条件(远程调试) 满足。
    3. 已开启vConsole注入,且选择版本支持目标页面所用的内核版本。
    4. 目标页面使用了WebViewClient接口。

About