澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

使用抓包之tcpdump命令抓包,Wechat域名检查评定的

 背景使用抓包之tcpdump命令抓包,Wechat域名检查评定的C。:最近公司的公众号域名被封了,原因是公司网站被黑后上传了一个不符合微信规范的网页。所以。。。就进入了微信域名解封的流程。

抓包前准备

原料1.预抓包的App一个(我们以app抓包为例)2.已配置android sdk3.分析软件Wireshark4.抓包命令:tcpdump5.模拟器或真机(以模拟器为例,真机需root)

最近感觉自己把做客户端,玩成了做服务端的感觉。凌晨一两点老大还在群里吼,整个人都不好,每天精神都很敏感。一次线上的重大bug,app瘫痪了一个小时,彻底让人怀疑人生。这都是钱呀!/(ㄒoㄒ)/~~

概述

目前,随着大家对安全的重视和HTTP2的推进,网站和APP后台基本上都会采用TLS/SSL;那么在TLS/SSL下,有什么方式抓到包的原始内容呢?

由于我习惯于采用WireShark来分析包,因此本文主要介绍如何采用WireShark来抓TLS/SSL包;

百度微信域名解封发现很多微信域名检测的网站,还有Api;但是本人做微信公众号的时候却没有发现微信公众号有这个API,奇怪了,这帮牛人是怎么实现的呢?做为一个技术宅男八卦之火真是熊熊燃气。

抓包准备

首先我们先配置下环境变量1.先来个ANDROID_HOME:SDK的路径,类似于JAVA_使用抓包之tcpdump命令抓包,Wechat域名检查评定的C。HOME。(一劳永逸,以后安装到别的路径,改变一下HOME路径就行)

澳门新浦京娱乐场网站 1

2.把sdk路径下的platfrom-tools和tools添加到环境变量

澳门新浦京娱乐场网站 2

配置好就可以用adb命令了

澳门新浦京娱乐场网站 3

3.安装我们的原料app(以实际要抓的app为主)。为防止侵权,这里我就随便抓取手机上的数据包。4.打开命令行,执行adb shell,进入android的shell环境,执行su切换到root用户。

澳门新浦京娱乐场网站 4

起因

大概晚上九点多,服务端上线了一套新的功能。因为一般情况下不会对客户端造成什么影响就没有经过QA。但一上线不久,iOS客户端线上的一打开闪退,根本无法用。大佬气得都快炸了,后经服务端代码回滚,还是一打开就闪退。

由于线上的app是经过**企业重签名的渠道,非AppStore渠道,所以客户端无法联机调试。

现象很奇怪:

  • 如果断网情况下,可以进入app,过一段时间重新联网就可以正常使用
  • 服务端确实改了部分接口代码,但是已经回滚了,还是闪退。
  • 之前上线AppStore的版本没有闪退
  • 自己打的包根本就不会闪退,只有经过企业重签的才会闪退。

最开始猜测跟服务端回滚不彻底导致的,可是从AppStore下载的是可以正常使用。自己打的包又没有出现崩溃的现象。根据app是在启动的时候就会崩溃,定位到是app请求全局配置的时候就崩溃了,连signup都没走到。

因为无法连接崩溃版本直接测试,于是想到通过抓包工具,抓取到底是哪个接口反馈的数据出现了问题。问题转移到抓包解析错误结果。

Wireshak简介

Wireshark是业界比较出名的一款抓包工具,尤其对包的分析很厉害,可以结合tcpdump使用;

澳门新浦京娱乐场网站 5

wireshark.png

从Wireshark的配置界面可以看到它支持两种配置方式:

  1. 配置私钥:
    通常私钥都放在服务端,如果可以拿到私钥,那肯定是可以解密整个通讯过程;
  2. 配置log file:
    Wireshark是开源的,在它的源码里有段注释,介绍了Wireshark支持的log file格式:
