精华内容
下载资源
问答
  • 抓包教程(安卓抓包)Fiddler,HttpCancy使用~浅谈前几日抓包中遇到的坑
    千次阅读
    2022-02-12 21:25:32

    安卓抓包:

    0.直接设置手机wifi代理,电脑fiddler抓包(可能有些抓不到)

    1.使用justtrustme这个xposed模块+virtual xposed+fiddler

    可以在没有获取root权限的机器上运行,然后应用装在virtual xposed里,手机wifi设置代理,

    然后就可以直接抓包了

    2.下载夜神模拟器,使用多开助手,安装安卓7,32位的模拟机,然后装个xposed(它自带的应用市场只能装32位xposed),justtrustme,在模拟机中设置Wifi代理,然后抓包

    3.使用小黄鸟httpcancy抓包

    1.未root,低版本安装ca证书可直接抓包并且信任,高版本不信任安装的ca证书,可以使用平行空间抓包,最简单,但是可能有些手机安装的适配小黄鸟版本的平行空间会闪退(比如我)

    2.已经root,高版本不信任安装的Ca证书,可以导出小黄鸟的扩展名为pem和0的证书,然后使用mt管理器(mt管理器需要授予root,不然无法进入data,和复制文件进根目录)将pem文件复制到data/data/小黄鸟标的文件夹/cache/,然后把左边的扩展名pem改成扩展名jks再复制到data/data/小黄鸟标的文件夹(有个guoshi的)/cache/

    然后进入根目录进入etc/security/cacerts/,把扩展名为0文件复制进去

    即可将httpcancy证书设置为系统信任的,然后抓包即可

    4.使用两仪,里面装太极阳,安装xposed,使用justtrustme插件,手机设置代理,电脑Fiddler抓包

    PS:以上方法是我这几天尝试过的,在网上找了半天一一试验,还是有部分应用还是抓不了~如支付宝,抖音,据说支付宝会检测xposed和虚拟环境~导致模拟器,两仪登陆都登不了,真机没root发现小黄鸟抓包直接断网,可能是我没用平行空间,抓包也断网,自带的版本闪退,使用了其他双开软件,模拟器使用平行空间试了试,抖音抓不了包,真机直接使用Wifi代理,Fiddler不断网,但是可能部分包抓不到,可能需要一个真机自带root,xposed的才可能抓到这些软件的包吧

    还请各位大佬指导指导

    设置代理方法

    1.电脑打开fiddler

    2.打开手机wifi,确保电脑和手机wifi连接的是同一个

    3.然后WiFi修改设置代理改为手动

    4.设置主机名和端口号

    6.手机端访问主机名加端口号,例如:http://255.255.5.255:8888/,点击下载fiddler ca证书进行安装,安卓高版本需要下载到本地,然后自己打开设置找到证书下载的地方安装,安卓低版本可以直接安装,但是要设置密码什么的

    5.安装完证书即可设置代理成功,然后就可以愉快的抓包了

    如何获取主机名和端口号?

    电脑使用Win +r 键,输入cmd,回车,然后输入ipconfig,回车,找到 IPv4 地址,那个便是主机名了,端口fiddler默认为8888

    更多相关内容
  • Android抓包工具,带源码!是为了抓取Android网络请求包,最好手机root一下。
  • 抓包工具 android APP抓包 fiddlersetup+HTTPAnalyzer v7+注册码
  • 安卓抓包工具

    千次阅读 2021-05-26 11:21:29
    在此我推荐一款很好用的网络抓包工具:WireShark,大鲨鱼网络抓包工具。这个工具的获取可以在WireShark官网上直接下载,但是访问速度却十分缓慢,我网上搜了下可以直接在“腾讯软件中心”下载,你只需在软件中心搜索...

    我从事家庭ICT(家庭信息与通信技术)领域的技术工作,抓网络包是家常便饭。在此我推荐一款很好用的网络抓包工具:WireShark,大鲨鱼网络抓包工具。这个工具的获取可以在WireShark官网上直接下载,但是访问速度却十分缓慢,我网上搜了下可以直接在“腾讯软件中心”下载,你只需在软件中心搜索WireShark即可,注意它有32位和64位的版本可供下载,你根据自己的电脑配置来下载即可。我的电脑是32位的,我就以32位电脑为例来说说WireShark如何安装。

    01d0ed8b1cb06ba7c650cc36833d5be6.jpg32位的WireShark 3.0.6版本大概有52M左右,双击它启动安装过程;

    在安装过程中前两步点击“下一步”即可;

    安装到第三步的时候有如下提示:这里可以看到安装WireShark时提供的组件,你把鼠标移到对应的组件上时,下面的“Description"会有相应的描述,就是描述这个组件是干嘛的。你可以选择哪些组件可以装哪些不需要装。如果你比较懒的话直接全部选择得了。

    安装到第四步时有如下提示:上面的三行是问你要不要在win的启动菜单里加入WireShark的启动图标,要不要在桌面上加入WireShark的启动图标、要不要在任务栏加入WireShark的启动图标,这个默认就行了。下面的选项是问你,但凡打开后缀是5vw、acp等文件时,是不是就直接用WireShark加载,这个还是勾选下吧,以后用起来方便。

    接下来的几步你就直接默认点击“下一步”好了。安装时会如下显示:这里就会显示安装过程以及当前在安装哪些文件了。你只需要安静地等待即可。

    最后安装完毕后,你就可以打开WireShark了,打开后的界面如下图:

    初次打开WireShark时你可能会有些困惑,感觉这个界面好神秘好专业。确实如此,WireShark对于会用的人非常好用,不熟悉的人用起来就会有点吃力,关于WireShark的使用我们以后再来详谈,小伙伴们可以先装起来吧!

    这是我的回答,希望对你有帮助。

    看你capture选项怎么设置了吧。

    nterface: 指定在哪个接口(网卡)上抓包。一般情况下都是单网卡,所以使用缺省的就可以了Limit each packet: 限制每个包的大小,缺省情况不限制

    Capture packets in promiscuous mode: 是否打开混杂模式。如果打开,抓取所有的数据包。一般情况下只需要监听本机收到或者发出的包,因此应该关闭这个选项。

    Filter:过滤器。只抓取满足过滤规则的包(可暂时略过)

    File:如果需要将抓到的包写到文件中,在这里输入文件名称。

    use ring buffer: 是否使用循环缓冲。缺省情况下不使用,即一直抓包。注意,循环缓冲只有在写文件的时候才有效。如果使用了循环缓冲,还需要设置文件的数目,文件多大时回卷。

    抓包回调函数如下:voidHandlePacket(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data){/*对捕捉到的数据包进行处理*/}

    展开全文
  • 前言 数据分析 逆向的开端往往从数据拦截开始,无论是数据抓取还是参数计算。第一步就是数据拦截人,如果没有这一层...介绍下我用过的也就是市面上常用的一些抓包工具,并分享其特点。 1.anyproxy 阿里 开源的 可以二

    前言

    数据分析 逆向的开端往往从数据拦截开始,无论是数据抓取还是参数计算。第一步就是数据拦截人,如果没有这一层估计也就无法下手了。

    联系到之前的闲鱼数据抓取和闲鱼数据采集系统的搭建过程。有不少朋友联系我怎么抓不到闲鱼的数据包啊。我觉得有必要分享下一些我自己常用的数据包抓取工具吧。

    鉴于整个闲鱼数据采集/爬虫系统还在搭建过程中,这篇算是插入内容。和之前的文章分开发表,不算在系列里面。

    常用的抓包工具分析

    介绍下我用过的也就是市面上常用的一些抓包工具,并分享其特点。

    1.anyproxy

    阿里 开源的 可以二次开发
    AnyProxy是一个基于NodeJS的,可供插件配置的HTTP/HTTPS代理服务器。
    网页版界面
    https://github.com/alibaba/anyproxy

    2.mitmproxy

    https://www.mitmproxy.org/
    mitmproxy is a free and open source interactive HTTPS proxy
    开源的 免费的 可以二次开发的 是python的一个包
    网页版ui界面

    3.burpsuite https://portswigger.net/burp

    付费的 全面的渗透工具 不仅仅是抓包
    有提供社区版 当然你也可以找找破解版 逆向人员多关注。可以内置python脚本打印信息 调用函数等功能。

    4.fiddler 免费 wind下常用的抓包工具 界面友好 可以定制脚本

    5.charles 免费 mac下常用的抓包工具 当然也有win版,功能感觉比fiddler要多一点点。

    6.wireshark

    和前面的不同 不仅仅是http/https协议的抓包,针对各种协议可以抓取。当然使用起来也比较麻烦,学习成本较高。我的评价 两个字 神器,专治各种疑难杂症。
    可以从以太网,IEEE 802.11,PPP / HDLC,ATM,蓝牙,USB,令牌环,帧中继,FDDI等读取实时数据(取决于您的平台)
    对许多协议的解密支持,包括IPsec,ISAKMP,Kerberos,SNMPv3,SSL / TLS,WEP和WPA / WPA2
    https://www.wireshark.org/

    7.tcpdump 算是一个系统自带的网络数据分析工具 内核态抓包 可以把数据包拿下来导入其他软件 比如wireshark 分析

    其他的工具

    从加密到解密 证书 ssl工具 OpenSSL

    网卡(基于网卡抓包)

    代理 获取数据

    手机安装转发 drony

    手机安装kali系统 安装抓包软件 已经支持arm

    配合逆向的抓包

    或许很多时候你没法正确的拦截到数据 又或许是太麻烦 可以从逆向角度看抓包

    提供一些思路

    1.基于okhttp拦截器的抓包

    2.安卓应用层抓包通杀脚本发布

    3.frida进行hook,提取明文HTTP数据ssl_logger项目

    4.优化了frida的JS脚本,修复了在新版frida上的语法错误

    5.r0ysue安卓应用层抓包通杀脚本

    展开全文
  • 关于Android 抓包 与 反抓包

    千次阅读 2020-06-07 11:54:36
    因为没有加密,属于明文传输,是可以抓包的。 但是从 Android 9.0 开始,默认是禁止 App 使用 Http 这种使用所有未加密的连接,使用 Http 会导致程序报错。 java.net.UnknownServiceException: CLEARTEXT ...

    恭喜自己,文章投稿洋神公众号刊登成功。😁😁😁
    鸿洋 - 关于Android 抓包 与 反抓包

    现象与原因

    Android 对于 Http 和 Https 两类网络请求

    Http

    因为没有加密,属于明文传输,是可以抓包的。
    但是从 Android 9.0 开始,默认是禁止 App 使用 Http 这种使用所有未加密的连接,使用 Http 会导致程序报错。

    java.net.UnknownServiceException: CLEARTEXT communication

    但还是可以通过写一段关于网络安全的配置 network_security_config ,让系统允许继续使用 Http 协议。

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config>
    

    这里先跳过,下面会详细讲怎么让它生效。
    可以认为 Android9.0 以后不推荐使用 Http,要求开发者转移到 Https。


    Https

    Https 是一种使用了加密传输的协议,防止了 App 和 服务器之间的中间人进来拦截、伪造、篡改问题。
    但是如果是手机持有人,主动在手机里安装 charles 的根证书,实现了认证环节,是可以实现抓包的。
    然而 Android 也发现了这种漏洞,为了保护应用开发公司的通讯安全,在 Android7.0 以后,只信任 Android 设备的系统根证书。也就是如果你安装的 charles 根证书这类属于「用户证书」分类的证书,Android 系统是不认的,照样不让 Https 请求正常通过。
    程序会报错:

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

    而此时的 charles 显示如下:charles 显示红色X图标

    ps:一般在 Android 手机的这个打开路径下「设置 - 某个“安全”设置子页面 - 加密与凭证 - 信任的凭证」,可以看到该设备的所有根证书。
    分为「系统」和「用户」两个分类。





    ——————————————————————————————

    场景与解决办法

    一、开发者抓第三方的 Https 包

    如果第三方只是使用默认的 Android Https 配置,那么可以使用这两种方法可以抓到它们的请求包。

    1. 使用 Android7.0 以下的手机安装应用,然后抓包

    很好理解,上面讲过了只有 Android7.0 以后,才开始不信任用户根证书。

    2. 想办法把 你的 charles 证书或者其他证书,变成设备的根证书

    比如你是手机设备厂家,或者你可以编辑一套ROM出来,当然可以把任何个人证书给搞成是系统证书。
    另一种方法是,需要一部有Root权限的手机,安装 Xposed 的 JustTrustMe 模块来信任所有的证书。




    二、开发者抓自己 App 的 Https 包

    0.应该不会有人为了抓包,把 targetSdkVersion 强行改成低于24(Android 7.0)的版本吧。孩子睡觉老是踢被子,幸好被我及时发现打断了腿,否则肯定感冒。

    1. 使用 Android 提供的「网络安全配置(Network security configuration)」

    官方讲解文档:Android 开发者官网 网络安全配置
    步骤一:在 manifest 文件中配置一个 android:networkSecurityConfig 属性,填写一个 xml 文件。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ... >
        <application android:networkSecurityConfig="@xml/network_security_config"
                        ... >
            ...
        </application>
    </manifest>
    

    步骤二:在 res/xml 文件夹里创建一个 network_security_config.xml 文件,里面配置如下。
    配置的意思是在 debug 模式下,信任用户证书。

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <debug-overrides>
            <trust-anchors>
                <certificates src="user" />
            </trust-anchors>
        </debug-overrides>
    </network-security-config>
    

    一个很重要的知识点是,区分是不是 debug 包是通过 module 的 build.gralde 文件,在 buildType 里面的 debuggable 字段来决定的。

        buildTypes {
            release {
                signingConfig signingConfigs.release
                minifyEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                //debuggable true  如果打生产包时候忘了关,就玩脱了
            }
            preRelease {
                signingConfig signingConfigs.release
                minifyEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                debuggable true //推荐这种做法。创建一个预发布的 buildType,打开 debuggable=true 专门给测试人员能在正式域名环境里抓包检查用。
            }
            debug {
                minifyEnabled false
                shrinkResources false
            }
        }
    

    在 buildTypes 里配置这个 debuggable 属性,最终会被合并到 manifest 文件里面的 <application 结点下,增加一个 android:debuggable=“true” 属性。
    合并后的manifest文件

    2. 配置 OkHttp 信任所有证书

    在使用 builder 模式构建 OkHttpClient 的时候,增加 sslSocketFactory 和 hostnameVerifier 配置项。下面的演示代码里这两个配置项里面会信任所有证书。为了避免玩脱也记得只在 BuildConfig.DEBUG 条件下才使用这个配置。这个 BuildConfig.DEBUG 的值跟前面讲的 debuggable 是一致的。

    public class ZhihuHttp {
    
        public static final String ZHIHU_BASE_URL = "https://news-at.zhihu.com/api/";
    
        private static final ZhihuHttp zhihuHttp = new ZhihuHttp();
    
        private OkHttpClient okHttpClient;
    
        private static SSLSocketFactory createSSLSocketFactory() {
            SSLSocketFactory sSLSocketFactory = null;
            try {
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(null, new TrustManager[]{new TrustAllManager()},
                        new SecureRandom());
                sSLSocketFactory = sc.getSocketFactory();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return sSLSocketFactory;
        }
    
        private static class TrustAllManager implements X509TrustManager {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
    
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
    
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        }
    
        private static class TrustAllHostnameVerifier implements HostnameVerifier {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        }
    
        private ZhihuHttp() {
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.connectTimeout(10, TimeUnit.SECONDS);
    
            if (BuildConfig.DEBUG) {
                builder.sslSocketFactory(createSSLSocketFactory(), new TrustAllManager());
                builder.hostnameVerifier(new TrustAllHostnameVerifier());
            }
    
            okHttpClient = builder.build();
        }
    
        public static ZhihuHttp getZhihuHttp() {
            return zhihuHttp;
        }
    
        public void getDailiesWithCallback() {
            Request request = new Request.Builder()
                    .url(ZHIHU_BASE_URL + "4/news/latest")
                    .build();
            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(@NotNull Call call, @NotNull IOException e) {
                    Log.e("YAO", "ZhihuHttp.java - onFailure() ----- e:" + e.toString());
                    e.printStackTrace();
                }
    
                @Override
                public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                    Log.e("YAO", "ZhihuHttp.java - onResponse() ----- :" + response.toString());
                }
            });
        }
    
    }
    




    三、怎么防止被其他开发者抓包

    前面讲到,默认的 Android Https 配置下,只要使用 Android7.0 以下的手机、或者找个 Root 设备安装把用户证书(比如charles证书)想办法搞进系统证书那部分,就可以抓包了。这对于黑产来说也忒忒忒简单了。那么怎么防止呢?
    答案是配置你信任的网站证书或者配置信任的认证链

    1.Android 官方配置信息证书

    (声明:这种方法只能防篡改设备的根证书,防不了使用 Android7.0 以下的手机。)
    比如你可以像这样把你信任的网站的证书给搞下来
    步骤①:点击域名旁边锁的图标,弹出框里面点「证书」
    查看网站证书
    mac系统,对着证书那个图标拖动到某个文件夹里。这样你就能得到一个HTTPS的里面的SSL里面的非对称加密算法的公钥。
    拿到网站证书
    步骤②:放进 res/raw 文件夹里,在network_security_config.xml 里写上相关配置
    配置信任某几个证书

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
    
        <!-- 这个是全局的基础的配置 -->
        <base-config>
            <trust-anchors>
                <!-- 如果整个base-config都不写,就等于是<certificates src="system" /> -->
                <!-- 这里写全局基础配置,只信任下面某几个证书 -->
                <certificates src="@raw/zhihu" />
                <certificates src="@raw/baidu" />
            </trust-anchors>
        </base-config>
    
        <!-- 如果只对某些涉及数据安全的私密域名进行保护,可以针对某个域名,只信任某几个证书 -->
        <domain-config>
            <domain includeSubdomains="true">zhihu.com</domain>
            <trust-anchors>
                <certificates src="@raw/zhihu" />
                <certificates src="@raw/tencent" />
            </trust-anchors>
        </domain-config>
    
        <debug-overrides>
            <trust-anchors>
                <certificates src="user" />
            </trust-anchors>
        </debug-overrides>
    
    </network-security-config>
    

    以上就是 Android 官方推荐的做法。





    ——————————————————————————————

    2. OkHttp 配置信任认证链

    (声明:这种方法是全方面防御,在 Android7.0 以下设备也能起作用)
    参照这部分的 OkHttp官方介绍 以及 stack overflow,可以学到这部分的使用方法


    步骤①:写一个 CertificatePinner 的配置

    其中的 add方法两个参数。第一个参数是网址的域名host,第二个是sha256的证书。证书我们目前不清楚,先输入这么一段字符串。使用这么一段错误的配置运行后将会报错,然后在日志里得到正确的配置信息。

    注意第一个参数不要包含协议,也不要省略部分域名,错误示例 「https://news-at.zhihu.com」、「zhihu.com」。
    第二个参数是个假证书识别串,但是有效的,我测试时候乱输入了一串「sha256/wrong」没有触发到搜想要的结果。

    public class ZhihuHttp {
    
        public static final String ZHIHU_BASE_URL = "https://news-at.zhihu.com/api/";
    
        private static final ZhihuHttp zhihuHttp = new ZhihuHttp();
    
        private OkHttpClient okHttpClient;
    
        private ZhihuHttp() {
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.connectTimeout(10, TimeUnit.SECONDS);
    
            // 只信任网站对应的证书
            CertificatePinner certificatePinner = new CertificatePinner.Builder()
                    .add("news-at.zhihu.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
                    .build();
            builder.certificatePinner(certificatePinner);
            okHttpClient = builder.build();
        }
    
        public static ZhihuHttp getZhihuHttp() {
            return zhihuHttp;
        }
    
        public void getDailiesWithCallback() {
            Request request = new Request.Builder()
                    .url(ZHIHU_BASE_URL + "4/news/latest")
                    .build();
            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(@NotNull Call call, @NotNull IOException e) {
                    Log.e("YAO", "ZhihuHttp.java - onFailure() ----- e:" + e.toString());
                    e.printStackTrace();
                }
    
                @Override
                public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                    Log.e("YAO", "ZhihuHttp.java - onResponse() ----- :" + response.toString());
                }
            });
        }
    
    }
    

    步骤②:执行代码后报错。搜索关键字,我们能得到这么一串报错
    Subscriber onError() : javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning failure!
      Peer certificate chain:
        sha256/f5fNYvDJUKFsO51UowKkyKAlWXZXpaGK6Bah4yX9zmI=: CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
        sha256/zUIraRNo+4JoAYA7ROeWjARtIoN4rIEbCpfCRQT6N6A=: CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US
        sha256/r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
      Pinned certificates for news-at.zhihu.com:
        sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
    

    这报错的意思是。现在访问这个链接的认证链是 Peer certificate chain 下面的3个sha256。
    「sha256/f5fNYvDJUKFsO51UowKkyKAlWXZXpaGK6Bah4yX9zmI=」
    「sha256/zUIraRNo+4JoAYA7ROeWjARtIoN4rIEbCpfCRQT6N6A=」
    「sha256/r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=」
    链的含义是,第一个sha256对应的证书由第二个sha256对应的证书认证,第二个sha256对应的证书又第三个sha256对应的证书认证。

    在代码里配置的用于「news-at.zhihu.com」域名的认证 sha256 期望是
    「sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=」

    因为两者对应不上,所以请求失败。然而通过这个方法,我们得到正确的sha256,下面就拿这几个正确的sha256来配置。


    步骤③:配置正确 sha256

    CertificatePinner certificatePinner = new CertificatePinner.Builder()
            //正常请求下的证书验证链路
            .add("news-at.zhihu.com", "sha256/f5fNYvDJUKFsO51UowKkyKAlWXZXpaGK6Bah4yX9zmI=")//CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
            .add("news-at.zhihu.com", "sha256/zUIraRNo+4JoAYA7ROeWjARtIoN4rIEbCpfCRQT6N6A=")//CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US
            .add("news-at.zhihu.com", "sha256/r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=")//CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
            .build();
    

    配置后,这个域名的请求就不能被抓包了。因为开启抓包后,根证书是 charles 的公钥,跟期望的 sha256 匹配不上。
    一个很重要的点是,其实我们可以不用把3个 sha256 都加上。匹配逻辑是任意一个 sha256 匹配上请求就可以通过了。所以其实可以这么写。

    CertificatePinner certificatePinner = new CertificatePinner.Builder()
            //正常请求下的证书验证链路
            .add("news-at.zhihu.com", "sha256/f5fNYvDJUKFsO51UowKkyKAlWXZXpaGK6Bah4yX9zmI=")//CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
            .build();
    

    域名hostname 支持通配符,可以参考 OkHttp CertificatePinner 里面的「Wildcard pattern rules」部分



    验证结果
    按照 OkHttp 官方指导配置完后,使用 charles 抓包看看还能不能在 Android 7.0 以下系统抓到包。
    验证结果,不能抓包,会出现一个报错:

    Subscriber onError() : javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning failure!
      Peer certificate chain:
        sha256/dVUJFtUhQtJki5t0/j+hMYzTgtVkETqjsogUuyquPPo=: CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
        sha256/54ZQa+M6vq6DhdR7DLkc1X6fWmVEZ6wLZaaYwoR4Uvw=: C=NZ,ST=Auckland,L=Auckland,O=XK72 Ltd,OU=https://charlesproxy.com/ssl,CN=Charles Proxy CA (2 十月 2017\, YaodeMacBook-Pro.local)
      Pinned certificates for news-at.zhihu.com:
        sha256/f5fNYvDJUKFsO51UowKkyKAlWXZXpaGK6Bah4yX9zmI=
        sha256/zUIraRNo+4JoAYA7ROeWjARtIoN4rIEbCpfCRQT6N6A=
        sha256/r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=
    

    可以看到现在访问这个链接的认证链是 Peer certificate chain 下面的两个sha256。
    「sha256/dVUJFtUhQtJki5t0/j+hMYzTgtVkETqjsogUuyquPPo=」
    「sha256/54ZQa+M6vq6DhdR7DLkc1X6fWmVEZ6wLZaaYwoR4Uvw=」
    报错的信息里,第二个 sha256 冒号后面,显示这串字符来自我的 charles 公钥。


    对比 未使用 和 使用 抓包的报错信息,发现第一个 sha256 都是来自于知乎的公钥,但两个的 sha256 是不一样的。
    //未开启抓包
    sha256/f5fNYvDJUKFsO51UowKkyKAlWXZXpaGK6Bah4yX9zmI=: CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
    //开启抓包
    sha256/dVUJFtUhQtJki5t0/j+hMYzTgtVkETqjsogUuyquPPo=: CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
    

    一开始我一直以为这一串东西是SSL公钥进行一次hash算法得到的字符串。后面观察后发现不是。
    这是两个公钥在不同 「中间证书认证」-「中间证书认证」……「根证书认证」这种认证体系下的一个hash串。
    所以如果开启抓包,那么他对应的根证书是 charles 的公钥,得出的第一个来自知乎证书的 sha256 就会有所不同。


    warning: 配置信任某个具体证书一定要与服务器开发或运维沟通好,因为如果服务器进行了证书替换而App没有更新到最新证书,App的请求将会失效。如果开启的是全部域名的证书配置,意味着你连应用内升级或者热更新都用不了,绝对是重大事故。




    四、还有什么骚操作

    上面讲到我们配置到工程代码里的是 网站的公钥(任何人都可以随意下载)
    根据HTTPS的原理,公钥和私钥的原理,其实完全可以在代码里配置上开发者的 charles 公钥(只针对某台具体的笔记本,charles 为它生成的一对公钥私钥)。因为没人能根据公钥能破解出对应的私钥。
    所以如果在在 app 里配上我们某部电脑 charles 公钥,以后就可以用那个电脑抓正式环境正式域名的请求了。比如工程加上公司的公用开发机的 charles 公钥,或者核心App测试大佬的 charles 公钥。

    使用 Android 官方配置信任证书可以这些写

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
    
        <!-- 这个是全局的基础的配置 -->
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <!-- 如果整个base-config都不写,就等于是<certificates src="system" /> -->
                <!-- 这里写全局基础配置,只信任下面某几个证书 -->
                <certificates src="@raw/zhihu" />
                <certificates src="@raw/yao_charles" />
            </trust-anchors>
        </base-config>
    
        <debug-overrides>
            <trust-anchors>
                <certificates src="user" />
            </trust-anchors>
        </debug-overrides>
    
    </network-security-config>
    

    使用OkHttp的配置的方法,这么写

    // 只信任网站对应的证书
    CertificatePinner certificatePinner = new CertificatePinner.Builder()
            //正常请求下的证书验证链路
            .add("news-at.zhihu.com", "sha256/f5fNYvDJUKFsO51UowKkyKAlWXZXpaGK6Bah4yX9zmI=")//CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
            .add("news-at.zhihu.com", "sha256/zUIraRNo+4JoAYA7ROeWjARtIoN4rIEbCpfCRQT6N6A=")//CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US
            .add("news-at.zhihu.com", "sha256/r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=")//CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
    
            //charles 抓包下的配置
            .add("news-at.zhihu.com", "sha256/dVUJFtUhQtJki5t0/j+hMYzTgtVkETqjsogUuyquPPo=")//CN=*.zhihu.com,OU=IT,O=智者四海(北京)技术有限公司,L=北京市,C=CN
            .add("news-at.zhihu.com", "sha256/54ZQa+M6vq6DhdR7DLkc1X6fWmVEZ6wLZaaYwoR4Uvw=")//C=NZ,ST=Auckland,L=Auckland,O=XK72 Ltd,OU=https://charlesproxy.com/ssl,CN=Charles Proxy CA (2 十月 2017\, YaodeMacBook-Pro.local)
            .build();
    





    ——————————————————————————————
    附赠一份看过的比较好的 HTTPS 文章《从0到1讲解HTTPS设计流程》,帮助解决95%关于 HTTPS 方面的疑问。

    展开全文
  • 这是一款针对安卓抓包的软件,可以通过简单的配置,代理安卓的网络,对其进行抓包操作,界面简单美观,采用http/https显示抓包详情,适合新手操作
  • Android抓包工具tcpdump

    2016-12-09 15:37:27
    免积分分享给需要的人士,Android设备上网络访问的抓包工具Tcpdump。教程很多各位自行度娘。
  • 目前最新版fiddler4 fiddler4 是常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。 fiddler4 通过将自己设置成系统的网络访问代理服务器,使得所有的...
  • 一文搞懂Android抓包

    千次阅读 2022-02-19 16:46:09
    带你了解Android App 的抓包
  • HttpCanary是一款功能强大的HTTP/HTTPS/HTTP2网络抓取和分析工具,你可以把他看成是移动端的Fiddler或者Charles,但是HttpCanary使用起来更加地简单容易,因为它是专门为移动端设计的!最重要的是:无需root权限!...
  • 写Q协议的朋友非常有用,这个工具配合安卓模拟器,加上小鸟的HOOK,那就是完美的绝配。后面我会把一些hook的app也发出来。都是收藏很久的,估计很多人在找,网上下载也下不到这些东西
  • 大家可能都听说过一个名词,“抓包”。比如软件开发前后端联调,调用后端接口无反应,这时我们常常会说:“抓个包看看前端传递的数据吧”。又或者我们的网站接入 CDN 之后,想要看一下网站静态资源的缓存时间和自己...
  • 如果想分析Android下 某个APP的网络数据交互,需要在Android手机上抓包,最常用的抓包工具非tcpdump莫属,用tcpdump生成Wireshark识别的 pcap文件,然后将pcap文件下载到电脑上,用电脑上的Wireshark加载pcap文件,...
  • Frida android抓包

    千次阅读 2021-12-29 13:51:28
    然后推送到模拟器上的/data/local/tmp目录 .\nox_adb.exe push frida-server-15.1.14-android-x86 /data/local/tmp/frida-server 拉取OkHttpLogger-Frida https://github.com/siyujie/OkHttpLogger-Fri
  • 【软件名字】:SSL抓包神器 【软件版本】:V1.1.0 【软件语言】:中文 【软件大小】:3.11MB 【支持系统】:安卓2.2之上 【软件简介】:安卓最牛抓包神器,N多技术达人的最爱,此版本为破解专业版,强烈推荐一波。
  • 安卓APK抓包工具

    2019-03-26 10:08:59
    自己不会美术,用来抓现在小游戏,app内的资源,声音,纹理的抓包工具。HTTP,SOCKET数据截获都可以
  • 太干了,Android 抓包姿势总结! 本文作者:不染 App 服务端测试基本就是 Web 安全那一套,但如果抓不到服务器的包?哎~就很难受,空报告? 本篇文章总结了几个比较好用点的 Android抓包的姿势,当然远不止这几...
  • 中文文档 OkNetworkMonitor A network monitor for okHttp base on stetho. You can view the request header, response header, response body and so on of a network request in your app. Usage ...
  • 文章目录抓包fiddler/Android抓包安装自动连接生成证书Android安装证书设置网络安装证书 抓包fiddler/Android抓包 https://blog.csdn.net/ychgyyn/article/details/82154433 ... 安装 下载地址: ...
  • Android 抓包分析

    2019-04-16 01:36:56
    NULL 博文链接:https://lzqustc.iteye.com/blog/1797327
  • Fiddler:安卓抓包配置

    2021-08-19 14:23:42
    Fiddler配置 Tools --> Options 1.下载fiddler https://www.telerik.com/fiddler 2.打开HTTPS监听 3.打开允许远程计算机连接 4.手机配置 未获取抓包解决方法 关闭防火墙
  • 安卓抓包一个工具,用于安卓系统抓包, 用于分析app对应的url请求数值,了解app后端运行,可用于抓包分析等之类的工具
  • Android抓包指南①: 使用Fiddler抓HTTP/HTTPS包

    万次阅读 多人点赞 2019-05-24 02:28:35
    网络抓包,是Android应用逆向分析的重中之重,很多时候我们拿到一个APP,不知道从何入手分析,往往是从抓包开始,先弄清楚他与服务器通信的内容,如果一目了然,我们完全可以照搬,自行写一个程序来模拟,如果有一些...
  • 安卓抓包工具adb

    2018-01-02 17:20:43
    安卓端 adb工具,有了adb,连接安卓移动端,可以安卓apk,进入shell。
  • 安卓抓包软件

    2022-03-24 17:41:55
    .TEMP_IMG1648114908180
  • 一款可以在手机上抓包的工具软件,已经去除了广告。和一些不需要的东西。清爽干净,让你抓包更惬意
  • 在挑选安卓模拟器的时候我又遇到了新坑,暂且不说在模拟器上安装Xposed+JustTrustMe会遇到一些失败的问题这个坑,就说你要抓包的这款app能不能在模拟器上运行吧! 夜神模拟器,大家都比较熟悉了吧,但此款App在最新...
  • 主要介绍了安卓APP测试之使用Burp Suite实现HTTPS抓包方法,本文详解讲解了测试环境和各个软件的配置方法,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,517
精华内容 12,606
关键字:

安卓抓包