程序员怎么做“竞品分析”:抓包工具的使用
对于移动端开发,抓包应该是必备技能之一了。
比如,做一个新业务,接口设计可以参考一下竞品。这样可以少走弯路,还能在竞品的基础上做出优化。
抓http?真没必要写这篇博客。咱们今天聊一聊抓https。
抓包方式科普
- tcpdump + wireshark(原理:tcpdump通过hook操作系统函数,需要root权限。优点是可以抓取非http、https协议的数据包,缺点是操作繁琐。)
- charles(原理:局域网代理)
使用charles抓取https的包
教程,网络上一堆。但是有几点需要注意的:
安装根证书之前必须设置手机锁屏密码!不然证书安装不上。
安装charles的根证书:
手机设置代理后,访问
http://chls.pro/ssl
来下载根证书,然后安装。有些手机(如oppo)安装根证书有点不一样
如下图这样,下载根证书,另存为charles.pem
(如果不行就选择.cer
格式)。push到手机。在手机设置-wlan-高级设置-从存储设备安装-找到证书后点击安装。不要忘记
Enable SSL Proxying
当然也支持通配符
Android 7.0及以上的,继续看
我有Android 5.0的手机,可以不用往下看了吧?想偷懒?不可能的,如果遇到SSL Pinning(证书锁定、公钥锁定)或者双向认证的app。Android 5.0也不行!请继续!
需要反编译
修改network_security_config.xml
,信任用户证书,然后重新编译apk
1 |
|
有些应用会有防止反编译的机制。往下看。
不需要反编译,需要hook
不需要反编译,肯定是运行时Hook啦,对应Hook类android.security.net.config.ManifestConfigSource
xposed试一下,frida试一下
直接添加成为系统证书(需要root权限)
1 | openssl x509 -inform DER -subject_hash_old -in cert.cer |
其它防抓包机制
-
破解方法:反编译替换证书、公钥,或者hook签证方法(如Xposed+JustTrustme)
-
破解方法:添加客户端证书到charles
我们的产品怎么防抓包?
看到这里,小伙伴们是不是觉得,做什么都没用,我直接用http吧,也不做任何防护了。
其实,我部分赞同这样的观点。但是https主要的目的是防止“中间人攻击”,我们添加证书到自己的手机上,这个操作“中间人”是做不到的。
所以,https还是要上,只是要加强各种防护措施。目前 我能想到的做法:
- 加固,尽可能防止反编译
- 混淆代码,提高静态分析的难度
- 双向认证
- “jni+复杂算法”保护客户端证书的密钥
- 各种逆向工具都有一些缺陷,我们的app可以针对主流的逆向工具做相应的陷阱。至少让我这样的小白不能逆向成功。
参考、及扩展阅读
SSL/TLS协议运行机制的概述
公钥放在数字证书中。只要证书是可信的,公钥就是可信的。