/* The format of the file is a series of records with one of the following formats:
 *   - "RSA xxxx yyyy"
 *     Where xxxx are the first 8 bytes of the encrypted pre-master secret (hex-encoded)
 *     Where yyyy is the cleartext pre-master secret (hex-encoded)
 *     (this is the original format introduced with bug 4349)
 *
 *   - "RSA Session-ID:xxxx Master-Key:yyyy"
 *     Where xxxx is the SSL session ID (hex-encoded)
 *     Where yyyy is the cleartext master secret (hex-encoded)
 *     (added to support openssl s_client Master-Key output)
 *     This is somewhat is a misnomer because there's nothing RSA specific
 *     about this.
 *
 *   - "PMS_CLIENT_RANDOM xxxx yyyy"
 *     Where xxxx is the client_random from the ClientHello (hex-encoded)
 *     Where yyyy is the cleartext pre-master secret (hex-encoded)
 *     (This format allows SSL connections to be decrypted, if a user can
 *     capture the PMS but could not recover the MS for a specific session
 *     with a SSL Server.)
 *
 *   - "CLIENT_RANDOM xxxx yyyy"
 *     Where xxxx is the client_random from the ClientHello (hex-encoded)
 *     Where yyyy is the cleartext master secret (hex-encoded)
 *     (This format allows non-RSA SSL connections to be decrypted, i.e.
 *     ECDHE-RSA.)
 */

基于第一种方式,配置私钥的抓包方式比较简单,这边就不做介绍,我们重点看看第二种方式;

第一步、重新检查微信服务号的API。结果大家知道的,无果

开抓

1.执行tcpdump命令tcpdump可以将网络中传送的数据包完全截获下来提供分析。

tcpdump -i any -p -n -s 0 -w /sdcard/capture.pcap//或/data/local/tcpdump -i any -p -n -s 0 -w /sdcard/capture.pcap

以上命令将截获的数据包保存到sdcard,capture.pcap抓取是数据包,pcap为Wireshark分析文件的后缀。

澳门新浦京娱乐场网站 6

这时抓包就开始了,在手机上刷新几下要抓取数据的app。抓完之后按ctrl c停止抓包

澳门新浦京娱乐场网站 7

2.将抓取的数据导出到电脑上(从sdcard导出到电脑上分析)退出android shell环境(命令行输入两次exit),回到Windows环境。

澳门新浦京娱乐场网站 8

接着执行

adb pull /sdcard/capture.pcap d:/capture.pcap

导出刚才抓到的文件到电脑d盘。(如果导出失败,自己手动把抓包数据复制到电脑上)

澳门新浦京娱乐场网站 9

或者通过DDMS导出到电脑

澳门新浦京娱乐场网站 10

3.Wireshark打开刚才获取到的.pcap文件过滤出http

澳门新浦京娱乐场网站 11

点击某一个抓到的http包,可以查看它的详细信息(自己判断一下可能是哪个域名)

澳门新浦京娱乐场网站 12

我们可以看到是get请求

澳门新浦京娱乐场网站 13

复制出来去请求一下(右键->复制->值)

澳门新浦京娱乐场网站 14

去浏览器中请求

澳门新浦京娱乐场网站 15

再结合app,看看是哪个界面的内容4.新建个文本文件,保存抓到的借口。例如:

澳门新浦京娱乐场网站 16

看看请求出来ip地址,顺着ip找出所有的api借口

澳门新浦京娱乐场网站 17

54开头的就是我要抓的app。

抓包分析

首先用到了WireShark。一般使用Wireshark只能看到ip地址,但是看域名更方便更简明。想看域名需要简单去设置一下。

抓到的数据如下:

但是由于现在用的都是https,如果不解密根本看不了返回了什么内容。这他妈就尴尬了。

网上搜了一下究竟有什么办法可以让wireshark解密数据?大致可以通过下面几种方法来使wireshark能解密https数据包。

  1. 中间人攻击;
  2. 设置web服务器使用RSA作为交换密钥算法;
  3. 如果是用chrome,firefox,可以设置导出pre-master-secret log,然后wireshark设置pre-master-secret log路径,这样就可以解密了。

