android apk通过 brida与frida工具进行流量加解密_adb frida burp_不会攻防的小李的博客-程序员宅基地

技术标签: android-studio  android  android studio  

准备环境:

android测试机一台(MI8SE 已root)

brida jar包(后期导入burp进行使用)

frida 客户端(导入手机或者模拟器)

安装apk文件到android手机中(此处仅为学习,不提供apk文件,感兴趣的朋友可以网上自行下载)

第一步:

手机设置代理:

点击应用,使用burp进行任意数据包获取。

查看到参数deviceId,使用android调试工具jadx打开apk文件(此处为非加壳apk,仅为方便学习)

,对参数进行搜索,进行代码追踪。

双击代码即可进行跳转。

查看到形似参数中将deviceId进行传入。

 查看到deviceId传入到Map集合中。

最后para集合被传入到postResponseWithParamsInMapAsync方法中。

按住ctrl进行代码跳转,进行再次追踪,查看到传入到方法postResponse中。 

 再次点击进行代码跳转,查看到构建body的方法。并成功追踪到密钥。

 按照ctrl点击加密方法跳转。

 查看到加密为AES加密。

 至此,代码层分析完毕。接下来就是通过工具利用上述收集信息进行流量加解密。

安装frida

1.通过python安装frida和frida-tools

python -m pip install frida

python -m pip install frida-tools

2.查看安装PC端frida版本,安装对应的客户端frida-sever端到/data/local/tmp(模拟器x86/真机x64)

使用adb push命令将frida文件传入到手机 /data/local/tmp路径中

adb push +frida文件存放路径+ /data/local/tmp

frida下载地址

3.进入tmp目录更改frida-sever端权限为777,然后./frida运行

4.adb forward tcp:27043 tcp:27043和adb forward tcp:27042 tcp:27042(使用此命令打开客户端2个端口)

 打开burp导入brida jar包进行安装。(此处对于burp安装jar包不在讲解)

接下来对brida进行环境配置,以及文件导入。

 

brida js文件如下:

'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 < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}

 都为绿色为运行正常。

 使用burp即可进行流量加解密。

 

至此流量加解密已完成。 

本文仅为学习练习,方便自己记忆,文章项目中涉及的任何脚本工具,仅用于测试和学习研究,禁止用于商业用途。

禁止模仿,产生的一切问题,均由用户本人负责,作者不承担任何直接责任。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_50326226/article/details/125255159

智能推荐

POJ 1256 Anagram(输入可重集枚举排序)-程序员宅基地

【题意简述】:本题题意很好理解!题目给出的Hint,使我们对关键点有了更加清晰的认识An upper case letter goes before the corresponding lower case letter.So the right order of letters is 'A'就是给一个序列(序列可以有重复的元素),让我们输出它的所有排列,字母顺序规定给出!【分析】

解决当在对个tab页中使用easyui-layout导致的第二个tab中布局混乱问题-程序员宅基地

一、问题描述:第一个tab页和第二个tab中布局相同,左右布局,即west 和center ,页面初始化时,自动展示第一个tab页,布局正常如图一所示,但切换第二个tab页时发现west部分没有撑起设定的width,而是缩到左侧,见图二。图一:(tab1)图二:(显示混乱的tab2)二、解决办法:添加tab 页切换监听,当切换时,自动刷新布局,代码如下:$(f...

跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode416分割等和子集-程序员宅基地

又几天没刷题了,看机器学习基础了。手生了,罪过罪过。最近需要刷一下动态规划,感觉很久没刷了,需要补补了。好了,经典的背包问题,上题:416. 分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2:输入: [1, 2, 3, 5]

JetPack--Paging2_Aruba233的博客-程序员宅基地

Paging是一个用于分页加载的组件,对于一些列表数据,以前大家都使用过的一种方式是定义一个page,当达到加载更多条件时,page加一再去请求数据,为此我们要写很多重复的代码,Paging就对分页进行了一个封装Paging由分为三个模块1.DataSource:数据从该模块中获取,数据可以来源于网络、本地数据库等2.PagedList:负责具体获取数据的逻辑,何时获取、加载下一页、预加载等..._paging2

ThreadX_01:基本概念-程序员宅基地

文章目录https://blog.csdn.net/wa0jixu/article/details/104473297?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158772458019725247636838%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%2..._threadx

随便推点

[BZOJ4033][HAOI2015]T1(树形dp)-程序员宅基地

就算你将遗忘一切,我也会永远记得。

What are you looking for on top of the world? English readings.-程序员宅基地

Hillary and Tenzing are famous around the world for being the first people to climb Mount Everest in 1953. But few people have heard about the discussion they had half way up the mountain. "You se

python第2位的值_Python组通过匹配元组列表中的第二个元组值-程序员宅基地

在本教程中,我们将编写一个程序,该程序将列表中具有与第二个元素相同的元素的所有元组分组。让我们看一个例子来清楚地理解它。输入值[('Python','nhooos'),('Management','other'),('Django','nhooos'),('React','nhooos'),('Social','other'),('Business','other')]输出结果..._tuples.append(tup)

tuxedo安装与配置入门-程序员宅基地

一 Tuxedo 是什么?  Tuxedo是BEA公司(现已被Oracle公司收购)的一个客户机/服务器的“中间件”产品,它在客户机和服务器之间进行调节,以保证正确地处理事务。它用C语言技术开发的并且有很高性能。  TUXEDO是在、Internet 这样的分布式运算环境中开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。它具备分布式事务处理和应用通信功能,并提供完善的各种服...

【Codeforecs 1392】Codeforces Global Round 10 | ABCDF题解-程序员宅基地

A. Omkar and Password题目大意:每次可以选择两个不相等的两个数拿出来,变为两数之和,再放回去问最后少的长度是多少?题目思路:还被这个题卡了2min..一开始想区间dp ,后来发现离谱.重读题才发现合并两个不相等的那么只要序列不是全部相等,永远可以合并到1Code:/*** keep hungry and calm CoolGuang!***/#pragma GCC optimize(3)#include <bits/stdc++.h&g

ubuntu18.04安装deb包_ubuntu18.04 deb-程序员宅基地

1.火狐浏览器 Tool->Downloads 打开下载的deb包目录2.在deb目录右键,打开终端3.输入sudo dpkg -i,之后将deb包拖入终端4.回车,输入密码,完毕u_ubuntu18.04 deb