Yakit针对流量加密APP的Frida rpc解决方案

2024-10-14 10 0

1. 基础知识

1.1. 案例APP

我们使用网上找到一个登录加密的app,作为我们的案例。该app功能非常简单。

Yakit针对流量加密APP的Frida rpc解决方案插图

输入用户名密码后点击登录,后端数据报文如下:

Yakit针对流量加密APP的Frida rpc解决方案插图1

参数和响应报文均使用AES进行加密。

1.2. Yakit热加载脚本输出log

Yakit针对流量加密APP的Frida rpc解决方案插图2

2. python rpc接口准备

关于如何分析app,写rpc脚本在此不再详细讲解。写好的代码如下:

python脚本

import frida
import json
from flask import Flask, jsonify, request

def message(message, data):
if message['type'] == 'send':
print(f"[*] {message['payload']}")
else:
print(message)

session = frida.get_usb_device().attach("eseBrida")   

with open("1.js") as f:
jsCode = f.read()

script = session.create_script(jsCode)
script.on("message",message)
script.load()

app = Flask(__name__)

@app.route('/encrypt', methods=['GET'])
def decrypt_class():
plaintext = request.args.get('plaintext')
print("1111",plaintext)
plaintext = plaintext.replace(" ","+")
print("222",plaintext)
res = script.exports.invokemethoden(plaintext)
print(res)
return res


@app.route('/decrypt', methods=['GET'])
def encrypt_class():
encrypttext = request.args.get('encrypttxt')
print("1111",encrypttext)
encrypttext = encrypttext.replace(" ","+")
print("222",encrypttext)
res = script.exports.invokemethodde(encrypttext)
return res
if __name__ == "__main__":
app.run(port=5001)

js代码

function fridamethod01(cleartext){
var result = null;
var key = "9876543210123456"
Java.perform(function(){
let AesEncryptionBase64 = Java.use("com.ese.http.encrypt.AesEncryptionBase64");
result = AesEncryptionBase64.encrypt(key,cleartext)
});
return result;
}

function fridamethod02(encrypted){
var result = null;
var key = "9876543210123456"
// public native String method02(String str);
Java.perform(function(){
let AesEncryptionBase64 = Java.use("com.ese.http.encrypt.AesEncryptionBase64");
result = AesEncryptionBase64.decrypt(key,encrypted)
});
return result;
}
rpc.exports = {
invokemethoden: fridamethod01,
invokemethodde: fridamethod02,
}

3. Yakit热加载脚本编写

Yakit的热加载脚本要在两个功能点处编写

  • MITM界面热加载脚本编写
  • Fuzzer界面热加载脚本编写

3.1. MlTM界面热加载脚本编写

3.1.1. 热加载脚本的原理

MITM界面提供了热加载脚本的模板,我们可以直接在Yakit的MIMT界面查看

Yakit针对流量加密APP的Frida rpc解决方案插图3

热加载脚本的原理

类似于Frida的Hook,既在整个请求的生命周期内(从发起请求到响应请求到将整个请求存入数据库)中的不同位置提供接口允许我们对请求进行修改。

在MITM界面我们只需要对流量进行解密展示,无需加密。

因此我们此时选择Hook的时机是在服务器响应后,存入数据库前对请求body和响应body进行解密展示。这样既不影响通信,也能做到将报文解密后的结果展示到MITM中。

但是这样操作带来了一个小问题,就是数据库文件中不会对密文进行存储,但是对测试是没有影响的。

根据上文的描述,在yakit将报文存入数据库前进行Hook,提供的接口和定义如下:


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

暴露内核内存并通过滥用COW机制实现一个注射器
403bypass问题简析
0day的产生 | 不懂代码的”代码审计”
某友NCCloud黑名单绕过分析
【论文速读】| AutoSafeCoder:通过静态分析和模糊测试保障LLM代码生成安全的多智能体框…
0day的产生 | 权限绕过的秘密

发布评论