登陆

极彩下载-运用Frida绕过Android App的SSL Pinning

admin 2019-11-09 210人围观 ,发现0个评论

咱们好!本文我将具体为咱们解说怎么运用frida结构,绕过Android运用程序的SSL pinning。

以下是本文将包含的内容:

Frida和SSL pinning简介

要求

设置和装置

Frida服务器设置

设置BurpSuite

推送署理的CA证书:

脚本注入绕过SSL pinning

过程概述

疑难解答

Frida和SSL pinning简介

要求

设置和装置

Frida服务器设置

设置BurpSuite

推送署理的CA证书:

脚本注入绕过SSL pinning

过程概述

疑难解答

Frida是什么?

Frida官网上是这么说的:

它是针对本地APP的相似油猴插件的东西,用更专业的术语来说,它是一个动态代码检测toolkit。它可以让你注入Java代码片段或许你自己的库到Windows中的APP中,也可以注入到macO极彩下载-运用Frida绕过Android App的SSL PinningS,GNU/Linux,iOS,Android和QNX的APP中。Frida还供给了一些构建在Frida之上的简略东西。这些东西你可以直接运用,也可以依据自己的需求来调整,或许是作为怎么运用API的示例。

它是针对本地APP的相似油猴插件的东西,用更专业的术语来说,它是一个动态代码检测toolkit。它可以让你注入Java代码片段或许你自己的库到Windows中的APP中,也可以注入到macOS,GNU/Linux,iOS,Android和QNX的APP中。Frida还供给了一些构建在Frida之上的简略东西。这些东西你可以直接运用,也可以依据自己的需求来调整,或许是作为怎么运用API的示例。

简而言之,Frida便是一个让你可以注入脚本到本地APP(此事例咱们将注入到安卓APP中)中的东西,然后修正APP的行为(在这儿比如中,咱们可以绕过ssl pinning并履行中间人进犯,即便APP运用的是HTTPS/SSL衔接),而且实时的进行动态测验。

现在,大多数运用程序已在其移动运用中完结了SSL pinning。这是为什么呢?让咱们考虑一个问题,假定咱们要在设备和服务器之间安全地交流一些数据。SSL传输层加密将使数据传输安全可靠?在数据传输之前,假如服务器的SSL证书与恳求的主机名和受信赖的根证书匹配,则客户端会查看该证书。

它不能保证供给的证书是服务器为恳求的主机名供给的实践证书。因而,依靠设备的可信存储证书不会使数据传输“安全”。

证书确定(Certificate pinning)是长途服务器在运用程序自身中信赖的硬编码证书,因而它将疏忽设备证书存储,并将信赖自己的硬编码证书,进一步的运用程序将运用该硬编码证书“安全地”与长途服务器通讯。

证书确定(Certificate pinning)是长途服务器在运用程序自身中信赖的硬编码证书,因而它将疏忽设备证书存储,并将信赖自己的硬编码证书,进一步的运用程序将运用该硬编码证书“安全地”与长途服务器通讯。

当咱们对大多数移动运用程序的HTTP恳求进行动态剖析时,SSL pinning绕过是需求完结的首要过程,由于现现在安排对数据隐私和经过网络的数据安全传输变得愈加注重,像一极彩下载-运用Frida绕过Android App的SSL Pinning些来自中间人进犯的要挟也成为了他们要点重视的方针。

Frida是一个结构,它将脚本注入到原生运用中,以在运转时操作运用程序的逻辑,这是一种更为动态的办法,可用于移动运用的浸透测验使命。

要求

在开始运用之前咱们需求进行一些设置,第一次设置或许需求花点时刻,但在此之后就会变得很轻松。假如你在任何一个过程都呈现了问题,都可以参阅文章结尾的“疑难解答”部分。主张将一切下载的内容保存在一个文件夹中。

I. 已 root 的设备/模拟器:

咱们需求一个已root的设备或模拟器,由于咱们需求将脚本注入到设备的根目录。我运用的是genymotion。Genymotion十分易于设置和运用,你可以在此处下载它。

