Android抓包从未如此简单

作者: super可乐 | 来源:发表于2022-07-19 09:44 被阅读0次

    作者:lygttpod
    链接:https://juejin.cn/post/7119083753376317448
    更多资讯请关注公众号【敲代码的小竹】

    一、情景再现:

    有一天你正在王者团战里杀的热火朝天,忽然公司测试人员打你电话问为什么某个功能数据展示不出来了,昨天还好好的纳,是不是你又偷偷写bug了。。。WTF!,你会说:把你手机给我,我连上电脑看看打印的请求日志是不是接口有问题。然后吭哧吭哧搞半天看到接口数据返回的格式确实不对,然后去群里丢了几句服务端人员看一下这个接口,数据有问题。然后有回去打游戏,可惜游戏早已结束,以失败告终,自己还被无情的举报禁赛了。。。

    人生最痛苦的事莫过于此。假如你的项目已经集成了抓包助手,并且也给其他人员介绍过如何使用,那么像这类问题根本就不需要你再来处理了,遇到数据问题他们第一时间会自己看请求数据,而你就可以安心上王者了。

    二、Android抓包现状

    目前常见的抓包工具有Charles、Fiddler、Wireshark等,这些或多或少都需要一些配置,略显麻烦,只适合开发及测试人员玩,如果产品也想看数据怎么办纳,别急,本文的主角登场了,你可以在项目中集成AndroidMonitor,只需两步简单配置即可实现抓包数据可视化功能,随时随地,人人都可以方便快捷的查看请求数据了。

    三、效果展示

    俗话说无图无真相

    四、如何使用

    抓包工具有两个依赖需要添加:monito和monitor-plugin

    Demo下载体验

    源码地址

    1、monitor接入

    添加依赖

       debugImplementation 'io.github.lygttpod:monitor:0.0.4'
    
    

    -备注: 使用debugImplementation是为了只在测试环境中引入

    2、monitor-plugin接入

    1. 根目录build.gradle下添加如下依赖
        buildscript {
            dependencies {
                ......
                //monitor-plugin需要
                classpath 'io.github.lygttpod:monitor-plugin:0.0.1'
            }
        }
    
    
    

    2.添加插件

        在APP的build.gradle中添加:
    
        //插件内部会自动判断debug模式下hook到okhttp
        apply plugin: 'monitor-plugin'
    
    
    

    原则上完成以上两步你的APP就成功集成了抓包工具,很简单有没有,如需定制化服务请看下边的个性化配置

    3、 个性化配置

    1、修改桌面抓包工具入口名字:在主项目string.xml中添加 monitor_app_name即可,例如:
    
       <string name="monitor_app_name">XXX-抓包</string>
    
    2、定制抓包入口logo图标:
    
       添加 monitor_logo.png 即可
    
    3、单个项目使用的话,添加依赖后可直接使用,无需初始化,库里会通过ContentProvider方式自动初始化
    
    默认端口8080(端口号要唯一)
    
    4、多个项目都集成抓包工具,需要对不同项目设置不同的端口和数据库名字,用来做区分
    
    在主项目assets目录下新建 monitor.properties 文件,文件内如如下:对需要变更的参数修改即可
    
        # 抓包助手参数配置
        # Default port = 8080
        # Default dbName = monitor_db
        # ContentTypes白名单,默认application/json,application/xml,text/html,text/plain,text/xml
        # Default whiteContentTypes = application/json,application/xml,text/html,text/plain,text/xml
        # Host白名单,默认全部是白名单
        # Default whiteHosts = 
        # Host黑名单,默认没有黑名单
        # Default blackHosts = 
        # 如何多个项目都集成抓包工具,可以设置不同的端口进行访问
        monitor.port=8080
        monitor.dbName=app_name_monitor_db
    
    

    4、 proguard(默认已经添加混淆,如遇到问题可以添加如下混淆代码)

        # monitor
        -keep class com.lygttpod.monitor.** { *; }
    

    5、 温馨提示

        虽然monitor-plugin只会在debug环境hook代码,
        但是release版编译的时候还是会走一遍Transform操作(空操作),
        为了保险起见建议生产包禁掉此插件。
    
        在jenkins打包机器的《生产环境》的local.properties中添加monitor.enablePlugin=false,全面禁用monitor插件
    
    

    6、如何使用

    • 集成之后编译运行项目即可在手机上自动生成一个抓包入口的图标,点击即可打开可视化页面查看网络请求数据,这样就可以随时随地的查看我们的请求数据了。
    • 虽然可以很方便的查看请求数据了但是手机屏幕太小,看起来不方便怎么办呐,那就去寻找在PC上展示的方法,首先想到的是能不能直接在浏览器里边直接看呐,这样不用安装任何程序在浏览输入一个地址就可以直接查看数据
    • PC和手机在同一局域网的前提下:直接在任意浏览器输入 手机ip地址+抓包工具设置的端口号即可(地址可以在抓包app首页TitleBar上可以看到)

    7、关键原理说明

    • 拦截APP的OKHTTP请求(添加拦截器处理抓包请求,使用ASM字节码插装技术实现)
    • 数据保存到本地数据库(room)
    • APP本地开启一个socket服务AndroidLocalService
    • 与本地socket服务通信
    • UI展示数据(手机端和PC端)

    五、最后

    在使用AndroidMonitor过程遇到任何问题欢迎提Issues,如果对你有帮助,动动你的发财小手点个赞吧!

    相关文章

      网友评论

        本文标题:Android抓包从未如此简单

        本文链接:https://www.haomeiwen.com/subject/fepjirtx.html