20200520
上篇说到拿到了一些项目需要的Key 然后请求地址什么的都有了就想自己组装报文模拟请求了。 想拉取一个原来的请求看看大致的内容是什么,这时候发现我一直都没有拦截到过报文。尴尬了。。。
打开Charles发现除了刚开始的oss请求和广告分销的请求抓到了, 后面就是websocket的请求了。中间这么多登录的请求,用户数据的请求去哪里了?
代理抓包
google 搜了一下还真的发现一篇比较有意思的文章, 里面大概的也是就是, 你抓包其实是开了一个代理,让网络请求都通过你设定的代理走这样Charles才能抓到报文,但是如果这个时候有个请求选择了不往你的代理走那么你的Charles也就抓不到这个数据了。所以这里就可能需要一个真正的全局的代理了。
开启全局代理
博客中有提到一个代理apk, 但是了解下来那玩意不太好用,需要root权限,放弃考虑。
其他的关键词文章里面 发现了一个神器 Packet Capture , 一个免root手机抓包的工具,但是经测试还是不适用,正常环境下Packet Capture 正常运行 但是因为报文是HTTPS的 所以都是一些错误数据所以想转到VirtualXposed中 用Hook把请求都替换成http应该就能看到报文了。但是在VirtualXposed环境下,Packet Capture 正常情况是要获取系统一个VPN的权限的,但是在VirtualXposed中,VPN的权限也会申请但是在允许后没有任何反应,这个应该是VirtualXposed的一个问题把。
修改代码中的代理设置
本来以为没啥方案了, 后面在搜索apk防抓包的时候搜到确实有这种代码限制不使用代理来防止抓包的。就是设置okHttp的proxy属性,正常是个null, 就是跟随系统。 Proxy中有个Type枚举有三种属性
1 | public enum Type { |
DIRECT: 表示直接连接或不使用代理。就是不走任何代理管你系统设置的是啥
HTTP: 代表高级协议(例如HTTP或FTP)的代理。 就是走Http或Ftp之类请求的代理
SOCKS: 代表SOCKS(V4或V5)代理。 就是走Socks的代理
而在Proxy的一个私有构造函数中就是
1 | private Proxy() { |
不使用代理,而在他上面,申明了一个全局常量
1 | public final static Proxy NO_PROXY = new Proxy(); |
顺着这个思路在反编出来的代码中搜索Proxy,真的找到了相关的代理设置。
1 | public OkHttpClient getClient() { |
代码里面真的设置了不使用代理。 看到整个是方法的 return值 瞬间就想到hook它!
hock点 getClient方法, 方法返回一个自定义的OkHttpClient 想想就简单。
然而一顿操作结束后 它crash了。。。
换了okhttp的版本,甚至把他包里面的okhttp拿过来也还是不行。 深思。。。
突然,hock啥, 直接改代码啊。
找到对应的smali 然后直接搜 NO_PROXY 直接删。
打包。签名。安装。转移到VirtualXposed 重启环境。数据出来了。
可以愉快的修改金额了。
但是这里还是没办法做到免费白嫖,修改金额只是你本地展示的金额,并不能真的用于扣款。
最后没啥办法了。 不过幸运的是还是有所收获的,比如防代理NO_PROXY,还有密钥存储。