一旦完结了genymotion的装置,咱们需求装置一个Android设备(Android 7+)。我将运用具有以下装备的“Google pixel XL”设备。

II. Python frida 包装置:

从这儿装置Python for Windows。

咱们需求为frida服务器装置一些python包。在终端中输入以下指令:

python -m pip install Frida

python -m pip install objection

python -m pip install frida-tools

or

pip install Frida

pip install objection

pip install frida-tools

III.渠道东西(adb):

从此处下载用于Windows的渠道东西。

IV. 下载注入脚本:

从此处下载咱们将推送到设备用于注入方针运用的注入脚本。

或许可以将此代码另存为frida.js,保存在与adb相同的文件夹中。

/*

Android SSL Re-pinning frida v0.2 030417-pier

$ 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

https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/

UPDATE 20191605: Fixed undeclared var. Thanks to @oleavr and @ehsanpc9999 !

*/

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 InputStream

console.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 CAs

console.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 KeyStore

console.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("[-] Wa极彩下载-运用Frida绕过Android App的SSL Pinningiting 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.TrustM请回答1997anager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers, c);

console.log("[+] SSLContext initialized with our custom TrustManager!");

}

});

},0);

设置和装置: I. 将设备衔接到 adb:

咱们需求将设备衔极彩下载-运用Frida绕过Android App的SSL Pinning接到adb以在设备上运转指令。但首要转到settings >> Developer options,并在设备中启用调试形式,以便adb可以与设备通讯。

转到已提取渠道东西的文件夹,然后运转以下指令将设备衔接到adb

//adb connect <ipofdevice:port>

adb connect 192.168.1.190:5555

假如设备中呈现弹出窗口,请单击“答应Allow”。

查看设备是否已衔接到adb:

adb devices

你应该可以看到设备的IP以及称号。

II.下载 frida 服务器以获取支撑 Android 设备的 arch 版别:

咱们需求依据咱们设备的arch版别,为咱们的Android设备下载frida服务器包。

要查找设备的arch版别,请运转以下指令。

adb shell getprop ro.product.cpu.abi

假如设备装备与上面大名鼎鼎的相同,请下载:

frida-server-12.4.7-android-x86.xz

frida-server-12.4.7-android-x86_64.xz

IV. 在设备中装置方针运用程序。

在咱们的设备中装置需求绕过SSL pinning的运用程序。翻开运用程序并使其在后台运转。

Frida 服务器设置:

在注入脚本之前,咱们需求在设备中运转frida服务器。请依照以下过程操作:

I. 将 frida-server 推送到设备:

现在,咱们需求将咱们的frida-server文件推送到设备中。仿制adb文件夹中的“frida-server-12.4.7-android-x86.xz”文件并运转以下指令。

//adb push <path_of_frida_server_folder><space>data/local/tmp>

adb push C:\ADB\frida-server /data/local/tmp

II. 颁发 frida-server 权限: adb shell chmod 777 /data/local/tmp/frida-server 设置 BurpSuite:

请遵从本攻略为android设备在burp中设置署理。

推送署理的 CA 证书:

为了可以阻拦流量,frida需求拜访咱们的Burpsuite CA证书。咱们将在BurpSuite Setup中推送在过程5中下载的相同证书。

将证书推送到设备并放置在与frida-server相同的方位,将其命名为cert-der.crt(由于此称号和途径已在frida.js中大名鼎鼎,这样可以防止一些不必要的问题)

// adb push <pathtocacert.der>/data/local/tmp/cert-der.crt

adb push cacert.der /data/local/tmp/cert-der.crt

脚本注入绕过SSL pinning:

现在,让咱们将frida.js注入方针运用程序。

I. 将 frida.js 脚本推送到设备:

将frida.js仿制到adb文件夹,并运转以下指令将frida.js推送到设备中。

//adb push <path_to_frida.js_folder>/data/local/tmp

adb push C:\ADB\frida.js /data/local/tmp

