首页
社区
课程
招聘
[原创] 关于抓包的碎碎念
发表于: 2020-7-27 16:25 17923

[原创] 关于抓包的碎碎念

2020-7-27 16:25
17923

抓包是作为apk分析的首要切入点,获取apk的通信协议的必要手段。常见的抓包手段是基于中间人攻击来进行的,还有另外一种抓包手段是基于手机VPN进行的。这里将罗列常见的抓包手段,以及SSL Pinning手段的对抗。

比较常规的抓包手段,常用的抓包工具有Burpsuite、Charles、Fiddler、Mitmproxy等等。通常在手机端安装工具的证书,如若抓取的手机客户端未做SSL pinning便可直接进行抓包。

通常有些APP为了防止被抓包,会设置APP默认不走代理,在分析的时候你会发现即使你设置了APP代理,也不影响APP的正常通信。通过tcpdump抓取网络报文可以发现app直接和服务器建立了连接而没有和代理建立连接。对应Java代码如下。

这种情况下可以通过建立VPN服务,直接将流量导向我们的抓包工具。当然也有现成的工具,如SocksDroid直接将流量导向抓包工具,Burpsuite是不支持socks5代理的,可以使用Charles设置Socks5代理,然后设置Charles的上游代理到Burpsuite。
还有的检测手段就是检测代理状态,如果设置代理了就拒绝通信,这种情况下也可以使用SocksDroid工具直接转发流量,这种情况下检测不到代理,另外的方法就是将检测的代码Bypass掉。
之前遇到过用Flutter写的应用,这种应用默认不走系统代理,所以也使用SocksDroid进行流量转发,然后需要注意的是需要将抓包证书安装在System Level而不是User Level。因为在User level的证书,应用是不信任的。

[安装系统证书] https://blog.ropnop.com/configuring-burp-suite-with-android-nougat/

证书绑定的安全策略在目前的APP开发中是越来越常见了,其根本策略就是检测客户端发来的证书是否合法,一般在APP中会硬编码合法的服务端证书信息,然后进行对比,笔者见的比较多的是OkHttp3中的一些SSL Pinning策略,而且很多APP也是使用的OKHttp3框架进行流量通信,比较常见的就是实现 HostnameVerifier接口中的verify函数,其verify函数中实现检测逻辑,返回值是boolean类型,常见的bypass策略就是Hook verify函数使其返回true。那么如何找到verify函数呢?下面将列举常见的方法:

frida-trace

图片描述
可以看到的确调用了verify函数,上图是我在没有设置代理的情况下返回的是true。

frida Java.enumerateMethods
前不久frida提供了枚举Methods的接口,这样就比以前更易于操作了,不然之前得枚举类然后得到方法。使用以下脚本便可

找到verify函数,直接Hook
此方法不能实现通用脚本

上述情况是针对okhttp3的情况说明的,如遇到其他框架请采用网上集成的bypass脚本。

https://raw.githubusercontent.com/WooyunDota/DroidSSLUnpinning/master/ObjectionUnpinningPlus/hooks.js

双向绑定即客户端验证服务端证书,服务端验证客户端证书。要实现抓包需要绕过客户端对服务端的校验,以及服务端对客户端的证书校验,首先绕过客户端对服务端的校验一般采用以上方法即可。绕过服务端的校验一般需要提取嵌入在客户端中的证书,有的开发者将此加密了,有的可以在assets目录中找到,以及raw目录中。对于加密的证书提取,可以Hook Keystore的load方法

图片描述
比如上述策略,证书是经过加密保存在apk中的,取出来先进行解密,然后使用Keystore进行加载,这时候可以通过Hook load方法得到证书以及证书的密钥,然后将证书导入到Burpsuite中,便可抓取报文。

https://sec.mrfan.xyz/2019/12/16/%E5%AE%89%E5%8D%93%E6%B5%8B%E8%AF%95%E4%B9%8BHook%20SSL_read%E5%92%8CSSL_write/
https://github.com/fanxs-t/Android-SSL_read-write-Hook/blob/master/frida-hook.py
这种方式抓取的是未经加密的报文,经测试,有的场景下无效。

这种技巧相当于PC上运行chrome设置SSLLOGFILE环境变量记录SSL协商的密钥,在android上,默认未设置需要通过Hook进行设置

frida -U -f com.realcloud.loochadroid.college -l hook.js --no-pause -o key

抓出来是这样的格式
图片描述


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-7-27 16:30 被ChenSem编辑 ,原因:
收藏
免费 12
支持
分享
最新回复 (17)
雪    币: 295
活跃值: (920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢大佬分享 大佬优秀
2020-7-27 17:09
0
雪    币: 27
活跃值: (1698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
博大精深
2020-7-27 18:17
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
果斷先讚再看~ 寫的很詳細....
2020-7-28 07:43
0
雪    币: 1454
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢大佬分享
2020-7-28 09:39
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
6
感谢分享啊!
2020-7-28 13:29
0
雪    币: 4884
活跃值: (18890)
能力值: ( LV13,RANK:317 )
在线值:
发帖
回帖
粉丝
7
感谢分享!
2020-7-28 15:46
0
雪    币: 210
活跃值: (651)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
感谢分享!
2020-7-29 14:09
0
雪    币: 482
活跃值: (1007)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
收藏收藏
2020-8-3 11:31
0
雪    币: 36
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
有啥 方式 可以对抗hook 的呢?
2020-8-3 16:56
0
雪    币: 4485
活跃值: (1904)
能力值: ( LV12,RANK:209 )
在线值:
发帖
回帖
粉丝
11
木鲤鱼 有啥 方式 可以对抗hook 的呢?
对抗Hook,那就对抗Hook之类的工具呗。判断是否存在Hook工具运行啥的。
2020-8-3 17:00
0
雪    币: 1636
活跃值: (653)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
感谢分享
2020-10-18 14:04
0
雪    币: 248
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
感谢分享!
2020-10-19 10:03
0
雪    币: 1821
活跃值: (1928)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
感谢分享!
2020-10-19 11:50
0
雪    币: 439
活跃值: (599)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
ssl_write 等函数无效是因为静态连接了libssl等库,sslkeylog 也同理,此时问题就变成了如何定位这几个函数。可从send recv read  write 回朔
2020-11-10 13:31
0
雪    币: 4485
活跃值: (1904)
能力值: ( LV12,RANK:209 )
在线值:
发帖
回帖
粉丝
16
einsteinzl ssl_write 等函数无效是因为静态连接了libssl等库,sslkeylog 也同理,此时问题就变成了如何定位这几个函数。可从send recv read write 回朔
mark
2020-11-10 16:33
0
雪    币: 574
活跃值: (405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
膜拜大佬
2020-11-13 10:04
0
雪    币: 562
活跃值: (4347)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
感谢分享
2023-4-20 14:17
0
游客
登录 | 注册 方可回帖
返回
//