X1Be's Blog

– 城南花已开,愿君永常在.

听说安卓微信 7.0 不能抓 https?

默认分类 0 评

前言

最近公司有个小程序要提测,研发提测,体验,发现有个疑似bug的东西,想着抓包看下是不是接口数据的问题,结果问题出现了,按照以前的常规操作,打开fiddler,设置ip代理(https证书已经安装了),结果一看,fiddler居然这样显示:
[
image.png-46kB
]
再看看手机,居然没数据?:
[
image.png-325.6kB
]
一脸疑问号,一开始以为是自己问题,折腾半天,不对,之前都是没问题的话,同样的环境,同样的设备,有毒?
[
image.png-25.9kB
]
等下,之前的没问题,最近微信好像更新了7.0,那是不是这个导致的?

怎么解决?

一开始遇到这问题,不知道怎么处理,满脑子想着就是安装低版本微信,但是用过安卓系统的同学都知道,4.X以后系统不允许降级安装,如果要安装低版本微信,意味着要删除微信再安装,这样会延伸出另外的问题,删除微信后我的聊天记录跟照片视频怎么办?

问题本身就是如何完整备份微信数据,咨询朋友圈,有不同大佬提供了方式:

  1. 微信-设置-聊天-聊天记录里面有数据迁移的功能

之前功能之前没使用过,但是从描述上看,感觉只能迁移聊天记录,那些图片跟小视频怎么办?

  1. 钛备份数据

这个是另外的同学说的,之前没了解过,上网查了下,这玩意号称是目前为最强悍的程序和系统备份工具,需 ROOT 权限运行;

这就尴尬啦,需要root,小米华为vivo这种不好搞root,怎么办?

那就看看这个钛备份的原理是啥,其实钛备份的原理很简单,就是把整个目录的内容都保存下来,当然包括data里面的数据,这就不难理解为什么要root权限了,当然里面要用到的技术很多,自行网上查询吧;

既然这条路,那就找台测试机安装旧版本试试吧;

安卓微信旧版本

试过好几个网址,最后选择的是wdj,那就挑了个6.7.3来试试了;
[
image.png-61.2kB
]
安装,配置手机抓包环境,试了下;
[
image.png-63.9kB
]
你看吧,都说旧版本可以的,你们不信,打脸了吧?
[
image.png-17kB
]

别人中毒了吗?

这问题肯定不止jb一个人遇到的,直接Google了,微信小程序无法抓包,果不出其然,大家都中毒了;
[
image.png-41.8kB
] [
image.png-45kB
]
很开心,原因我不是一个人,认真看下该问题,咦,原来都是因为微信7.0导致的,跟我一样啊啊啊;

那再用微信7.0无法抓包https为关键字,又发现新的东西了;
[
image.png-133.5kB
] [
image.png-23.4kB
]
这两张图,认真看到,发现两个有意思的点:

第一点:

  • 安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书
  • 安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书
  • 安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表

第二点:

  • 苹果机可以用

看到这里,莫名有点感动;
[
image.png-558.4kB
]
看到这里,第二种解决方案也出现了,用苹果就行了;

然后顺延上面的思路,安卓7.0,让jb想起以前的事;

之前我司的一个产品,在新版本也会出现无法抓取http的情况,出现的情形跟上面的一致,直接看当时提交的内容吧;
[
image.png-101kB
]
由此看到,的确只有安卓才有问题,而且还是7.0开始引入的;

那一起来看看,这问题根源是什么吧;

问题根源

Google一下,很多类似的帖子,问题的根源是:

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

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

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

解决方案1:修改APP配置文件

如上代码提交的那样,直接修改APP的android:networkSecurityConfig属性,前提是可以获取到APP的源码。

在AndroidManifest.xml中

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

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

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

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

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

肯定的,如下:

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

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

如果没有源码权限,怎么办?那就把证书安装到系统证书里面,但是这个操作需要root权限

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

每个证书的命名规则为:<Certificate_Hash>.<Number>

Certificate_Hash表示证书文件的hash值,Number是为了防止证书文件的hash值一致而增加的后缀;

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

[
image.png-271kB
] [
image.png-371.2kB
]

注意事项

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

方法如下:

安装adb工具

brewinstallCaskroom/cask/android-platform-tools
#没有安装homebrew的先安装homebrew

root

