程序员怎么做“竞品分析”:抓包工具的使用

对于移动端开发,抓包应该是必备技能之一了。

比如,做一个新业务,接口设计可以参考一下竞品。这样可以少走弯路,还能在竞品的基础上做出优化。

抓http?真没必要写这篇博客。咱们今天聊一聊抓https。

抓包方式科普

  • tcpdump + wireshark(原理:tcpdump通过hook操作系统函数,需要root权限。优点是可以抓取非http、https协议的数据包,缺点是操作繁琐。)
  • charles(原理:局域网代理)

使用charles抓取https的包

教程,网络上一堆。但是有几点需要注意的:

  1. 安装根证书之前必须设置手机锁屏密码!不然证书安装不上。

  2. 安装charles的根证书:

    手机设置代理后,访问http://chls.pro/ssl 来下载根证书,然后安装。

  3. 有些手机(如oppo)安装根证书有点不一样
    如下图这样,下载根证书,另存为charles.pem(如果不行就选择.cer格式)。push到手机。在手机设置-wlan-高级设置-从存储设备安装-找到证书后点击安装。

  4. 不要忘记Enable SSL Proxying

  5. 当然也支持通配符


Android 7.0及以上的,继续看

我有Android 5.0的手机,可以不用往下看了吧?想偷懒?不可能的,如果遇到SSL Pinning(证书锁定、公钥锁定)或者双向认证的app。Android 5.0也不行!请继续!


需要反编译

参考:绕过 Android 7.0+ 网络安全配置

修改network_security_config.xml,信任用户证书,然后重新编译apk

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" /><!-- 加入它,信任用户导入的证书 -->
</trust-anchors>
</base-config>
</network-security-config>

有些应用会有防止反编译的机制。往下看。

不需要反编译,需要hook

不需要反编译,肯定是运行时Hook啦,对应Hook类android.security.net.config.ManifestConfigSource

xposed试一下,frida试一下

直接添加成为系统证书(需要root权限)

1
2
3
4
5
6
7
openssl x509 -inform DER -subject_hash_old -in cert.cer
#复制输出结果的第一行哈希字符串,如7ef3ba8a
openssl x509 -inform DER -text -in cert.cer -out 7ef3ba8a.0
adb push 7ef3ba8a.0 /system/etc/security/cacerts/
adb shell
cd /system/etc/security/cacerts
chmod 644 7ef3ba8a.0

其它防抓包机制

我们的产品怎么防抓包?

看到这里,小伙伴们是不是觉得,做什么都没用,我直接用http吧,也不做任何防护了。

其实,我部分赞同这样的观点。但是https主要的目的是防止“中间人攻击”,我们添加证书到自己的手机上,这个操作“中间人”是做不到的。

所以,https还是要上,只是要加强各种防护措施。目前 我能想到的做法

  1. 加固,尽可能防止反编译
  2. 混淆代码,提高静态分析的难度
  3. 双向认证
  4. “jni+复杂算法”保护客户端证书的密钥
  5. 各种逆向工具都有一些缺陷,我们的app可以针对主流的逆向工具做相应的陷阱。至少让我这样的小白不能逆向成功。

参考、及扩展阅读

Android抓包总结

SSL/TLS协议运行机制的概述
公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

HTTPS其实就是HTTP+RSA+数字证书+会话秘钥

证书锁定(SSL/TLS Pinning)