首页/编程教程/ 微信7.0小程序抓包方法教程 安卓微信 7.0 不能抓https?

微信7.0小程序抓包方法教程 安卓微信 7.0 不能抓https?

作者:神奇   分类:编程教程   时间:2019-07-28 21:06:04  标签:


去年年底(2018 去年仿佛就在上个月一样),要开发一个小程序的软件,按照以前的常规操作,打开fiddler,设置ip代理(https证书已经安装了),结果一看。。。懵逼了  怎么抓不到包了。

之后通过安装微信老版本的方法维持了几天,可以抓包,然后经常自动更新= =、、。。 最后老版本直接不让我登录了。没办法 回家过年了。

后来发现不止我一个人这样 然后查阅了大量资料,总算有头绪了。


1.安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书

2.安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书

3.安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表

4.苹果手机无任何影响。

泪目( ? ^ ? ),可是我为了方便开发,早把我的苹果给我妈用了。没办法还是用安卓想想办法吧。。


问题原因:

1.在Android7.0及以上的系统中,每个应用可以定义自己的可信CA集集。

默认情况下,应用只会信任系统预装的CA证书,而不会信任用户安装的CA证书。

而回想我们抓包的过程,无论是fiddler还是Charles,想抓https,都必须手机安装对应的证书,通过fiddler/Charles安装的证书恰恰正属于用户安装的CA证书,因此会被视作不安全的证书。

2.在微信7.0版本之前,小程序对设备的代理证书无做校验处理,故只在设备安装代理证书,即使代理证书未信任为系统证书,也能抓取到HTTPS请求。

而7.0版本之后,小程序增加了代理证书的校验,所有未被信任的证书,均无法通过验证,所以,就出现了以上问题。


问题解决:

第一种解决方案:测试设备回退为微信7.0以下版本,如v6.7.3、v6.6.5等。然而现在已经失效 就算没有 也不是长久之计。

第二种解决方案:对Android7.0以上系统进行root操作,获取管理员权限,然后把代理证书(如fiddler、charles)改为系统证书即可。(推荐 长期有效 为此我特意用我的小米8实战了。)

第三种解决方案:使用IOS10以上苹果设备进行抓包,因为IOS系统可以一键信任证书,方便快捷。

第四种解决方案:那就是用别的抓包工具。

第五种解决方案:修改APP配置文件。

第一种解决方案:失效了 就不讲了。

 

第二种解决方案:将证书安装到系统证书中(需要root)

实战演示:

准备工具:

root手机一部 ;

pem证书(fd默认是cer的不是base64编码的)转换地址:https://www.chinassl.net/ssltools/convert-ssl.html

必须有系统目录权限;

系统证书的目录是:/system/etc/security/cacerts/

每个证书的命名规则为:<Certificate_Hash>.<Number>(命名如:shen3900.0)


证书的hash值可以由命令计算出来,在终端输入openssl x509 -subject_hash_old -in <Certificate_File>,其中Certificate_File为证书路径,将证书重命名为hash.0放入系统证书目录,之后你就可以正常抓包了。


看不懂没关系 咱们说步骤:

首先必须是root的手机 并且解锁了系统目录 能进入/system/etc/security/cacerts/操作

然后

此处内容已隐藏,立即登录

这是你打开自己的信任凭据 系统里面就会出现如下了。

0.png

这个时候就可以开始抓包啦。如果还是没有数据的话。

那就按照以前的方法安装一下证书,安装到用户凭证里面,就可以抓包啦,亲测有效!!!

【注意:我这里用的是小米8做测试。

小米手机自带root为不完整root,需要进行完整root(即解锁system)。

特别是我的小米8是稳定版,然后解锁好像什么狗屁限制要半个月 所以我绑定账号 过完年回来时间刚好。解锁后才能刷机,刷个开发版,刷完开发版后再次解锁获取root权限,权限获取后又要下载个狗屁MI-Syslock-1.0.6.apk用来解锁system系统区,这个时候才能复制粘贴到证书目录/system/etc/security/cacerts/。

当然也可以用adb但是我对adb不熟悉,就不多介绍了。以下代码转载的 我没有测试】

安装adb工具
brew install Caskroom/cask/android-platform-tools             
#没有安装homebrew的先安装homebrew
root
adb devices # 测试adb是否安装成功,成功了会出现设备的hash值
adb root
adb disable-verity # 禁用系统验证

第三种解决方案:买部苹果手机就行啦。。。

第四种解决方案:用别的抓包工具

package capture

直接贴ka的介绍,这是一款无root抓包的工具;


产品特点:

抓包并记录

通过中间人技术抓取ssl

不需要root

易于使用

直接显示文本或显示16进制

如果不是https的能马上看到内容;