adbdevices#测试adb是否安装成功,成功了会出现设备的hash值
adbroot
adbdisable-verity#禁用系统验证

注明,本方法jb未尝试过,因为手机没有root权限,方法来源于网上 ;

还有吗?

当然,假如你的手机没有root,而且也不是自己的APP,那怎么办?

别笑,这种情况很多,比如你想爬别人APP的数据,就会遇到这种情况了;
[
image.png-1.9kB
]

package capture

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

产品特点:

  • 抓包并记录
  • 通过中间人技术抓取ssl
  • 不需要root
  • 易于使用
  • 直接显示文本或显示16进制

界面很简单,如下图,下面显示的记录,右上有1的表示只做一个应用,点击会让你选择应用,右边无1的就是全部都抓;
[
image.png-410kB
]
如果不是https的能马上看到内容;
[
image.png-914.8kB
]
那试试除微信外的APP,这里会延伸出另外的问题,就算别的APP不对证书做检验,给你抓到又如何?反正返回的数据是加密的
[
image.png-323.4kB
]
选择微信,试试,发现还是不行,依然没有数据,就跟不信任证书一样;

所以,这个不行;

whistle

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

AndroidHttpCapture

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

官网有demo,下载下来后,看了下,功能是挺全的,但是,怎么感觉有点山寨的感觉?而且好像不能抓某个APP或者所有,对比上面的有点逊色的感觉?弃坑~
[
image.png-1115.6kB
] [
image.png-654.5kB
]

tcpdump + Wireshark

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

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

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

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

adbroot
adbremount
adbpush/wherever/you/put/tcpdump/system/xbin/tcpdump
adbshellchmod6755/system/xbin/tcpdump

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

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

wireshark的界面是这样的:
[
image.png-407.5kB
]
这里不详细说明了,因为tcpdump+wireshark后面会单独写一篇文章;

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

VirtualApp + HttpCanary

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

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

简单的说,就是一个容器,可以进行双开处理,市面上很多双开的软件,原理就是这个;
[
image.png-136.5kB
]
点击后,就是双开了,然后再打开HttpCanary进行转包,比如点击微信的小程序,啧啧啧,发现啥了?
[
image.png-322.5kB
]
如果服务端没有加密的话,终于可以了,有点心累啊;
[
image.png-20.2kB
]
最后,把两个apk的下载方式都贴一下:

HttpCanary:
链接:[![YPSuperKey Checked](data:image/png;base64,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)https://pan.baidu.com/s/1ViRJBZrUecdNU8DuegCphQ](https://pan.baidu.com/s/1ViRJBZrUecdNU8DuegCphQ)[![YPSuperKey Checked](data:image/png;base64,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)https://pan.baidu.com/s/1ViRJBZrUecdNU8DuegCphQ](https://pan.baidu.com/s/1ViRJBZrUecdNU8DuegCphQ)
提取码:9jzs


VirtualApp:
链接:[![YPSuperKey Unlocked](data:image/png;base64,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)https://pan.baidu.com/s/1k7i87xlY61z8is_foVPmQw](https://pan.baidu.com/s/1k7i87xlY61z8is_foVPmQw)[![YPSuperKey Unlocked](data:image/png;base64,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)https://pan.baidu.com/s/1k7i87xlY61z8is_foVPmQw](https://pan.baidu.com/s/1k7i87xlY61z8is_foVPmQw)
提取码:kh1y

VirtualApp到底是什么

上面的例子证实VirtualApp + HttpCanary是可以抓到https的包,那这玩意到底是什么啊?为什么就能做到?

要介绍VirtualApp,要先介绍Java的反射机制

Java的反射机制

举个例子,通过反射修改private的成员变量值,调用private方法;

publicclassPerson{
privateStringmName="Hello";

privatevoidsayHi(){
// dont care
}
}

如上的类,有一个私有成员变量mName,和一个私有方法sayHi()。讲道理,在代码中是无法访问到他们的。但反射能做到。

Personperson=newPerson();
// person.mName = "world!"; // impossible
// person.sayHi(); // no way

FieldfieldName=Person.class.getDeclaredField("mName");
fieldName.setAccessible(true);
fieldName.set(person,"world!");

MethodmethodSayHi=Person.class.getDeclaredMethod("getDeclaredMethod");
methodSayHi.setAccessible(true);
methodSayHi.invoke(person);

简单来说,反射就是可以做到调用私有变量、方法的效果,还是不懂?

在来个通俗的例子:

对于男生,去嫖娼:

妈咪是class类,小姐是私有方法或成员,因为扫黄的关系,现在的小姐都是私有的,但是呢,你还是可以通过妈咪来找到小姐,这里面,通过妈咪的方式就是反射啦~

对于女生,买包包:

很多名牌店里面有一条潜规则,有点瑕疵的产品,内部人员是可以低价购买的,但是一般人是买不到的,那如果你有闺蜜在里面工作或者有熟人的情况下,你就可以通过这个渠道来买到这些瑕疵产品,这这个能方式就是反射;

反正就是不能光明正大做的,然后有个代理,可以这样做,你通过代理去做,就行啦;

这懂了吧?
[
image.png-6.6kB
]

hook

hook是什么?hook就是在应用运行过程中,注入外部的代码,从而改变原有的执行流程。

因此,应用中必须存在注入代码的窗口。

例如,使用了热修复技术的应用,就是在启动时加载并应用外部的补丁代码,这类应用便是本身自带了注入代码的窗口。

但是,对于逆向分析或安全研究而言,所面对的通常是一个黑盒App,我们并不知道其是否存在注入代码的窗口,或者存在但无法被利用。

为此,我们必须要额外地为应用添加注入代码的窗口。

Xposed便是这样做的:它修改了系统库,对所有应用在启动时添加了注入窗口。但是,这就需要具有root权限。

那么,如何在不具有root权限的情况下实现呢?这就需要用到VirtualApp了。

VirtualApp的工作原理,简而言之,它通过代理常用系统服务的方式,在系统服务层与应用层之间添加了一层虚拟空间,从而允许在不安装应用的情况下运行应用。特别地,VirtualApp本身并不需要root权限。

VirtualApp之所以能够实现虚拟空间,是因为其对许多系统服务进行了代理和替换,而这部分是核心;

如果对原理感兴趣的同学,可以点击此处了解更多;

试试看

启动VirtualApp后,界面是这样的。
[
image.png-178.8kB
]
显示的是已经通过VirtualApp安装的APK,可以直接从SD卡或者系统中已有的APK中选择安装。安装后直接点开图标,就能跟安装在外部的应用一样打开APP。

简单尝试了一下,知乎和微博都能正常工作,并且运行速度跟外部安装的差异不大。而且还可以安装多个相同的应用,实现多开的效果。

看下数据

首先,来看一下它在开启APP后的进程信息:

u0_a20022932494103439684008SyS_epoll_0000000000Sio.virtualapp
u0_a20022955494106438870408SyS_epoll_0000000000Sio.virtualapp:x
u0_a2002298349415304162669480000000000Rcom.zhihu.android
u0_a200233204941410736214680SyS_epoll_0000000000Scom.sina.weibo
u0_a20023387494117492876848SyS_epoll_0000000000Scom.sina.weibo.image
u0_a20023415494118607681648SyS_epoll_0000000000Scom.sina.weibo:remote
u0_a20023455494117388876572SyS_epoll_0000000000Scom.sina.weibo.imageservant
u0_a20024028494118278074408SyS_epoll_0000000000Scom.sina.weibo.servant
u0_a20024425494102763666116SyS_epoll_0000000000Scom.taobao.sophix_android
u0_a200244924941334412174708SyS_epoll_0000000000Scom.zhihu.android

可以看到,所有被ViralApp打开的应用,都和VirtalApp属于同一个uid:u0_a200

其中,VirtualApp本身有两个进程:io.virtualappio.virtualapp:x

io.virtualapp 就是可见的交互界面,同时也负责APK包的管理和安装;
io.virtualapp:x 作为一个单独的服务进程,虚拟了一些系统服务;

因此,VirtualApp在运行时,包含以下三部分:

  • Main Process,进程名io.virtualapp,主要负责VirtualApp用户界面及应用管理;
  • Server Process,进程名io.virtualapp:x,主要负责系统服务的代理,是通过Content Provider启动的;
  • VApp Process,进程名io.virtualapp:p[0-…],作为将来运行client应用的进程,当client应用启动后,其进程名会更新为client应用的包名

client应用是通过VirtualApp安装的应用;

host应用是VirtualApp;

以这里安装的微博为例,查看一下它的进程的内存空间,可以看到相关路径全都被映射到了/data/data/io.virtualapp/virtual下面,

......
b6d0f000-b7017000r--p00000000fd:00410335/data/data/io.virtualapp/virtual/data/user/0/com.sina.weibo/Plugin/com.weibo.app.movie/dalvik-cache/base-1.dex
b7017000-b71d4000r-xp00308000fd:00410335/data/data/io.virtualapp/virtual/data/user/0/com.sina.weibo/Plugin/com.weibo.app.movie/dalvik-cache/base-1.dex
......
bb745000-bb831000r--p00000000fd:00410247/data/data/io.virtualapp/virtual/data/user/0/com.sina.weibo/code_cache/secondary-dexes/composer1312fd1cbada0e5074c9f9961b16aefb.dex
bb831000-bb8f0000r-xp000ec000fd:00410247/data/data/io.virtualapp/virtual/data/user/0/com.sina.weibo/code_cache/secondary-dexes/composer1312fd1cbada0e5074c9f9961b16aefb.dex
......
bf448000-bf978000r-xp00000000fd:00410129/data/data/io.virtualapp/virtual/data/app/com.sina.weibo/lib/libweiboffmpeg.so
bf978000-bf979000---p0000000000:000
bf979000-bf9ab000r--p00530000fd:00410129/data/data/io.virtualapp/virtual/data/app/com.sina.weibo/lib/libweiboffmpeg.so
bf9ab000-bf9af000rw-p00562000fd:00410129/data/data/io.virtualapp/virtual/data/app/com.sina.weibo/lib/libweiboffmpeg.so
......
c335a000-c33a9000r-xp00000000fd:00410127/data/data/io.virtualapp/virtual/data/app/com.sina.weibo/lib/libweiboplayer.so
c33aa000-c33ad000r--p0004f000fd:00410127/data/data/io.virtualapp/virtual/data/app/com.sina.weibo/lib/libweiboplayer.so
c33ad000-c33ae000rw-p00052000fd:00410127/data/data/io.virtualapp/virtual/data/app/com.sina.weibo/lib/libweiboplayer.so
......

可见,这里面对路径做过了重新映射;

这块就到此为止吧,主要是想简单介绍下VirtualApp,知道是怎么一回事;

服务器响应加密

上面的例子,就可以看到,现在越来越多的APP会对返回的结果进行加密处理,那这个是怎样的一个流程?

  • 客户端正常发起请求
  • 服务端进行业务处理,对response加密
  • 客户端对response解密

这样做的好处是什么?

对Response加密之后,即使第三方抓取到了我们的数据,也无法解密,保证了我们的数据安全;

从开发的角度,需要注意几点:

  • 加密算法要可逆算法,因为需要加解密,如AES、RSA;
  • 秘钥需要安全;
  • 可以整个response加密,也可以某个部分加密;

那这种怎么搞?
[
image.png-16.4kB
]
这里说的没法搞,是指没现成的工具直接处理,如果非要这么搞,那就是反编译,因为想破解别人加密的算法,必须知道用什么方式加密,如果连加密方式都不知道,怎么解密?

还有个例子:
[
image.png-8.1kB
]
这样算加密吗?肯定算啦,但是这种加密是不是不可以处理?

并不是,直接网上找点代码试试看,理论上是可破,一般来说,MD5和RSA是网络传输中最常用的两个算法,网上也有大量的网页提供在线解密;

小结

至此,本文结束,本文的主要收获是VirtualApp + HttpCanary可以抓到https的数据,但同时的,如果是服务器返回乱码,这种情况暂时没办法解决;

本文提及到的抓包工具有以下几款:

  • fiddler,一般用于windows;
  • charles,一般用于Mac;
  • package capture、VirtualApp + HttpCanary、AndroidHttpCapture,这几款都是安卓的;
  • whistle,pc的,基于node;
  • tcpdump + Wireshark,Linux的,一般用于安卓;
  • Stream、Thor是用于iOS手机抓包;

希望大家都会上面场景的抓包工具都有所了解,留个印象,方式需要的时候再翻出来使用;

最后,谢谢大家~
[
image.png-29.3kB
]

新增支持od,python版备份脚本,支持备份到onedrive,ftp,oss,cos,email
快来做第一个评论的人吧~