• 哈萨克斯坦今年计划启动1吉瓦可再生能源项目 2019-06-16
  • 有理讲理,不要诬蔑。 2019-06-16
  • 新鲜出炉 三款高颜值个性SUV你准备好了么? 2019-06-15
  • 张育林代表推进泰兴经济社会发展高质量上台阶 2019-06-08
  • 光明日报副总编辑李春林 2019-06-07
  • 紫光阁中共中央国家机关工作委员会 2019-06-06
  • 国务院部署实施蓝天保卫战三年计划 2019-06-06
  • 最高法发布互联网公开审判流程信息规定 9月1日起施行 2019-06-02
  • 一周新疆新闻图片扫描(6.2——6.8) 2019-06-02
  • 海底捞回应侵犯音乐人林海著作权:已停止播放 2019-05-25
  • 十三届全国人大一次会议在北京闭幕 2019-05-19
  • 清明美食之青团:从祭祖供品到时令小吃 2019-05-19
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-15
  • 非洲大叔都中暑了,高温津贴更应阶梯化 2019-05-15
  • 海南省委常委张韵声任宁夏回族自治区党委政法委书记 2019-05-08
  • 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|新疆喜乐彩开奖介绍 www.sl-36.com

     找回密码
     注册[Register]

    QQ登录

    只需一步,快速开始

    搜索
    查看: 3551|回复: 39
    上一主题 下一主题

    新疆福利彩票25选7: [Android 原创] Android抓包指南①: 使用Fiddler抓HTTP/HTTPS包

        [复制链接]
    跳转到指定楼层
    楼主
    encoderlee 发表于 2019-5-30 11:01 回帖奖励
    本帖最后由 encoderlee 于 2019-6-16 13:53 编辑

    新疆喜乐彩开奖介绍 www.sl-36.com 本文是原创文章,转自本人博客,为新手学习Android逆向过程中的心得总结,文章内容为初级知识,高手勿喷

    抓包的重要性

    网络抓包,是Android应用逆向分析的重中之重,很多时候我们拿到一个APP,不知道从何入手分析,往往是从抓包开始,先弄清楚他与服务器通信的内容,如果一目了然,我们完全可以照搬,自行写一个程序来模拟,如果有一些加密字段和随机字段,也不用担心,我们可以从抓包中了解到一些关键的URL和session之类的信息,然后再反编译分析代码的时候,这些字符串可以帮助我们更快的定位关键代码所在之处。

    Fiddler的使用

    Fiddler简直是HTTP抓包分析的神器,比Chrome等浏览器自带的调试工具高不知道哪去了,浏览器自带的调试工具,基本只能查看包内容,而Fiddler除了查看,还可以针对不同类型的内容进行格式化,观赏效果真的不要太爽。除了“看”数据包,它还可以一键重发HTTP请求,修改请求内容并重发HTTP请求,拦截修改数据包,返回预设的欺骗性内容等,还可以编写脚本进行更高级的自动化处理。
    废话不多说,到Fiddler官网下载安装:https://www.telerik.com/fiddler


    接下来,我们要开启Fiddler的HTTPS抓包功能,否则只能看到HTTP请求的内容,而HTTPS请求则是密文。
    在Fiddler中点击 [Tools] — [Options] — [HTTPS] 勾选如下设置:

    然后在 [Connections] 选项卡中勾选 [Allow remote computers to connect],我们知道Fiddler默认在8888端口开启HTTP/HTTPS代{过}{滤}理服务,不管是Android、IPhone还是PC等等设备和程序,只要设置了HTTP/HTTPS代{过}{滤}理,流量从Fiddler走,就可以抓包分析。此处开启远程访问,使得我们的Android/Iphone手机可以在WLAN设置上设置它为HTTP/HTTPS代{过}{滤}理,从而手机上的应用的HTTP/HTTPS流量将从Fiddler走,Fiddler就能捕获它们。

    然后确保手机和PC在同一个局域网中,然后在手机上设置WLAN代{过}{滤}理,此处我的PC内网IP地址是192.168.1.100,你需要根据自己的情况进行设置:

    然后我们在手机浏览器中打开//192.168.1.100:8888 下载Fiddler根证书并安装
    这是Fiddler解密HTTPS通信的关键,Fiddler对HTTPS包解密的原理是中间人攻击,对客户端声称自己的服务端,对服务端声称自己的客户端,两头欺骗。当然要想欺骗成功,前提是让客户端信任自己的根证书,接下来就可以愉快的观看HTTPS请求明文内容了。

    畅快的抓包

    Fiddler这个抓包方法,不仅对Android有用,对IPhone也有用。接下来在手机上,无论是打开浏览器,打开手机上的应用,应用内嵌的WebView,我们都可以在Fiddler中看到HTTP/HTTPS请求内容,但细心查看就会发现,还是有的HTTP包装不到。一般能抓到包的几种情况:

    • Android内置浏览器
    • 应用内置WebView
    • 应用使用URLConnection或OkHttp发起HTTP请求

    抓不到包,很可能目标APP使用了其它HTTP Client,比如自带一个libcurl的so,那样最终调用的是系统的Socket API,WLAN上设置的HTTP/HTTPS代{过}{滤}理对它无效,但其实这种情况很少,市面上绝大多数的应用,都是使用URLConnection和OkHttp,尤其是近些年的应用,几乎都是清一色的OkHttp,所以绝大多数情况下都能抓到包,如果抓不到,很可能是应用自己进行了额外的SSL证书校验工作,根据情况再特殊分析特殊处理。

    注意!Android7.0以后抓包失败

    以前我一直都是在Android5.1的手机上抓包分析应用,屡试不爽,但是近来使用Android7.1和Android8.1的手机,发现按照上面设置以后,尽管向Android导入了Fiddler的根证书,还是没法抓到HTTPS包的内容。

       
    以 [云闪付] 为例,具体表现为APP中的WebView无法打开内容,和网络断开了一般,Fiddler中可以看到大量的CONNECT然后就没有下文了。

    回顾之前我们总结的Fiddler抓不到包的原因 《Windows抓包指南(二):Fiddler抓不到的包是怎么回事?》可以猜想,很可能在Android7.0以及以后的版本,即便是导入了Fiddler根证书,但是APP的URLConnection、OkHttp、WebView,仍然不信任系统中导入的Fiddler根证书。

    验证猜想

    自行编写Android应用,分别使用URLConnection、OkHttp发起HTTPS请求,用WebView打开HTTPS的网页,看看出了什么错误。

    try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url("https://www.csdn.net")
                    .build();
            Response response = client.newCall(request).execute();
            String back_data = response.body().string();
    }
    catch (Exception e){
            Log.e("TestHttp", e.toString());
    }

    运行后果然抛出了异常:

    javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValIDAtorException: Trust anchor for certification path not found.

    不出所料,和我们之前在Windows上分析的情况一样,客户端并不信任我们导入系统的Fiddler根证书,那为什么在Android6.0及以前能正常工作呢?经过查阅资料,这个改动果然是从Android7.0开始的。
    查看Android官方文档说明:https://developer.android.com/training/articles/security-config.html

    By default, secure connections (using protocols like TLS and HTTPS) from all apps trust the pre-installed system CAs, and apps targeting Android 6.0 (API level 23) and lower also trust the user-added CA store by default.

    果然,在Android 6.0 (API level 23)及以前,APP默认信任系统自带的CA证书以及用于导入的CA证书,Android 6.0 (API level 23)以后,APP默认只信任系统自带的CA证书,对于用户导入的不予理会。

    也就是说,关于 [network-security-config],在Android 6.0 (API level 23)及以前默认是这样的:

    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>

    Android 7.0 (API level 24) 及以后是这样的:

    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

    同时在上面的链接中,Google也给出了办法,怎么在Android7.0及以后的系统中,让APP信任我们手工导入的CA证书。
    那就是在编译APK之前,在你的Android项目的res文件夹下创建xml文件 [net_security_config.xml] 内容为:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config xmlns:android="//schemas.android.com/apk/res/android">
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" overridePins="true" />
                <certificates src="user" overridePins="true" />
            </trust-anchors>
        </base-config>
    </network-security-config>

    然后在AndroidManifest.xml中的application标签下添加

    android:networkSecurityConfig="@xml/net_security_config.xml"

    编译安装,然后该APP就信任用户添加的CA证书,从而Fiddler就可以抓到它的HTTPS包并解密内容。

    Are You Kidding Me?

    什么?你让我重新编译APP?我就是要分析第三方APP的通信协议,你让我重新编译微信?重新编译QQ?
    非也非也,还记得我们之前在《Windows抓包指南(一):Proxifier+Fiddler对第三方程序强制抓包》中说的吗?

    有条件要上,没有条件创造条件也要上!

    四个解决方案

    强上的办法有四个:

    ① 重新打包目标APK,修改AndroidManifest.xml

    我们可以使用Apktool等工具对目标APK进行解包,添加 [net_security_config.xml] 并修改 [AndroidManifest.xml] 然后重新打包。但是现在很多应用都做了防打包处理,要么利用Apktool弱点,制造错误让Apktool抛异常,要么重新打包后程序校验自身证书,校验失败无法启动,罢工。

    ② Root手机,安装Xposed框架,使用JustTrustMe??楦伤?/p>

    这个方案实际上就是之前我们在 《Windows抓包指南(二):Fiddler抓不到的包是怎么回事?》中的思路在Android上的实践。Xposed的JustTrustMe??镠ook了Android SDK的HTTP库,强制跳过SSL证书验证,不管是真证书还是假证书,一律验证通过,于是Fiddler作为中间人攻击制造的假证书也被通过了。

    JustTrustMe项目源代码:https://github.com/Fuzion24/JustTrustMe

    需要注意的是JustTrustMe有个坑,不要下载它Github中编译的Latest release版本,其实那是一个很古老的版本,对于APP内嵌的WebView没有做处理,安装以后,URLConnection、OkHttp通信的HTTPS是可以抓到了,但是APP内嵌的WebView仍然出错。所以最好git clone它的最新源代码,然后自行编译。

    也可以下载我编译的最新版本:https://github.com/encoderlee/JustTrustMe/releases/download/v0.3/JustTrustMe_20190516.apk

    当然这个方案也有缺点,毕竟手机被Root后,还安装了Xposed框架,有的APP可是会检测的,发现手机被Root,或者自身被Xposed Hook,就罢工了。

    ③退缩,使用Android5.1 Android6.0的手机来抓包分析

    ④终极大法,购入Google亲儿子手机,比如Nexus Pixel,下载Android AOSP代码,直接修改Android系统源代码,强行验证所有SSL证书为真,编译,刷机,愉快工作。

    愉快的抓包分析


    可以看到,在使用了方案②后,Android7.1.2的手机,成功解密APP的HTTPS通信内容

    不要高兴的太早

    此处,虽然依旧能抓到大部分Android APP的HTTP/HTTPS包,但是别高兴的太早,有的APP为了防抓包,还做了很多操作:
    ① 二次加密
    有的APP,在涉及到关键数据通信时,会将正文二次加密后才通过HTTPS发送,我们抓包抓到的是一堆二进制base64
    ② 自带HTTP Client
    像支付宝那样的变态,自己带了一个基于so的HTTP Client库,对于关键数据,都不走URLConnection和OkHttp,而是走自己的HTTP Client库,甚至一些WebView页面的渲染,都是先用自带的HTTP Client请求得到json数据,然后填到HTML模板里面,再在WebView里渲染出来。
    ③ SSL/TLS Pinning,APP自带服务端证书,除了自带证书什么都不信

    当然,兵来将挡,水来土掩,针对各种情况再逐一对症分析,弄清楚原理,才能解决更多的难题,在逆向工程的道路上走的越远。
    抓包的基本方法已经介绍完毕,后续文章将会分享一些我在工作中遇到的Windows、Android平台上无法抓包的难题及解决方案,感谢持续关注。。。

    本文由encoderlee发表于CSDN博客:https://blog.csdn.net/CharlesSimonyi/article/details/90493122 转载请注明出处

    20190524002010766.png (170.93 KB, 下载次数: 0)

    描述

    描述

    免费评分

    参与人数 22威望 +2 吾爱币 +32 热心值 +21 收起 理由
    zhansheng + 1 + 1 谢谢@Thanks!
    陈少上52 + 1 + 1 我很赞同!
    夏雨微凉 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
    yehui. + 1 + 1 我很赞同!
    sangong + 1 + 1 用心讨论,共获提升!
    qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
    锋逸520 + 1 + 1 谢谢@Thanks!
    misszzy + 1 + 1 好文章,感谢分享
    ludoven + 1 + 1 可以可以
    笙若 + 1 + 1 谢谢@Thanks!
    名字以后会后悔 + 1 + 1 谢谢@Thanks!
    jimo + 1 + 1 我很赞同!
    xingxia + 1 + 1 我很赞同!
    luoweikingjj + 1 + 1 很详细!
    coco-coco + 1 + 1 用心讨论,共获提升!
    pjmeepo + 1 + 1 我很赞同!
    zzhaihjf1314 + 1 + 1 谢谢@Thanks!
    小白大侠 + 1 非常好,感谢大佬无私分享
    willgoon + 1 谢谢@Thanks!
    _小白 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
    zibo2019 + 1 + 1 我很赞同!
    q421226652 + 1 图片挂了好多,能否完善一下

    查看全部评分

    本帖被以下淘专辑推荐:

    发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

    推荐
    54264 发表于 2019-5-30 12:55
    收藏了 谢谢分享~~
    推荐
     楼主| encoderlee 发表于 2019-6-4 00:44 |楼主
    azz55825 发表于 2019-6-2 17:18
    楼主你好,抓包游戏时选择解码被检测到是不是就没办法了

    被检测到,估计游戏客户端使用了SSL/TLS Pinning技术,APP内打包了服务端证书,可能是以文件形式放在APK里,可能是以字符串形式写在代码里,然后在通信时做了校验,比对Fiddler提供的伪证书和自带的服务端证书不一致,就罢工了。解决起来比较麻烦,需要找到APP打包的服务端证书所在位置,进行替换,或者干掉校验代码。
    沙发
    susi248 发表于 2019-5-30 11:08
    3#
    狂暴补师亚丝娜 发表于 2019-5-30 11:22
    本帖最后由 狂暴补师亚丝娜 于 2019-5-30 11:25 编辑

    FD最强大的功能在于script,抓包工具千千万,支持调试的抓包工具却寥寥无几。
    FD玩得好,重定向本地封包(127.0.0.1)也是完全可以抓的。
    建议楼主看一下我发的FD相关文章。

    点评

    大佬下次帖子详细一点啊 ! 不然小白看不懂?。?!  详情 回复 发表于 2019-5-30 13:54
    4#
    q421226652 发表于 2019-5-30 11:24
    图片挂了好多,能否把图片完善一下
    5#
    Eorton 发表于 2019-5-30 11:25
    FD玩的好,监狱跑不了
    6#
    三岁迷失 发表于 2019-5-30 11:27
    谢谢分享
    7#
    minjun2046 发表于 2019-5-30 11:33
    后面还有不,想升入学习~
    8#
    liudongxu110 发表于 2019-5-30 12:13
    感谢分享
    9#
    ai1304 发表于 2019-5-30 12:51
    感谢分享
    您需要登录后才可以回帖 登录 | 注册[Register]

    本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

    快速回复 收藏帖子 返回列表 搜索

    RSS订阅|小黑屋|联系我们|新疆喜乐彩开奖介绍 ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

    GMT+8, 2019-6-17 02:38

    Powered by Discuz!

    © 2001-2017 Comsenz Inc.

    快速回复 新疆喜乐彩开奖介绍 返回列表
  • 哈萨克斯坦今年计划启动1吉瓦可再生能源项目 2019-06-16
  • 有理讲理,不要诬蔑。 2019-06-16
  • 新鲜出炉 三款高颜值个性SUV你准备好了么? 2019-06-15
  • 张育林代表推进泰兴经济社会发展高质量上台阶 2019-06-08
  • 光明日报副总编辑李春林 2019-06-07
  • 紫光阁中共中央国家机关工作委员会 2019-06-06
  • 国务院部署实施蓝天保卫战三年计划 2019-06-06
  • 最高法发布互联网公开审判流程信息规定 9月1日起施行 2019-06-02
  • 一周新疆新闻图片扫描(6.2——6.8) 2019-06-02
  • 海底捞回应侵犯音乐人林海著作权:已停止播放 2019-05-25
  • 十三届全国人大一次会议在北京闭幕 2019-05-19
  • 清明美食之青团:从祭祖供品到时令小吃 2019-05-19
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-15
  • 非洲大叔都中暑了,高温津贴更应阶梯化 2019-05-15
  • 海南省委常委张韵声任宁夏回族自治区党委政法委书记 2019-05-08