原文地址:httptoolkit.tech/blog/frida-…
原文作者:twitter.com/pimterry
发布时间:2021年7月6日
一些安卓应用不遗余力地确保即使是设备的所有者也无法看到该应用的HTgithub永久回家地址TPS请求内容。
这对安全研究、隐私分析和调试,以及对你自己的设备的控制都是有问题的。这也不是一个纯粹的理论问题–像这样的保护措施试图直接阻止HTTPS检查工具,如HTTP工具包,它允许你自动拦截来自Android设备的HTTPS进行检谷歌play查、测试和嘲弄,就像这样。
www.youtube.com/watch?v=ttf…
这取java模拟器决于目标应用程序是否信任调试代理的Hgithub官网TTPS流量证书。这些HTTgoogleP拦截和模拟技术对于测试和了解大多数应用程序是非常有用的,但它们与一小部分高度警http 302惕的应用程序有问题,这些http 404应用程序添加了额外的保护措施,旨在锁定其HTTPS流量并阻止这种检java模拟器查。
最后,这是你的安卓设备,无论你是一个检查漏洞的安全研究java编译器人员,一个试图了解应用程序如何使用其API的开发人员,还是一个记录应用程序共享哪些数据的隐私倡github下载导者,你都应该能够看到你使用的应用程序在你自己google浏览器的手机上传输和google谷歌搜索主页接收的信息。
像证书钉住这样的保护措施使之变得困难。
让我们谈谈如何通过使用Fridahttp代理移除SSL锁定来进行反击,并揭露任何应用程序正在发送的真实流量。
什么是证书锁定?
默认情况下,当一个安卓应用进行HTTgithub官网登陆入口PS连接时,它会通过比较服务器证书的签发者和安卓内置的受信任的系统证书机构列表来github中文官网网页确保它是在与一个受信任的服务器对话。
99%的应用程序都坚持使用该默认值。你不能github下载在http代理正常设备上改变系统证书颁发机构,所以这个列表是相当可靠和安全的。不过,你可以在被root的设备和大多数模拟器上改变它,所以很有可能通过在这些环境中使用调试代理进行HTTPS拦截,检查这些应用程序GitHub的HTTPS流谷歌安装器量。
然而googleplay安卓版下载,不幸的是,最后java语言1%不坚持默认配置的应用就比较复杂了。这些应用程序包括他谷歌安装器们自己的自定义证书验证,以指定他们准备信github中文官网网页任的确切HTTPS证书颁发者,而不是信任设备的所有受信任github官网登陆入口的证书颁发者。这确保他们永远不会信任来自谷歌空间他们没有googleplay明确承认的证http协议书颁发机构的新证书,因此不会意外地将HTTPS流量暴露给真正的服务器以外的任何人。
这通常被称为 “公钥钉住”、”证书钉住 “或 “SSL钉住”。
由于这阻止了除特定的证书颁发机构名单以外的所有证书颁发机构,它也阻止了Hgithub开放私库TTPS调试代理使用的私人证书颁发机构,因此我们遇到了问题。
证书锁定java语言曾经是一个更流行的技术,早在安卓牛轧糖之前,安卓自己的证书验证比较宽松,用户很容易被骗在他们的设备上安装新的可信证书。现在,这种做法受到了更严格的控制,证书钉住的情况更github永久回家地址少了谷歌浏览器下载,因为(java环境变量配置正如我们将看到的)它实际上是谷歌账号安全戏剧,而且谷歌自己的Google文档现在特别建议反对这种做法。
谷歌建议应避免使用证书固定,因为它有可能导致应用程序无法使用。
由于类似的原因,它在网络上并不流行。曾经有一个短暂的HTTP标准来支持这种做法(HTTP公钥钉住google浏览器),但它已经被http 404废弃了,而且浏览器也取消了对它的支持,因为它太容易意外地和不可修复地(!)破坏应用程序,而没有什么安全好处。谷歌三件套
也就是说,它仍然在安卓系统的某些角落使用,特别是由非常高调的应用程序(如Twitter)和非常安全敏感的应用程序(如银行谷歌应用程序,如N26或BBVA),他们都对如何使用他们的Agoogle网站登录入口PI的细节googleplay安卓版下载非常保护,并希望窥探者google不能看得太仔细。
在实践中,这意味着如果你想知道Twitter应用程序如何使用Twitter API,你需要让它信任你的HTTPS拦截证书。
进入Frida
Frida是一个跨平台的多用途框google服务框架架,用于从应用程序外部动态地改变应用程序的工作方式。想象一下Greasemonkey,不过是针对程序而不是网页的。
Frida可以让你做一些事情,比如记录每次应用程序调用特定方法的情况,改变已建应用程序中的Google常量,记录应用程序中的值如何变化,或替换httpwatch方法以完全禁用功能。
你通过在JavaScript中编写小脚本来进行这些改变,这些脚本使用Frida的API来定义将被应用于目标进程的转换。
Frigithub中文社区da支持安卓系统,主要是使用一个运行在已root设备上的设备上的服务器,并通过ADB暴露一个API,所以你可以谷歌play在你的电脑上使用Frida的CLI工具,在你的手机上快速转换应用程序。
这是httpclient非常整洁的! 但如果你不熟悉低级别的逆向工程,它也是相当令人生畏的,因为内部结构和许多文档都非常涉及应用程序如何在各种目标平台上工作的细微细节。
幸运的是,它实际上没有那么复杂或那么困难。让google谷歌搜索主页我们一步一步地走完整个过程。
如何java面试题用Frjava环境变量配置ida删除证书钉住?
在一个较高的水平上,你需要。
- 将ADB连接到一个有根的设备或模拟器上
- 在设备/模拟器上安装并启动Frida
- 在你的电脑上安装Frida
- 告诉Frida你想编辑的应用,并提供一个知道如谷歌浏览器下载何删除证书钉住逻辑的脚本
让我们来看看如何在实践中做到这一点。
通过ADB连接到一个设备
ADB是安卓调试桥,是一个用于远程调试和控制安卓设备的官方安卓HTTP工具。
如果你还没有ADB,你就需要安装它。要做到这一点,你需要安装Android Studio并google浏览器使用其中的SDK管理器界面,或者直接下载包括ADB在内的java面试题平台工具作为独立包。
本指南的其余部分将假设你已经在GitHub$PATH中找到了googleadb。
你还需要一个有root权限的目标设备。
如果你有一个可用的root设备,或者你想设置一个java面试题,那么这很好。你只需要把它插入你的电脑,并启用USB调试功能,以允许通过ADB进行调试。
如果你没有扎根的设备,你可以使用模拟器来代替。要设置一个模拟器,使用AVD(安卓虚拟设备)管理器,可以从安卓工作室的用户界面上,或者通过在独立的命令行工具中运行avdmanager。
你的模拟器可以使用任何Andhttp 404roid版本(尽管与你的机器架谷歌浏览器构相匹配的最新版本是一个好主意),但必须使用非 “Gogithub下载ogle Play “版本。Vanilla或 “Google APIs “都可以,但Google Play的构建包括类似于物理设备的限制,限制了调试访问。
一旦一切准备就绪,你应该能javascript够在命令行上运行adb设备,并看到你http 302的设备列在那里。
在设备上安装并启动Frgoogle商店ida
首先,从GitHub下载Fridhttp://www.baidu.coma Android服务器。
你需要一个类似google谷歌搜索主页frida-server-VERSION−android−VERSION-android-ARCH.xz的版本,用google于最新的VERSION,其中VgoogleERSION,其中ARCH是你设备的架构。对于模拟器来说,可能是x86_64,对于物理设备来说,可能是arm64(或者可能是javaeearm,对于较老的设备)。
你需要解压缩.xz文件以获得其中的二进制文件。这不是一种常见的压缩格式googleplay,所以你可能需要7-Zip(Windows)或Unarchivejavascriptr(Mac),如果你还没有它们。
然后你需要把二进制文件复制到java怎么读设备上,使其可执行,并以root身http://www.baidu.com份启动服务器。像这样。
# Copy the server to the device
adb push ./frida-server-$version-android-$arch /data/local/tmp/frida-server
# ^Change this to match the name of the binary you just extracted
# Enable root access to the device
adb root
# Make the server binary executable
adb shell "chmod 755 /data/local/tmp/frida-server"
# Start the server on your device
adb shell "/data/local/tmp/frida-server &"
最后一条命令将启动Frida,并保持默默运行。如果它打印出任何输出,那么很可能是出了问题–很可能是你下载的服务器的架构不对,或者你没有以root身份运行这些命令。
在你的电脑上安装Frida
好了,你已经有一个可调试的设备与Frida服务器运行连接。
为了控制它,你需要在你的电脑上安装Frida CLI工具。为此你需要安装Python,然后你只需要运行。
pip install frida-tools
你可以通过运行frida-ps -U来测试。这将通过USB(-U)连接到服务器,并列出目标设备上每个运行谷歌翻译进程的细节。如果这显示的是一个进程列表,那么你就一切正常了
用Frida禁用SSL引脚
最后也是最重要的一步github官网登陆入口:我们需要告诉Frida改造目标应用程序,删除证书锁定,这样我们就java语言可以看到它所发送的流量。
要做到这一点,我们首先需要目标进程的软件包名称。你可以在frida-ps -U的输出中看到当前正在运行的每个进程的某个地方列出这java编译器个名字,或者你可以从应用程序的play stor谷歌空间e URL中找到它。
例如,HTTP Toolkit的Play Store页面是pgithub汤姆lay.google.com/store/apps/… ,包名是techhttp 302.httptgithub开放私库oolkit.android.v1。
(如果你想测试这个,但你不确定取消钉子的内容,我已经在httptoolkit/android-ssl-pinning-demo发布了一个演示证书钉子的应用。你可以从GitHub的发布页面下载该应用的内置APK,然后用adb in谷歌空间stall ./ssl-pinning-demo.apk来安装它)
然后我们需http 500要一个脚本,它将重写该应用程序。Frida脚本是简单的JavaScript,它java环境变量配置可以使用Frida的API来定义目标应用程序中方法的替换。通过这样做,他们可以让一个检查证书的方法什么都不做,让一个类忽略证书引脚的配置,或者几乎任何其他东西。
编写这些脚本是相当复杂的。有很多小的单独的脚本,旨在从特定的目标应用程序或某些HTTPS库中移除钉子,但没有多少脚本试图为所有HTTPS流Google量移除钉子。
幸运的是,我一直在开发一个通用的Frida脚本,所以你可以直接使用它。它在httptoolkit/frida-android-unpinning GitHub repo中作为frida-script.js提供。它结合了许多其他的google中国公共脚本,已google浏览器经针对各种不同的目标进行了谷歌账号测试,并且非常欢迎对其google商店进行扩展,以涵盖任何新的库或目前没有涵盖的技术
要使github中文社区用它,在你的电脑上保存frida-script.js,然后运行。
frida --no-pause -U -l ./frida-script.js -f $TARGET_PACKAGE_NAME
这将在你的手机上重启应用程序,并打印出一系列尝试解压的库,其google中国中[+]代表成功修补的库,[]代表没有修补的库(通常是因为该应用程序不使用这些库)。
当以后调用任何解压方法时,你也会看到一个 –> 绕过 [pinning method] 的消息,让你知道这个应用正在使用哪些 API。
测试证书解销
好了,你已经有了一个设备,你已经设置了Fridagithub汤姆,你已经有了一个可以解除HTTPS证书的脚本。现在是时java编译器候测试一下google浏览器了!
这里有几个高知名度的应用http://192.168.1.1登录程序使用证书锁定来保护他们的HTTPS流量,这可能是有趣的玩法。
- Paypal
- N26的移动银行应用
- 英国NHS的COVID追踪应用
让我们google翻译试着看一下他们的HTTPS流量。你需要一个java环境变量配置HTTPS调试代理来测谷歌空间试 – HTTP工具包将工作,或者你可以使用另谷歌账号一个HTT谷歌地图PS拦截代理,如BurpJava或查尔斯,如果你喜欢。
一旦你java编译器拦截了设备,尝试打开上述任何应用程序,你会在调试工具中看到TLS连接错误,以及应用程序中的奇怪行为。例如,当打开google网站登录入口Twitter时,HTTP Toolkit给我显示了这googleplay安卓版下载个。
HTTP Toolkit显示大量的证书拒绝信息
这意味着一个HTTP客户端(Twitter应用程序)正在连接,然后立即拒绝证书,没有java面试题发送任何请求。每一个应用程序都提供了一些类似这样的错误,对于那google翻译些证书被钉在应用程序内的特定主机。
为了打败这一点并拦截Twitter的真实API流量,我只需要运行。
frida --no-pause -U -l ./frida-script.js -f com.twitter.android
这样一来,我的手机上就重新启动了Twitter,而且我马上就有了流量。
HTTP工具箱显示有很多Twitter的API请求
中奖了! 我们已经删除了钉子,所以Twitter应用程序现在信任我们的MitM HTTPS代理,我们可以拦截和检查其流量http 500。
从这里,你可以Java探索每个请求的内容,javaee或者添加规则来重写、模拟或完github中文官网网页全阻止它们。
注意事项
理论上,Frida能够击败你可能实现的任何证书锁定:如果谷歌浏览器你能写一些代码来检查证书,Frida就能google服务框架删除这些代码。
也就是说,这完全取决于你使用的脚本是否知道具体的证书锁定代码或使用的API。这种技术是否有效,完全取决于目标应用和谷歌浏览器Frida脚本的组合。
上述脚本确实从我所知道的每一个内置API或广泛使用的库中删除了证书锁定,我已经https和http的区别在这里列出的应用程序和一长串其他的应用程序中成功地测试了它。对于大多数情况来说,这是一个很好的通用脚本,但它java编译器并不能完全适用于Java现在100%的有证书锁定的应用程序。如果谷歌空间你确实发现了没有处理的情况,我非常希望能有更多的例子和贡献来涵盖更多的情况,以帮助剥离尽可能多的证书钉住的实现,所以请联系我或提交一个问题
值得注意的是,一些应用程序会通过从头开始实施他们自己的自定义证google书锁javascript定技术,使其尽可能地难以被禁用。这方面的主要例子是各种Facebook应用,它们都使用自己的自定义TLS重新实现,而github下载不是使用标准的平台API。
从理论上讲,在同一个Frida脚本中自动删除证http 302书钉住功google中国能是绝对可能的(非常欢迎贡献!),但这比嘲弄一个知名的通用库要困难得多,所以我还没有这样做,所以这个脚本不会对Facebook、Facebook Messenger、Instagram或类似的东西起作用。
幸运的是,这并不重要googleplay,因为Facebook在他们的应用程序中提供了一个白帽选项,允许github中文社区安全研究人员java培训直接禁用证书钉住,你可以直接用它来代替。
接下来怎么办?
希望你现在已经让Frida工作了,你可以看到、调试和改写你感兴趣的每个应用程序的秘密API流量。
下一步是开始进一步探索,检查其他流行的应用程序所使用的API和泄露的数据,并谷歌浏览器帮助发现和修复Frida脚本还不能工作的情况,这样我们就可以把每一个钉子的API戳出来。开google商店始测试github官网登陆入口吧!
有任何问题,或遇到问题?请直接联系javaee我们或在Twitter上联系。
通过www.DeepLgoogle网站登录入口.com/Translator(免费版)翻译