II. 查看并运转设备中的 frida 服务器 adb shell /data/local/tmp/frida-server & III. 列出设备上一切正在运转的进程

现在,咱们需求找出方针运用程序的ID。咱们将列出设备上一切正在运转的服务,包含你的运用程序进程。

翻开一个新的终端,并键入以下指令。

frida-ps -U

IV. 找到你运用程序的包称号。

V. 将 frida.js hook 到方针运用程序中:

最终,咱们将运用以下指令将frida.js hook到原生运用程序中:

//frida -U -f <your_application_package_name>-l <path_to_frida.js_on_your_computer>--no-paus

frida -U -f com.twitter.android -l D:\frida\frida.js --no-paus

VI. 绕过!

假如一切顺利,那么方针运用程序的一切流量都将被BurpSuite阻拦。

简而言之:

1. 在genymotion上下载并装置设备

2. 装置frida和objection东西

python -m pip install Frida python -m pip install frida-tools python -m pip install objection or pip install Frida pip install frida-tools pip install objection

3. 下载adb渠道东西

4. 下载frida注入脚本

5. 将设备衔接到adb

//adb connect

6. 下载frida服务器以获取支撑Android设备的arch版别

7. 找出设备的arch版别

adb shell getprop ro.product.cpu.abi

8. 在设备中装置方针运用程序。

9. 将frida-server推送到设备:

//adb push

10. 颁发frida-server权限:

adb shell chmod 777 /data/local/tmp/frida-server

11. 设置burpsuite

12. 推送署理的CA证书

// adb push /data/local/tmp/cert-der.crt

13. 将frida.js推送到设备:

//adb push /data/local/tmp

14. 查看并运转设备中的frida服务器

adb shell /data/local/tmp/frida-server &

15. 列出设备上一切正在运转的进程:

frida-ps -U

16. 找到你运用程序的包称号

17. 将frida.js hook到方针运用程序中

//frida -U -f -l --no-paus

18. 在BurpSuite中阻拦流量。

疑难解答

1. ADB 看护程序无法衔接

假如发作如下过极彩下载-运用Frida绕过Android App的SSL Pinning错:

adb devices

adb server is out of date. killing...

cannot bind 'tcp:5037'

ADB server didn't ACK

*failed to start daemon*

error:

i. 翻开 environment System properties>>Advanced>>Environment Variables

ii. 单击途径并删去C:/Android条目或指向adb东西的途径

iii. 将一切渠道东西仿制到genymotion>>tools文件夹中

iv. 创立新途径并增加genymotion>>tools文件夹的途径。

i. 翻开 environment System properties>>Advanced>>Environment Variables

ii. 单击途径并删去C:/Android条目或指向adb东西的途径

iii. 将一切渠道东西仿制到genymotion>>too极彩下载-运用Frida绕过Android App的SSL Pinningls文件夹中

iv. 创立新途径并增加genymotion>>tools文件夹的途径。

2. frida/ pip 不被识别为内部或外部指令

i. 翻开 environment System properties>>Advanced>>Environment Variables

ii. 创立新途径并增加Python>>文件夹的途径

i. 翻开 environment System properties>>Advanced>>Environment Variables

ii. 创立新途径并增加Python>>文件夹的途径

3. 将运用程序装置到设备时呈现 Arm translation error。

i. 从此处下载arm translation文件

ii. 将文件拖放到设备模拟器中,或是在运用物理设备时从康复中改写此文件

iii. 重启设备后,你将可以拖放装置方针运用程序

i. 从此处下载arm translation文件

ii. 将文件拖放到设备模拟器中,或是在运用物理设备时从康复中改写此文件

iii. 重启设备后,你将可以拖放装置方针运用程序

4.Failed to spawn:spawn Android apps 时不支撑 argv 选项

查看核算机上的frida.js途径。途径或许不正确。你有必要给出frida.js文件的绝对途径。

5. frida 服务器已发动但无法列出服务

断开并从头衔接设备中的wifi。

*参阅来历:medium,FB小编secist编译,转载请注明来自FreeBuf.COM

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP