平常在进行APP测试的时候发现存在了很多问题,现在总结记录一下对应的知识,都在这遍文章下记录更新,老规矩先放一张图
抓包
校验服务端HTTPS证书
导入Burp证书
导出之后使用
adb push xxx.cer sdard |
然后在手机设置中找到安全,选择从SD卡安装证书
也可以开启代理,手机访问 ip:port 手动下载
HTTPS证书绑定
只认定特定的HTTPS证书,其他证书全部拒绝连接
ROOT设备安装Xposed后安装JustTurstMe
网上文章比较多可以自己搜索
eg:https://zhuanlan.zhihu.com/p/36538699
非ROOT设备使用VirtualXposed安装JustTrustMe
网上文章比较多可以自己搜索
eg:
VirtualXposed :https://nsapps.cn/index.php/archives/23/
太极:https://bbs.pediy.com/thread-258036.htm
HTTPS双向证书绑定
HOOK对应的证书加载函数,导入burp进行抓包
KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) |
可以看到成功hook到证书和密码,保存并导入User options-TLS-Client TLS Certificates
即可
检测代理
很多APP中会设置如下检测:
String property = System.getProperty("https.proxyHost"); |
安装ProxyDroid
下载地址:https://proxydroid.cn.uptodown.com/android
打开之后授予root权限
1). 对ProxyDroid进⾏配置(基本配置)
Auto Setting不勾选,我们⼿动进⾏配置。
Host:输⼊代理服务器IP。
Port:输⼊代理服务器端⼝。
Proxy Type选择代理服务器提供服务类型:我们这⾥选择HTTP。
Auto Connect为当2G/3G/WIFI⽹络开启时,⾃动开启代理服务。不勾选,我们⼿动启动,以获取最⼤灵活性。
Bypass Addresses:相当于⿊名单列表,选择排除代理的IP范围,有需要的可以⾃⼰⼿动设置。
2). 认证信息配置:
Enable Authentication:如果代理服务器需要账户、密码认证,勾选。
User:认证账户名。
Password:认证密码。
NTLM Authentication:NTLM/ NTLM2,Windows早期的⼀种认证⽅式,不⽤勾选。
3). 特征设置:
Global Proxy:⼀定要勾选,即为全局代理,代理所有App
Individual Proxy:单独代理所选App,勾选了第⼀条的不⽤管。
Bypass Mode:勾选了代表第⼆条中所选App不代理,勾选了第⼀条的不⽤管。
DNS Proxy:开启DNS代理。
4). 通知设置:
Ringtone:选择通知铃声。
Vibrate:
5). 都设置完成后,开启Proxy Switch即可。注意:如果使⽤ProxyDroid,⽆需在系统wifi处设置代理。
同理的
使用Burp透明代理模式
我们使用Burp的透明代理模式,在BurpSuite中监听80和443这两个端口,并且将其设置为透明代理模式:
手机连接电脑,以下命令:
adb shell |
逆向检测代理位置,Patch或者HOOK等
流量不通过代理
使用ProxyDroid或者Postern
ProxyDroid上文已经介绍Postern配置如下
使用Proxifier进行绕过
此方法适用于被分析应用程序正常运行于模拟器中,整体思路如下:
安卓模拟器 网络进程 --Proxifier代理 --Burpsuite
在Proxifier中添加proxy
对于Mac下的MuMu的配置如下:
对于Mac下的夜神配置如下:
其他模拟器思路类似
使用传输层协议
使用TCP或UDP
解决方法:WireShark
1). tcpdump 是⼀个运⾏在 Linux 平台的可执⾏ ELF ⽂件 https://www.androidtcpdump.com/android-tcpdump/downloads 下载⼆进制⽂件
2). 由于依赖adb,⾸先在 macOS 安装adb,命令如下:
$ brew cask install android-platform-tools |
3).拥有设备root权限
$ adb push tcpdump /data/local/tmp |
使用VPN
需要具体分析
通信数据加解密/签名
Frida
Httpdecrypt
Hook
Inspeckage
在看源码等待更新
Hook HTTP/HTTPS
使用系统中SSL库
xposed
java
java.androidVersion > 8 |
java.androidVersion <= 8
OpenSSLSocketlmpl
解释:
OpenSSL实现
路径:
http://aosp.opersys.com/xref/android-8.0.0_r51/xref/external/conscrypt/common/src/main/java/org/conscrypt/OpenSSLSocketImpl.java
理解:
android中openssl的实现,存在数据加解密的读写接口
com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLOutputStream.write('[B','int','int')
com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read('[B','int','int')
native
/system/lib/libssl.so库中的SSL_read()和SSL_write() |
frida
java
java.use("com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLOutputStream").write.overload('[B','int','int').implementation |
native
Interceptor.attach(address['SSL_read']) |
协议使用了自我集成的SSL类库
举出一些常用的例子
1.Chrome
Android L & M libchrome.so |
2.系统内置webview
使用(pm path com.google.android.webview)得到webview的路径 |
3.浏览器APP的webviewer
OPPO |
4.基于Chromium的第三方浏览器内核
腾讯系的APP |
5.微信(使用多内核的APP)
有些APP回使用多个内核,以微信为例,同时使用了X5和CrossWalk内核 |
native
1.对于native库,写脚本定位APP自带的SSL_read和SSL_write的偏移量,工程性质问题 |
FROM :ol4three.com | Author:ol4three
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论