V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
z1421012325
V2EX  ›  Python

关于手机 app 抓包一般流程是不是使用 fiddler 或者 Charles 来查找接口,在使用 mitmproxy 的 mitmdunmp 对接口所含有的数据进行提取,再用自动化 appium 或者 AirtestIDE 控制?

  •  
  •   z1421012325 · 2019-06-20 10:44:10 +08:00 · 5703 次点击
    这是一个创建于 2018 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    我这边是没办法测试这个流程了,因为我的手机和电脑按照上面这几个软件所写的开端口,手机搞证书搞代理,但是只能抓取到 http 的,https 根本抓不到.

    fiddler 根据设置,发现我只有在 pc 端可以看到 https 请求和内容,手机上设置完 网络就出现问题 并且在 fiddler 中发送的 https 请求看不到, http://i2.tiimg.com/691087/985a55c38b750b7e.png

    但使用 pc 访问手机版的 V2EX 能看到 https 请求,内容也看得到 http://i2.tiimg.com/691087/7b490d2497620ecf.png

    http://i2.tiimg.com/691087/bcea635ba47531e0.png

    使用 mitmproxy 中只能看到有 http 请求,
    并且在手机上设置代理 ip:8080,我去访问 bilibili 时网络无法连接的情况 http://i2.tiimg.com/691087/b203a4b95300089b.png

    charles 也是同样,设置了代理 ip:8888,证书,ssl,能看到 https 请求,但出现 unknown 显示,显示都是乱码 http://i2.tiimg.com/691087/97d9d4e77e7f8684.png

    也就只有自动化软件能用了...

    有哪位知道怎么搞定这些,能否告知一下


    我先来说说流程

    相对页面的数据进行抓取

    (1) 使用 fiddler 或者 Charles 想抓取的接口

    (2) 编写要在 mitmdump 筛选提取 addons.py 文件

    (2)(1)

    impoer mitmproxy.http.HTTPFlow

    from mitmproxy import ctx, http

    def response(self, flow: mitmproxy.http.HTTPFlow):

    if '找到接口中所有含有的关键字' in flow.response.url or flow.request.host == "关键字":
    
    	text = flow.response.get_text()
        
        text = re.findall('提取的内容',text)
        
        #存入数据库或者文本
    	
        with open(....)as f:
        	
            f.writer(text)
    

    addons = [ response() ]

    (2)(2)

    开启 mitmproxy 中的 mitmweb ->>> 直接在命令行开启 mitmweb

    (2)(3)

    mitmdump 加载刚刚写出来的文件 ->>> 加载文件 mitmdump -s addons.py

    这样手机在使用 app 滑动的时候,mitmdump 会对所有经过的请求进行过滤,进行文本提取,保存

    (3) 上面几乎已经完成,只需要使用自动化工具 appium 或者 AirtestIDE 来对手机不断滑动发送请求,mtimdump 则保存


    网络上教程太少了,文档也就那么几个反反复复,

    这个流程是否正确??????????? 是可以无视 js 和加密的把?

    第 1 条附言  ·  2019-06-21 16:02:41 +08:00
    更新一下,对于 mitmproxy 的控制,

    下载 pip 下载下来的 mitmproxy 其实是三个程序,分别是 mitmproxy,mitmweb 和 itmdump

    其中 mitmproxy,mitmweb 可以分为一个用途,只是功能差异不是很大,都是对抓取的 url 分析.但是 mitmproxy 不能在 win 上使用,所以一般在 win 上使用的是 mitmweb

    我这里流程写错了,今天在抓取的时候发现,win 上只要先开启 mitmweb 在开启 mitmdump,后一个就不会运行,一直保持监听状态,所以在抓取的时候最好确定接口,编写链接内容,对该接口 url 进行拦截时,请确定只开启一个 mitmdump

    ------------------------------------------------------------------------------------------------------------------------

    还有第一个流程其实用 mitmweb 来抓接口也是可以的,不过不如 charles 那么直接,界面特别乱

    使用第一第二流程要注意默然的端口是不一样的,如果你设置一样的端口请无视,一个是 8888,一个是 8080,注意每个流程使用完成之后关闭当前流程抓包软件,修改手机上的 ip 端口
    39 条回复    2019-07-05 10:08:08 +08:00
    newGamingLife
        1
    newGamingLife  
       2019-06-20 10:57:16 +08:00
    噶 你的头像和我做的事情真的是一模一样。。。怀疑是不是自己梦游建的账号发的帖
    newGamingLife
        2
    newGamingLife  
       2019-06-20 10:57:36 +08:00
    小声 BB,微信头像
    z1421012325
        3
    z1421012325  
    OP
       2019-06-20 11:53:52 +08:00
    更新一下,我试了用 ios,结果可以用 chlarles 抓取到 https 的请求了,果然是小米手机的问题吗?

    http://i1.fuimg.com/691087/749b4cdaed5b307c.png

    http://i1.fuimg.com/691087/511747de62e4717a.png
    z1421012325
        4
    z1421012325  
    OP
       2019-06-20 11:54:22 +08:00
    抓的起点和趣天下
    artandlol
        5
    artandlol  
       2019-06-20 11:55:53 +08:00 via Android
    用 goproxy
    crab
        6
    crab  
       2019-06-20 11:56:10 +08:00
    反编译 app,得到算法密钥类能算出签名,直接 api 请求了吧?
    KuroNekoFan
        7
    KuroNekoFan  
       2019-06-20 11:58:38 +08:00 via iPhone   ❤️ 4
    android7 之后,用户证书不再被信任,抓不到 https 是正常的,root 了之后把用户证书移到信任区应该可以,另外一种情况是 sslpinging,不太了解
    z1421012325
        8
    z1421012325  
    OP
       2019-06-20 12:58:27 +08:00
    @crab 我要是能这么弄,我还需要这么多流程搞的这么乱吗........

    不动反编译 app 啊
    crab
        9
    crab  
       2019-06-20 13:03:12 +08:00
    @z1421012325 还是得到反编译这阶段啊。抓不到 https 你查下 SSL Pinning。
    des
        10
    des  
       2019-06-20 13:08:02 +08:00
    @z1421012325 JustTruestMe 走起
    z1421012325
        11
    z1421012325  
    OP
       2019-06-20 13:17:44 +08:00
    @artandlol 我看了一下,这个软件使用来建立代理服务器开端口用的? 不懂
    z919126592
        12
    z919126592  
       2019-06-20 13:25:59 +08:00
    Xposed+JustTruestme
    stop9125
        13
    stop9125  
       2019-06-20 14:12:25 +08:00
    安卓 8(?不确定)之后只信任系统证书了
    z1421012325
        14
    z1421012325  
    OP
       2019-06-20 14:24:50 +08:00
    @KuroNekoFan 不敢 root 自己用的手机, ios 我测试了可以抓 https 的, sslpinnning 也不可能每个 app 都用了吧
    z1421012325
        15
    z1421012325  
    OP
       2019-06-20 14:29:26 +08:00
    @crab 难道爬虫终极阶段要有反编译 app 的能力吗,别吓我. 也不可能能每个 app 都有 SSL Pinning 吧?,ios 手机测试了能抓到 https


    是安卓版本问题吧?
    artandlol
        16
    artandlol  
       2019-06-20 15:03:40 +08:00 via Android
    @z1421012325 golang 版本的,静态文件比 mitproxy 好用
    muchengxue
        17
    muchengxue  
       2019-06-20 15:16:05 +08:00
    小米 note4 charles 抓起点 https 没问题
    yoqu
        18
    yoqu  
       2019-06-20 15:42:41 +08:00
    @z1421012325 安卓 8.0 以后用户自己安装的证书都不认了,需要 root 权限安装证书到设备中
    z1421012325
        19
    z1421012325  
    OP
       2019-06-20 15:42:54 +08:00
    @muchengxue 应该是安卓版本没有到 8 把?
    lzvezr
        20
    lzvezr  
       2019-06-20 15:44:25 +08:00 via iPhone
    弄个 Android6.0 的实机或者虚拟机是最好的,低版本 xposed 支持不好,高版本安全性太高
    z1421012325
        21
    z1421012325  
    OP
       2019-06-20 15:44:32 +08:00
    @artandlol go'看不懂,再说了我也只是 app 抓数据,不可能数据都给加密了吧,中途拦截数据 mitmdump 挺好用的,简单
    z1421012325
        22
    z1421012325  
    OP
       2019-06-20 15:46:13 +08:00
    @lzvezr 哈哈 我也正在做虚拟机版的,


    不知道 windows 的电脑使用 AirtestIDE 能不能控制 ios 啊?
    KuroNekoFan
        23
    KuroNekoFan  
       2019-06-20 16:12:39 +08:00
    @z1421012325 找个 android5/6 的设备呗...
    Jirajine
        24
    Jirajine  
       2019-06-20 16:25:17 +08:00 via Android
    楼上说 root 导入到系统 CA 真的尝试过吗?我弄了很多次,确定按正确格式导入,权限也配置好,仍然不被信任。
    至于 justtrustme,试了下他的 release 版仍然不行,回去编译一下看看。
    locoz
        25
    locoz  
       2019-06-20 16:34:00 +08:00   ❤️ 4
    可以看一下我的这几篇文章
    [当你写爬虫遇到 APP 的请求有加密参数时该怎么办? [初级篇-常规模式] ]( https://mp.weixin.qq.com/s/KFM37LN7phd8nbI8iIHDtw)

    [当你写爬虫遇到 APP 的请求有加密参数时该怎么办? [初级篇-秒杀模式] ]( https://mp.weixin.qq.com/s/_FjW6zzBv7-LENfB9B2loA)

    [当你写爬虫抓不到 APP 请求包的时候该怎么办? [初级篇] ]( https://zhuanlan.zhihu.com/p/46433599)

    [当你写爬虫抓不到 APP 请求包的时候该怎么办? [中级篇] ]( https://zhuanlan.zhihu.com/p/56397466)

    [当你写爬虫抓不到 APP 请求包的时候该怎么办? [高级篇-混淆导致通用 Hook 工具失效] ]( https://zhuanlan.zhihu.com/p/63028507)
    unclemcz
        26
    unclemcz  
       2019-06-20 19:07:26 +08:00 via Android
    @locoz 膜拜大佬
    duan602728596
        27
    duan602728596  
       2019-06-20 19:44:56 +08:00 via iPhone
    ios 直接越狱然后装个 ssl-kill-switch2 就能抓到了啊
    z1421012325
        28
    z1421012325  
    OP
       2019-06-20 22:56:15 +08:00
    @Jirajine 我用模拟器试了下,直接用安卓版本 5.0 以上的 用 xposed +justtrustme 可以无视证书,证书的安装也不用了,charles 能抓到 https 的请求了 这是我写的随笔 https://www.cnblogs.com/zengxm/p/11061900.html
    z1421012325
        29
    z1421012325  
    OP
       2019-06-20 23:34:16 +08:00
    @duan602728596 根据需求来越狱吧? 我直接在 wifi 中写入代理和端口,在 ios 自带的浏览器上下证书,直接安装信任就好了,直接抓到 https 的请求,比起安卓简单的太多了,除非 app 中含有 sslpinning 才需要把?我尝试了起点的 https 请求可以抓到,抖音也行
    locoz
        30
    locoz  
       2019-06-21 00:18:43 +08:00
    @unclemcz #26
    jamev5
        31
    jamev5  
       2019-06-21 00:24:06 +08:00 via Android
    还有种简单的方法是安装平行空间,在平行空间里打开对应的软件,然后抓包平行空间的请求就可以了。
    hp66722667
        32
    hp66722667  
       2019-06-21 09:48:55 +08:00
    https 指定是能抓到的,跟手机没关系,因为我们测试过小米,华为,IOS
    unclemcz
        33
    unclemcz  
       2019-06-21 10:57:36 +08:00
    @hp66722667 要看情况,没做证书验证随便抓,如果客户端有做证书验证,就要干掉 sslpinning,进一步如果客户端服务端做双向验证,则还要找到客户端保存的证书和秘钥,@locoz 发在站上的系列文章,算是很全面教程了。
    foxyier
        34
    foxyier  
       2019-06-21 14:02:19 +08:00
    @locoz 学到了。666
    z1421012325
        35
    z1421012325  
    OP
       2019-06-21 15:50:32 +08:00
    @jamev5 这种对于证书能搞定吗,对安卓版本有没有要求啊?
    z1421012325
        36
    z1421012325  
    OP
       2019-06-21 22:33:38 +08:00
    @locoz 感谢大佬的文档,不过我有个问题,

    比如我是在 win 下使用 mitmdump 拦截数据保存的,

    但是我需要手动滑动一些页面,想要使用自动化软件 airtestIDE 让手机自动化,发现使用的是模拟器,没有使用真机,想知道怎么无线让两个运作起来??共用同一个端口也不行吧?


    网络上的教程都是使用抓包软甲+有线 adb 手机抓取, 难道只能使用真机+有线来操控吗
    gaopan123
        37
    gaopan123  
       2019-07-05 10:01:05 +08:00
    感谢 @locoz,我目前也是刚深入到 LZ 的地步,止步于 xposed
    locoz
        38
    locoz  
       2019-07-05 10:07:44 +08:00
    @z1421012325 #36 卧槽我居然没看到你这个回复的,赶紧补一下,ADB 群控可以用网络控制,不一定非要有线,这些都是灰黑产玩烂的东西了。最简单的就是网络 ADB,但效率没有直接用专门的网络群控 APP+控制端高,而且连接不太稳定,管理起来也不是很方便,所以如果要搞的话建议走第二个方案。
    locoz
        39
    locoz  
       2019-07-05 10:08:08 +08:00
    @gaopan123 #37 能对你有帮助就好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:49 · PVG 11:49 · LAX 19:49 · JFK 22:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.