常规应用系统无法抓包解决办法整理
前言
在安卓手机安装上应用后,使用抓包工具如burpsuite无法抓包(手机用户凭证已安装burp的证书),此时考虑存在抓不到包的原因可以分为以下四种情况:
- 应用只信任系统证书,不信任我们安装在用户凭证的证书。
- 应用做了单向校验,一般情况下是客户端校验服务端证书是否是正确来源的,也有服务端校验客户端证书的。
- 应用做了双向校验,也就是服务端和客户端互相校验证书来源的正确性。
- 应用不走http系统代理。
参考链接
【1】HTTPS单向认证、双向认证、抓包原理、反抓包策略
【2】HTTPS实战之单向验证和双向验证
正文
在安装了代理软件证书到手机用户凭证中后(这里以burpsuite举例,后续均以该代理软件说明),使用burp设置代理后,应用无法访问网络,即抓取不到数据包,这里可以考虑的情况有三种,即前言中的1,2,3种情况。
- 只信任系统证书解决方案
这个只信任系统证书其实是在使用安卓SDK的API24及以上的应用系统中默认配置的,详情可参考链接【3】,因此使用高于API24以上的sdk开发的应用默认不信任安装的用户证书,这里介绍两种该问题解决方案。
方案一:在手机root的情况下,将我们的证书以<Certificate_Hash>.<Number>
的名称
导入到/system/etc/security/cacerts/
,一般后缀为0,这里需要使用到openssl进行计算我们导出证书的hash值。可参考链接【5】进行安装,这里列出计算hash值的命令如下:
openssl x509 -inform der -subject_hash_old -in bp.cer
或者
openssl x509 -subject_hash_old -in bp.pem
注意
:这里需要强调的是,安装上系统证书,可到手机系统信任的凭证中查看是否已经有该证书显示信息,若存在就无需重启手机,因为对于高版本系统手机存在重启后证书失效的问题,在系统信任凭证中无法找到安装的证书,可到
/system/etc/security/cacerts/
目录下查看证书的大小是否为0kb,若为0即需要重新复制一份过来,如果多次尝试仍然为0,可考虑重启尝试。
方案二:可参考官网【3】的详细解决方案,即通过反编译APP应用客户端,在客户端中添加配置信息,以让APP信任我们的用户凭证,由于该方法是修改客户端代码,即存在应用加固无法反编译或者反编译以及回编译出现各种报错问题,
这里以无加固,反编译以及回编译正常的应用来说明(当然大家遇到加固应用也可尝试进行反编译,回编译处理各种报错)。
首先使用反编译工具AndroidKiller反编译应用,在res/xml目录下找到network_security_config.xml添加如下代码,一般是存在该文件,只需要添加
<certificates src="user" />即可,没有的话自己创建一个文件。
<network-security-config> <domain-config> <domain includeSubdomains="true">userCaDomain.com</domain> <domain includeSubdomains="true">otherUserCaDomain.com</domain> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </domain-config> </network-security-config>
然后在AndroidManifest.xml中添加注册信息
android:networkSecurityConfig="@xml/network_security_config"
最后保存,回编译APP生成新的apk文件,使用新的apk文件进行抓包测试。
参考链接
【3】Android Developers Blog: Changes to Trusted Certificate Authorities in Android Nougat (googleblog.com)
【4】Android 7.0 之后抓包 unknown 和证书无效的解决方案,手机需root
【5】系统证书安装
- 单向证书校验解决方案
单向证书校验一般是指客户端对服务端的证书校验,遇到该问题一般可考虑使用root手机进行安装xposed框架及justtrustme模块进行绕过该限制。如果手机未root,可考虑使用frida的hook方式进行绕过,这里贴出参考链接【6】,里面详细说明了frida的hook进行绕过sslPinning的限制,为避免链接失效,贴出复制出的文字及脚本。对于服务端校验客户端证书的情况放在双向证书校验解决方案中进行说明。
Frida的hook方案脚本见下:
抓取HTTPS的数据包
Frida绕过SSL单向校验遇到JustTrustMe无法绕过SSL单向校验的情况, 接触了Frida, 就尝试用DBI的方法绕过SSL的单向校验,
参考文章https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/
Frida这里就不详细地说明Frida的安装方法及使用方法了。设置Fiddler代理, 在本地下载Fiddler的证书, 将证书直接重命名为cert-der.crt。之后将证书push到/data/local/tmp目录下, 在adb shell里输入./frida-server &再在PC端进行操作。新建一个frida-android-repinning.js文件, 详细代码如下:setTimeout(function(){Java.perform(function (){console.log("");console.log("[.] Cert Pinning Bypass/Re-Pinning");var CertificateFactory = Java.use("java.security.cert.CertificateFactory");var FileInputStream = Java.use("java.io.FileInputStream");var BufferedInputStream = Java.use("java.io.BufferedInputStream");var X509Certificate = Java.use("java.security.cert.X509Certificate");var KeyStore = Java.use("java.security.KeyStore");var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");var SSLContext = Java.use("javax.net.ssl.SSLContext");// Load CAs from an InputStreamconsole.log("[+] Loading our CA...")var cf = CertificateFactory.getInstance("X.509");try {var fileInputStream = FileInputStream.$new("/data/local/tmp/cert-der.crt");}catch(err) {console.log("[o] " + err);}var bufferedInputStream = BufferedInputStream.$new(fileInputStream);var ca = cf.generateCertificate(bufferedInputStream);bufferedInputStream.close();var certInfo = Java.cast(ca, X509Certificate);console.log("[o] Our CA Info: " + certInfo.getSubjectDN());// Create a KeyStore containing our trusted CAsconsole.log("[+] Creating a KeyStore for our CA...");var keyStoreType = KeyStore.getDefaultType();var keyStore = KeyStore.getInstance(keyStoreType);keyStore.load(null, null);keyStore.setCertificateEntry("ca", ca);// Create a TrustManager that trusts the CAs in our KeyStoreconsole.log("[+] Creating a TrustManager that trusts the CA in our KeyStore...");var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();var tmf = TrustManagerFactory.getInstance(tmfAlgorithm);tmf.init(keyStore);console.log("[+] Our TrustManager is ready...");console.log("[+] Hijacking SSLContext methods now...")console.log("[-] Waiting for the app to invoke SSLContext.init()...")SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {console.log("[o] App invoked javax.net.ssl.SSLContext.init...");SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);console.log("[+] SSLContext initialized with our custom TrustManager!");}});
},0);在cmd, 输入如下命令:$ adb push burpca-cert-der.crt /data/local/tmp/cert-der.crt
$ frida -U -f it.app.mobile -l frida-android-repinning.js --no-pause在关闭应用的情况下(避免Magisk Hide处于开启状态), 可得到回显并绕过SSL pinning。参考链接:https://xz.aliyun.com/t/6551#toc-9
参考链接
【6】Frida绕过SSL单向校验
- 双向证书校验解决方案
对于使用双向校验的应用需要在客户端本地寻找到证书,以及在客户端代码中寻找到证书密钥,然后安装到我们的代理软件中去。具体操作步骤也可查看链接【6】进行查看具体实际案例操作步骤。
- 不走系统http代理解决方案
对于设置不走系统代理的最直接明显的效果就是在设置好burp代理,依然可以正常使用APP,APP的网络通讯未受到丝毫影响。解决不走系统http代理的方式可以采用vpn代理方式进行绕过,即先将手机流量通过vpn发送到电脑代理软件,再通过代理软件抓包查看。使用vpn代理抓包可参考下一篇文章《charles+socks5代理+burpsuite抓包》。
常规应用系统无法抓包解决办法整理相关推荐
- Fiddler死活抓不了HTTPS包解决办法
Fiddler死活抓不了HTTPS包解决办法 转自:http://www.07net01.com/2016/12/1738252.html 有些同学可能已经按照我们正常的流程在feiddler中设置好 ...
- Linux无法联网怎么办?解析VMware上的CentOS7(Linux)系统无法联网的解决办法
Linux无法联网怎么办?解析VMware上的CentOS7(Linux)系统无法联网的解决办法! 许多人在VMware上安装了Linux系统之后,都会遇到无法联网的问题,作者也是遇到了这个问题,在进 ...
- IP地址与网络上的其他系统有冲突的解决办法:
IP地址与网络上的其他系统有冲突的解决办法: 如果是用局域网,那么是局域网中有其他电脑的IP地址与你的电脑的IP地址相同, 如果是单机直接上网,那么需要检查自己所使用的设备中哪一个设备是冲突的原因,例 ...
- window 服务器不稳定,服务器Windows系统突发情况的解决办法
服务器Windows系统现在还是大部分的站长的选择,有很多用户是使用Windows作为网站服务器的系统.今天小编对于服务器Windows系统在维护过程中出现的几种突发情况,来讲讲解决办法. 1.终端协 ...
- Charles抓包-解决显示乱码问题
Charles抓包-解决显示乱码问题 参考文章: (1)Charles抓包-解决显示乱码问题 (2)https://www.cnblogs.com/shuzf/p/9963394.html (3)ht ...
- win10修改系统配置处理器引导参数后,系统无限蓝屏解决办法
win10修改系统配置处理器引导参数后,系统无限蓝屏解决办法 0:开机时先按f8进入安全模式,在进入命令提示符 1.进入 启动修复 的 命令提示符(最好是使用有管理员权限的,不过普通用户我也每试过), ...
- 关于centOS7在U盘安装时遇到的dracut-initqueue[]:Warning:dracut-inituenue timeout....查找不到文件无法安装系统的问题的解决办法。
关于centOS7在U盘安装时遇到的dracut-initqueue[]:Warning:dracut-inituenue timeout-查找不到文件无法安装系统的问题的解决办法. 尝试自己安装ce ...
- Android端App无法抓包解决方法——Drony
Android端App无法抓包解决方法--安装Drony 1:安装drony (这里手机使用的Android设备) 2:开启代理抓包软件(Burpsuite) 3:配置drony转发 1:安装dron ...
- 惠普暗影精灵2 win10+linux双系统开机直接进win10,无法进系统选择界面的解决办法
惠普暗影精灵2 win10+linux双系统开机直接进win10,无法进系统选择界面的解决办法 先固态装的win10,后机械硬盘装的ubuntu(efi分区也在固态) 百度了很多,都说惠普暗影精灵bi ...
最新文章
- php倒序分页重复,时间倒序分页查询,翻页中有新增的数据插入db,导致返回重复数据,这个有什么好的解决办法没?谢谢大家...
- fsck.ext3: Unable to resolve 'LABEL=/design'
- hibernate状态转换关系图【原】
- 去中心化稳定币系统Venus Protocol即将推出v2
- 常用的模型评估指标(转)
- 第九家面试(上海富勒信息科技有限公司 )
- 登入ftp:500 OOPS: vsf_sysutil_bind, maximum number of attempts to find a listening port exceeded
- VectorDraw(CAD) web library 9.9 Crack
- LabVIEW FPGA PCIe开发讲解-实战篇:实验61:PCIe DMA+8位ADC(模拟数据采集卡)
- 毕业生见习期考核鉴定表(单位考核意见)
- 2014世界杯分组揭晓
- Win10安装.msi文件出现问题
- 12C安装oracle,Oracle 12C安装
- Tomcat - 深度学习 - 类加器详解
- 详解【java实现】编写一个程序,从键盘读入一段英文(多行),找出其中所有的英文单词,统计每个单词出现的次数,并按照单词出现次数由大到小排序后输出。
- 智联招聘中申请职位之后你根本不知道你申请的职位是啥,而且不想说...
- 惠普计算机怎样添加程序,小编教你惠普电脑如何进入bios设置
- http中302与304
- tensorflow 降级
- 艾伟:Memcached深度分析
热门文章
- python办公图表怎么画,用python绘制常用图表(一),上
- gradle打包流程(一)--- 整体把控
- 将 SharePoint 网站另存为模板
- OPT(奥普特)荣摘高工锂电“2022年度创新技术奖”
- 晕轮效应的一个真实故事
- Hudi(一)基本介绍
- LaTex中PDF裁剪工具pdfcrop的使用
- 芯片的datasheet请这样看
- pom.xml报错:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)
- 前端开发利器--PxCook(像素大厨)