一看这种就得花大把时间去弄。于是转到了使用Charles抓包的思路上

虽然Charles并没有WireShark那么牛逼,但是在客户端抓包分析方面确实比WireShark简单不少。

使用Charles抓包https几个需要注意的地方这里提示一下。

没正确设置的时候左边显示如下:

设置正确之后:

一、安装SSL证书到手机设备
点击 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device

出现弹窗得到地址 chls.pro/ssl

在手机Safari浏览器输入地址 chls.pro/ssl,出现证书安装页面,点击安装
手机设置有密码的输入密码进行安装

iOS 10.3之后系统,需要在 设置→通用→关于本机→证书信任设置 里面启用完全信任Charles证书

二、Charles设置Proxy
Proxy -> SSL Proxying Settings...

勾选Enable SSL Proxying,点击Add

设置端口443

生成log文件

前面介绍了,可以通过配置log file,让wireshark对通讯过程进行解密;那么如何生成wireshark支持的文件呢?

网上有人说域名有没有被封用微信访问一下域名就知道。但是我对安卓不熟悉啊。

tcpdump抓包就说这么多,当然,wireshark还有许多强大的功能,此处就不一一介绍了OO~~

分析数据

通过分析请求的域名,对比发现自己打的包一起启动请求的数据和三个域名相关。而通过企业重签名的包和四个域名想。

自己打的包:

企业重签名的包:

对比下来最终确定是企业重签名的包多了一个www.开头的请求。

但是到这里还是无法保证就是这个请求这个域名导致的问题。接下来就是通过修改本地的host文件,把上面的几个域名重定向到本地127.0.01。一个一个去排查到底是哪个域名导致的。

通过更改本地Host,强制让请求这个域名的接口不返回数据。

最终的确没有发现崩溃了。

原因就是请求这个域名导致的。这个时候大家已经找大线索。顺藤摸瓜,肯定是重签名导致的,后来结果和对方沟通。是因为重签名在我们包里面加了一些hack代码,应该和注入dyld差不多,第一次感受到iOS还是要走正规渠道发布才行。

浏览器:

Firefox 和 Chrome 都支持NSS Key Log。要想启用NSS LOG,必须要配置系统环境变量中SSLKEYLOGFILE(以MAC为例,其它系统类似):

  • 临时添加环境变量:
mkdir ~/ssl && touch ~/ssl/key.log
export SSLKEYLOGFILE=~/ssl/key.log
  • 永久添加环境变量:
mkdir ~/ssl && touch ~/ssl/key.log
#zsh
echo "nexport SSLKEYLOGFILE=~/ssl/key.log" >> ~/.zshrc && source ~/.zshrc
#bash
echo "nexport SSLKEYLOGFILE=~/ssl/key.log" >> ~/.bash_profile && . ~/.bash_profile

澳门新浦京娱乐场网站,添加环境变量之后,要重启浏览器,为了确保环境变量生效,建议通过终端启动浏览器,以我的机器为例:

open ~/Applications/Google Chrome.app 

之后通过浏览器访问https网站时,会将master key ,client_random等写key.log,根据NSS LOG Format文档,写入的日志有两种格式:

  • 格式1:
RSA <space> <16 bytes of hex encoded encrypted pre master secret> <space> <96 bytes of hex encoded pre master secret>
  • 格式2:
CLIENT_RANDOM <space> <64 bytes of hex encoded client_random> <space> <96 bytes of hex encoded master secret>

浏览器根据TLS/SSL握手协商出来的CipherSuites,选择不同的日志格式;如果采用RSA进行秘钥协商,则采用格式1;否则采用格式2;另外格式2要求wireshark版本>=1.8.0;

想想心里真是不甘心。 对了微信的电脑端是不是也可以检测?

总结