除微信外的APP,不对证书做检验,给你抓到又如何?反正返回的数据是加密的;

选择微信,试试,发现还是不行,依然没有数据,就跟不信任证书一样;

0.png

所以,这个不行;


whistle

0.png

whistle是基于Node实现的跨平台抓包调试代理工具,但是仔细看了下原理,也是通过信任证书实现的,因此还是无法解决上面的问题;


AndroidHttpCapture

AndroidHttpCapture是在testerhome有人提及到的一款软件,号称是Android版的"Fiddler";

0.png

官网有demo,下载下来后,看了下,功能是挺全的,但是,怎么感觉有点山寨的感觉?而且好像不能抓某个APP或者所有,对比上面的有点逊色的感觉?

无用= =


tcpdump + Wireshark

tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。

0.png

熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。

如果想在android上使用tcpdump,就需要root权限,但是jb手机没root权限,这块就跳过,理论上是可行的;

tcpdump是有个文件的,把手机连接到电脑(要有adb环境哈)

adb root
adb remount  
adb push  /wherever/you/put/tcpdump  /system/xbin/tcpdump  
adb shell chmod  6755 /system/xbin/tcpdump

然后再执行adb shell tcpdump -p -vv -s 0 -w /sdcard/capture.pcap,在手机上进行操作,操作完毕后,Ctrl+C退出即可;

然后把生成的capture.pcap用Wireshark打开;

这里不详细说明了;

反正,这两个组合是个神器,理论上来说,这种情况是能抓到数据的;



VirtualApp + HttpCanary

HttpCanary是一款强大的Android端抓包和注入工具,同样不需要root,软件本身支持安装证书,如果只是单独使用,依然跟其他APP一样;

这里还要介绍另外的一个产品,VirtualApp是一个开源的Android App虚拟化引擎,允许在其中创建虚拟空间,并在这个虚拟空间中运行其他应用。

简单的说,就是一个容器,可以进行双开处理,市面上很多双开的软件,原理就是这个;

0.png

点击后,就是双开了,然后再打开HttpCanary进行转包,比如点击微信的小程序,啧啧啧,发现啥了?

0.png

如果服务端没有加密的话,终于可以了,有点心累啊;

最后这两个app下载地址HttpCanary+VirtualApp:链接: https://pan.baidu.com/s/1BJQaFOhCZ14PZKm4OvV2Uw 提取码: z4dc 复制这段内容后打开百度网盘手机App,操作更方便哦



第五种解决方案:修改APP配置文件

直接修改APP的android:networkSecurityConfig属性,前提是可以获取到APP的源码。

在AndroidManifest.xml中

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

配置文件:res/xml/network_security_config.xml

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" /> <!--信任系统证书-->
            <certificates src="user" overridePins="true" /> <!--信任用户证书-->
        </trust-anchors>
    </base-config>
</network-security-config>

然后重新打包抓包就可以了;

这种做法,除了在源码上修改,还有其他法子吗?

肯定的,如下:

先脱壳,也可以直接下载wdj的包,然后用apktool反编译apktool,就能看到包内容了,修改AndroidManifest.xml,同时新增network-security-config,修改完以后重新签名打包就可以;

不过这技术 大部分人不会 会也麻烦 每次都要修改。。。


======

2020/7/28:

如果以上方法无法解决可以试着看看这两篇文章来解决额

此处内容已隐藏,立即登录

====

有时间了在介绍小米手机的具体操作吧= =。。

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

评论:

酸辣土豆丝 2019-08-28 10:31:28
为什么我按照你的方法,双开微信可以正常使用抓包。但是打开小程序就过一会提示网络有问题。
550726564@qq.com 2019-08-22 10:06:00
大佬,按照你的方法,我这边已经可以抓包到小程序这里来。但是公众号历史文章接口还是抓包不到,这是什么缘故呢?
神奇【管理员】 2019-08-22 21:38:28
:@550726564@qq.com:有些链接是确实抓不到 抱歉 技术有效。一般都是证书搞定都能抓包 有些是tcp的包 有证书也抓不到的
spy24826 2019-08-06 08:33:36
我解锁了解锁system系统区,但是/system/etc/security/cacerts/这个没找到,只找到了backups/system 这是个空的文件夹,我的手机是小米mix2
神奇【管理员】 2019-08-06 13:02:52
:@spy24826:搜索下mix2的证书文件夹吧的,不过小米系统应该一样,我用的是小米8,MIUI10,/system/etc/security/cacerts/应该都存在的
spy24826 2019-07-28 11:33:40
图片看不到了
神奇【管理员】 2019-07-28 12:53:24
:@spy24826:图床挂了 我晚点更新下吧
1341534 2019-07-03 16:00:28
一样

发表评论:

code