乐于分享
好东西不私藏

Android APP Webview识别技巧与调试攻略

Android APP Webview识别技巧与调试攻略
免责声明
本公众号及Viego安全团队所发布内容仅供网络安全学习与研究之用,严禁用于非法目的

01

前言

    在日常App测试过程中,我们经常会遇到这样一种情况:有些请求在Yakit、Burp中能明显看到HTML、JS等前端资源,而有些页面却几乎只暴露接口请求,看不到明显的网页痕迹。

    造成这种差异的一个关键原因,就是目标页面是否使用了WebView。

对测试人员来说,这意味着一个很重要的变化:有些师傅可能抓包看到数据包加密就会放弃,但是当目标页面使用了WebView,测试思路就不能只停留在原生层,还需要关注页面中的前端资源以及可能存在的前端加密逻辑。

 本文将围绕两个问题展开:

  1.  如何判断一个App页面是不是WebView页面。

  2.  当WebView中存在加密逻辑时,如何对其中的JS进行调试

02

App 常见的三种形态

    根据app的开发方式,大致可以将app分为以下三类:
  1. 原生app:页面与功能全部由原生代码实现。在Android场景下,通常可以理解为主要由Java或Kotlin编写。
  2. 混合app:部分功能使用原生代码开发,部分功能使用webview开发。
  3. h5 app:应用功能基于WebView容器实现。

03

如何辨认是否为webview页面

那我们如何辨认一个app中哪些页面是java原生开发的,哪些页面是webview页面呢,接下来介绍一个方法。
打开手机的开发者选项,打开显示边界布局。
    我们再打开一个app,如果app中某个页面像下面这样,每一个小按钮都有一个自己的小框,这证明这是一个android原生开发的app。
    如果一个页面像下面这样,每个按钮没有自己的小框,而是整个页面中有个大框,这说明这个页面是一个webview页面,其中展示的内容都是html页面。
    当然也可以通过jadx反编译apk文件,全局查找Webview来判断是否使用了Webview,例如android.webkit.WebView、webView.loadxxx等。

04

调试webview中的js

    在android原生开发的功能中,当我们碰见加密,我们可以用frida hook java代码、算法助手来弄清楚他的加密逻辑。
    如果在Webview中碰见加密,我们可以像调试传统web网站一样对webview中的js文件进行调试。
    在调试webview中的js之前,我们需要有对app中webview的调试权,这需要WebView.setWebContentsDebuggingEnabled(true); 然而市面上的app一般不会给我们这个调试权限,所以我们需要通过以下项目打开webview的调试权限。
项目地址:https://github.com/feix760/WebViewDebugHook
【PS】:apk在项目的/app/release目录下
将apk下载下来装入lsposed中,在lsposed中启用该模块并勾选目标app
    接下来手机连接数据线到电脑,确保adb能获取到设备信息,然后打开app中的webview页面,在edge浏览器中输入edge://inspect进入如下页面
    等待一会儿,就会显示检测到的webview页面,点击inspect即可进入webview的调试页面
    由于是另起了一个窗口,所以我们用不了浏览器自带的插件,那我们有什么快捷的方法进行解密吗?我们可以在Snippets里面写入Hook AES、RSA等加密的js代码
运行APP相关功能成功hook加解密
    这些hook加解密的js代码我们可以通过油猴、插件、Github来获取。可以参考:https://www.cnblogs.com/yoyo1216/p/19186628
    当然有时候并不需要这么麻烦,有些webview界面相关的数据包可能会有路由,我们拖到浏览器可以直接去访问进行解密。
【PS】:如果要使用chrome浏览器进行调试,则在浏览器中输入chrome://inspect,使用chrome浏览器时需要打开科学上网,不然后面会提示404而无法成功调试。                   

05

webview加解密逆向实战

访问APP,发现一个路由很可疑

放到浏览器里面去访问

观察数据包,发现跟APP里面的数据包是一样的,猜测加密逻辑是相同的,我们可以直接在H5页面进行hook,更方便点

    这种全加密的我们只能全局搜索关键词encrypt:、encrypt(,或者打xhr断点,通过一步步调试找到加密位置,可以看到很明显的SM2、SM4加密逻辑还有SM3验签。

后续使用yakit编写热加载代码进行自动化流量加解密,也是靠解密成功挖到签到处存在逻辑缺陷。

06

总结

有什么问题欢迎讨论,共同进步。