Android渗透测试frida 您所在的位置:网站首页 frida插件开发 Android渗透测试frida

Android渗透测试frida

2023-07-21 19:25| 来源: 网络整理| 查看: 265

Android渗透测试frida——Brida插件加解密实战演示

ESE / 2020-04-16 09:04:13 / 浏览数 18754 社区板块 移动安全 顶(0) 踩(0)

Android APP测试时,经常发生会遇见数据包加密传输,这样就会影响测试。不过,Brida可以编写加密解密脚本,对加密的数据包进行解密,在加密。工具或者插件都是为了测试方便。

环境 Android 8.1.0 pixel Burpsuite 1.7 windows 10 eseBrida.apk (下面给下载地址) phpstudy 什么是Brida

介绍Brida 1、Brida.jar为Burpsuite插件 2、bridaServicePyro是用于Frida适配到burpsuite上的python脚本,这一部分存储在插件中,在执行brida过程中复制到缓存文件夹中。 3、script.js是要注入到目标应用程序的javascript脚本,它会通过Frida带有的rpc.exports功能将信息返回到拓展程序中。 4、该script.js脚本会被Frida注入到我们在 Brida中指定的进程中所以我们可以直接使用 Frida的 api。 5、目前只支持python2.7

安装frida 需要安装frida,参考文章https://www.jianshu.com/p/c349471bdef7

安装Brida 在Burpsuite安装Brida

安装完成,在python2.7安装Pyro4 pip install Pyro4

实战

apk运行环境 本文提供一个自己写的eseBrida.apk,拿到apk,因为我这里是测试版本,安装需要加-t参数, adb install -t esebrida.apk,安装运行如下:

有个设置按钮,可设置服务器地址。这里利用phpstudy在www目录下运行AndroidLogin.php,

然后在浏览器访问服务器地址如http://192.168.3.254/AndroidLogin.php 看是否可以访问成功,如下:

将此地址填入安卓apk设置中,burpsuite设置代理:

手机wifi设置代理,如下:

在apk中输入用户名密码,

查看抓取的数据包:

重点 这里的数据是密文传输,不利于爆破,这里想对算法进行解密,然后在实现加密传输大奥服务器端。

分析apk 利用jeb 反编译apk,发现加解密算法AesEncryptionBase64类

上层定位,发现加密算法的秘钥硬编码,如下

自此,apk的流程已经分析清楚了。接着可以有两种思路

方法1、将java代码复制出来,在eclipse实现以下加解密流程,就可以对传输的数据进行解密加密了。 方法2、利用Brida调用apk自身加密解密函数,一键实现加密解密操作。

自然,方法2相对1要简单,而且操作方便。所有便有这篇文章

编写Brida js脚本 1、运行frida 首先下载startFridaService.py,运行python startFridaService.py

2、运行Brida,如下

3、先给一个Brida简单的test.js框架

'use strict'; // 1 - FRIDA EXPORTS rpc.exports = { exportedFunction: function() { }, contextcustom1: function(message) { console.log("Brida start :--->"); return "Brida test1"; }, getplatform: function () { if (Java.available) { return 0; } else if (ObjC.available) { return 1; } else { return 2; } } }

4、测试方法contextcustom1

成功执行脚本

5、编写Brida调用encrypt加密函数

'use strict'; // 1 - FRIDA EXPORTS rpc.exports = { exportedFunction: function() { }, contextcustom1: function(message) { console.log("Brida start :--->"); return "Brida test1"; }, contextcustom2: function(message) { console.log("Brida Java Starting script ---->ok"); var enc; Java.perform(function () { try { var key = "9876543210123456"; var text = "admin"; //hook class var AesEncryptionBase64 = Java.use('com.ese.http.encrypt.AesEncryptionBase64'); console.log("Brida start : encrypt before--->"+text); //hook method enc = AesEncryptionBase64.encrypt(key,text); console.log("Brida start : encrypt after--->"+enc); } catch (error) { console.log("[!]Exception:" + error.message); } }); return enc; }, getplatform: function () { if (Java.available) { return 0; } else if (ObjC.available) { return 1; } else { return 2; } } }

6、执行方法contextcustom2

通过签名抓取的数据包, 发现加密数据一致,证实调用apk加密算法。

7、Burpsuite右键菜单

发现4个方法与请求数据包与返回数据包相互一一对应 1、Brida Custom 1----->contextcustom1 2、Brida Custom 2----->contextcustom2 3、Brida Custom 3----->contextcustom3 4、Brida Custom 4----->contextcustom4

8、编写对应插件eseScript.js脚本 加载其他脚本,需要重启burpsuite,

'use strict'; // 1 - FRIDA EXPORTS rpc.exports = { exportedFunction: function() { }, //AesEncryptionBase64 encrypt contextcustom1: function (message) { console.log("Brida start :0--->" + message); var data = hexToString(message) console.log("Brida start :1--->" + data); var enc; Java.perform(function () { try { var key = "9876543210123456"; var text = data; //hook class var AesEncryptionBase64 = Java.use('com.ese.http.encrypt.AesEncryptionBase64'); console.log("Brida start : AesEncryptionBase64 ---> success"); console.log("Brida start : encrypt before--->"+text); //hook method enc = AesEncryptionBase64.encrypt(key,text); console.log("Brida start : encrypt after--->"+enc); } catch (error) { console.log("[!]Exception:" + error.message); } }); return stringToHex(enc); }, //AesEncryptionBase64 decrypt contextcustom2: function (message) { console.log("Brida start :0--->" + message); var data = hexToString(message) console.log("Brida start :1--->" + data); var text; Java.perform(function () { try { var key = "9876543210123456"; var enc = data; //hook class var AesEncryptionBase64 = Java.use('com.ese.http.encrypt.AesEncryptionBase64'); console.log("Brida start : AesEncryptionBase64 ---> success"); console.log("Brida start : decrypt before--->"+enc); //hook method text = AesEncryptionBase64.decrypt(key,enc); console.log("Brida start : decrypt after--->"+text); } catch (error) { console.log("[!]Exception:" + error.message); } }); console.log("Brida start : decrypt after--->"+stringToHex(text)); return stringToHex(text); }, //AesEncryptionBase64 encrypt contextcustom3: function (message) { console.log("Brida start :0--->" + message); var data = hexToString(message) console.log("Brida start :1--->" + data); var enc; Java.perform(function () { try { var key = "9876543210123456"; var text = data; //hook class var AesEncryptionBase64 = Java.use('com.ese.http.encrypt.AesEncryptionBase64'); console.log("Brida start : AesEncryptionBase64 ---> success"); console.log("Brida start : encrypt before--->"+text); //hook method enc = AesEncryptionBase64.encrypt(key,text); console.log("Brida start : encrypt after--->"+enc); } catch (error) { console.log("[!]Exception:" + error.message); } }); return stringToHex(enc); }, //AesEncryptionBase64 decrypt contextcustom4: function (message) { console.log("Brida start :0--->" + message); var data = hexToString(message) console.log("Brida start :1--->" + data); var text; Java.perform(function () { try { var key = "9876543210123456"; var enc = data; //hook class var AesEncryptionBase64 = Java.use('com.ese.http.encrypt.AesEncryptionBase64'); console.log("Brida start : AesEncryptionBase64 ---> success"); console.log("Brida start : decrypt before--->"+enc); //hook method text = AesEncryptionBase64.decrypt(key,enc); console.log("Brida start : decrypt after--->"+text); } catch (error) { console.log("[!]Exception:" + error.message); } }); console.log("Brida start : decrypt after--->"+stringToHex(text)); return stringToHex(text); }, getplatform: function () { if (Java.available) { return 0; } else if (ObjC.available) { return 1; } else { return 2; } } } // Convert a ASCII string to a hex string function stringToHex(str) { return str.split("").map(function(c) { return ("0" + c.charCodeAt(0).toString(16)).slice(-2); }).join(""); } // Convert a hex string to a ASCII string function hexToString(hexStr) { var hex = hexStr.toString();//force conversion var str = ''; for (var i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有