Android webview数据获取 webview抓取

总结下 Android下 webview的数据获取、抓取。

先说总结的情况

方法一:给webview setWebViewClient,然后重写shouldInterceptRequest,获取请求参数,自己发起请求,返回WebResourceResponse。
方法二:WebViewClient 的onPageFinished 方法里面注入js,来获取html
如果是自己应用很简单,如果是其他APP,就是找Hook点,拿到webview,找到设置的WebViewClient 就可以了,剩下的跟自己的APP一样去写。

**

方法一:拦截伪造请求
**
流程就是自己拦截webview的请求,获取请求参数,自己发起请求,然后获取的数据,在给webview即可。

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
      // 获取 url  cookie 、head等信息
      URL url = new URL(request.getUrl());
          // 自己截获,发起http请求 ,直接发起http请求,       
      
        // 把请求的数据构建成WebResourceResponse ,让wevbview正常显示
        return new WebResourceResponse(mimeType, connection.getContentEncoding(), connection.getInputStream());
    }

});
1
2
3
4
5
6
7
8
9
10
11
12
方法二:通过js注入来获取
首先是获取网页HTML的js是

document.getElementsByTagName('html')[0].innerHTML;
1
只需要在合适时间,注入js,就能获取到网页源码,最好的时间,就是 页面加载完成后,就是
WebViewClient 的onPageFinished 方法。示例代码

webView.setWebViewClient(new WebViewClient() {


            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onPageFinished(WebView view, String url) {
                Log.e("TAG", "页面加载完成" + url);
                if (url.startsWith("https://xxxxxxx?")){
                    // js 1 直接获取
                    webView.evaluateJavascript("document.getElementsByTagName('html')[0].innerHTML;",
                            new ValueCallback<String>() {
                                @Override
                                public void onReceiveValue(String value) {
                                    Log.e("TAG"," 网页源码里是 " +value);
                                }
                            });
//                    webView.evaluateJavascript("window.alert(document.getElementsByTagName('html')[0].innerHTML);",null); //js二通过 alert 
                }
                super.onPageFinished(view, url);

            }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
用js1可以直接在回调里拿到js的执行结果。
用js2可以在WebChromeClient 的onJsAlert获取到 alert的参数。

如果逆向搞别的APP,直接hook onPageFinished 方法如

  // webview的hook
    private void webViewHook(XC_LoadPackage.LoadPackageParam loadPackageParam) {
        XposedHelpers.findAndHookMethod("xxxxxxx",// app的WebViewClient  的具体实现类
                loadPackageParam.classLoader,
                "onPageFinished",
                WebView.class,
                String.class,
                new XC_MethodHook() {
                    @Override
                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        Log.e(TAG, "======================webview  beforeHookedMethod");
                        super.beforeHookedMethod(param);
                    }

                    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                        Log.e(TAG, "======================webview  afterHookedMethod");
                        String url = null;
                        if (param.args.length == 2) {
                            url = (String) param.args[1];
                            Log.e(TAG, " =====url 是 " + url);
                        }
                         // url 过滤
                        if (url == null || !url.startsWith("https://xxxxx")) {
                            return;
                        }
                        WebView webView = (WebView) param.args[0];
                        webView.evaluateJavascript("document.getElementsByTagName('html')[0].innerHTML;",
                                new ValueCallback<String>() {
                                    @Override
                                    public void onReceiveValue(String value) {
                                        Log.e(TAG, " js注入获取到的网页源码是 " + value);
                                    }
                                });
                        super.afterHookedMethod(param);
                    }
                }
        );
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
如果对方APP没有WebViewClient ,直接拿到webview 在hook插件里设置一个就行,
因为调用的都是系统的class,所以不需要反射,直接在xposed插件里像写正常代码一样设置webview就可。
————————————————
版权声明:本文为CSDN博主「spinchao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/spinchao/article/details/104769061

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值