1. 基础知识
1.1. 案例APP
我们使用网上找到一个登录加密的app,作为我们的案例。该app功能非常简单。
输入用户名密码后点击登录,后端数据报文如下:
参数和响应报文均使用AES进行加密。
1.2. Yakit热加载脚本输出log
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界面查看
热加载脚本的原理
类似于Frida的Hook,既在整个请求的生命周期内(从发起请求到响应请求到将整个请求存入数据库)中的不同位置提供接口允许我们对请求进行修改。
在MITM界面我们只需要对流量进行解密展示,无需加密。
因此我们此时选择Hook的时机是在服务器响应后,存入数据库前对请求body和响应body进行解密展示。这样既不影响通信,也能做到将报文解密后的结果展示到MITM中。
但是这样操作带来了一个小问题,就是数据库文件中不会对密文进行存储,但是对测试是没有影响的。
根据上文的描述,在yakit将报文存入数据库前进行Hook,提供的接口和定义如下:
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)