首页 > 其他分享 >嘟嘟牛在线登陆加密分析-RPC调用

嘟嘟牛在线登陆加密分析-RPC调用

时间:2024-10-10 16:59:31浏览次数:7  
标签:嘟嘟 加密 RPC RequestUtil encryptedData key message result

加密参数
JADX反编译后搜索代码
user/login

基本可以确定就是从这里发起网络请求
跟进

addRequestMap
方法分析

这一看逻辑就清晰了
先添加一个时间戳,在对sign进行加密后在调用encodeDesMap进行加密
最后put到请求中
先分析

encodeDesMap


有KEY和IV,不是AES就是DES加密
encrypt64




DES加密后在Base64加密
那么data就是明文了,hook这个方法取到参数

let RequestUtil = Java.use("com.dodonew.online.http.RequestUtil");
        RequestUtil["encodeDesMap"].overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (data, desKey, desIV) {
            console.log("**********获取DES明文**********");
            console.log(`参数明文----> ${data}, desKey= ${desKey}, desIV= ${desIV}`);
            let result = this["encodeDesMap"](data, desKey, desIV);
            console.log(`参数加密结果----> ${result}`);
            return result;
        };


与抓包结果一样,这样明文就拿到了。
sign分析,回到刚刚那个传递sign参数的那个函数


字符串最后拼接了一个key后在进行md5加密,
hook一下md5这个函数


很明显,拼接除了sign参数其余全部在添加一个key=sdlkjsdljf0j2fsjk 的最终字符串在进行md5加密。
这样sign与参数加密都分析完了。

RPC

from fastapi import FastAPI, Query
from fastapi.responses import JSONResponse
import frida
import uvicorn

# 创建FastAPI实例
app = FastAPI()

# 定义固定的 key 和 iv
FIXED_KEY = "65102933"
FIXED_IV = "32028092"


# 定义一个GET请求的路由:/decrpyt
@app.get("/decrypt")
def decrypt(encryptedData: str = Query(..., description="The encrypted data to be decrypted")):
    # 处理掉加密数据中的空格和换行符,不然解密函数无法正常解密
    encryptedData = encryptedData.replace(' ', '').replace('\\n', '')

    # 定义处理frida消息的回调函数
    def on_message(message, data):
        if message['type'] == 'send':
            print('[* message]', message['payload'])
        elif message['type'] == 'error':
            print('[!] error:', message['stack'])

    jsCode = """
    rpc.exports = {
        getDecryptInfo: function(encryptedData, key, iv) {
            var result = '';
            Java.perform(function(){
                var RequestUtil = Java.use("com.dodonew.online.http.RequestUtil");
                var instance = RequestUtil.$new();
        
                try {
                    console.log("encryptedData: " + encryptedData);
                    var decodedResult = instance.decodeDesJson(encryptedData, key, iv);
                try {
                    result = JSON.parse(decodedResult);
                } catch (e) {
                    console.log("Result is not valid JSON:", decodedResult);
                    result = decodedResult;
                }
            } catch (e) {
                console.log("调用 decodeDesJson 失败: " + e);
            }
            });
            return result;
        }
    };
    """
    process = frida.get_usb_device().attach('嘟嘟牛在线')
    script = process.create_script(jsCode)
    script.on('message', on_message)
    script.load()

    # 调用 Frida 的 RPC 方法,将 API 请求者传递的 jsonData 和固定的 key, iv 发送到 Frida
    getDecryptData = script.exports.get_decrypt_info(encryptedData, FIXED_KEY, FIXED_IV)
    return JSONResponse({'result': getDecryptData})


# 主入口,运行FastAPI应用
if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=50000)

标签:嘟嘟,加密,RPC,RequestUtil,encryptedData,key,message,result
From: https://www.cnblogs.com/GaGaWord/p/18456733

相关文章

  • SpringBoot整合MD5加密完成注册和登录
    目录md5是什么?MD5的主要特点包括:MD5的应用场景市面上比较流行的加密方式引入相关依赖在src/main/resources/application.yml中添加配置加密工具类创建User实体类创建UserRepository接口创建UserService类创建UserController类测试APImd5是什么? ......
  • SHA256加密-前端 中 HMAC-SHA256的base64加密 和 md5加密
    1、 HMAC-SHA256的base64加密首先npminstallcrypto-js--save项目中使用12345import CryptoJSfrom 'crypto-js';  consthash=CryptoJS.HmacSHA256(zhuan, 'secret');//第一个参数为转换的字符串第二个参数有很多种可能看需要转换的格式consthas......
  • swagger加密码
    <!--swagger-api依赖开始--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependenc......
  • 【gRPC】2—gRPC与PB&桩代码生成与扩展
    gRPC与PB&桩代码生成与扩展⭐⭐⭐⭐⭐⭐Github主页......
  • 凯撒密码加密以及解密功能实现
    凯撒密码属于古典密码学范畴,本人最近开始学习密码学,今天尝试用python编写一个凯撒密码的加密与解密函数,我觉得过程很有趣,属于暴力美学。一、加密函数凯撒密码的加密过程符合人们的思维习惯,即获取加密密钥之后,对数据进行移动再拼接成一个字符串,核心代码为:chr((ord(i)+key-97/......
  • 【网络】初识https协议加密过程
    初识https协议加密过程为什么不用http而要使用https常见的加密方式对称加密非对称加密数据摘要&&数据指纹https的工作过程探究方案一:只使用对称加密方案二:只使用非对称加密方案三:双方都使用对称加密方案四:非对称加密+对称加密中间人攻击如何确认密钥是否被修改理解数......
  • RSA加密解密示例代码
    importjavax.crypto.Cipher;importjava.security.*;importjava.util.Base64;importjava.nio.charset.StandardCharsets;importjava.io.ByteArrayOutputStream;publicclassRSADemo{//加密时每块的最大字节数,对于1024位RSA密钥,通常为117字节privatestati......
  • 在线加密解密工具(MD5,aes,des,sha,ripemd160,hmac,rabbit,rc4)
    MD5加密AES加密/解密DES加密/解密SHA加密RIPEMD160哈希加密HMAC哈希加密Rabbit加密/解密RC4加密/解密......
  • 【php加密算法】加密算法举例
    原创php中文网课程PHP是一种广泛使用的服务器端脚本语言,用于开发动态网页和应用程序。在PHP中,加密算法是保护数据安全和隐私的重要组成部分。PHP提供了多种加密算法,用于加密和解密数据。本文将介绍一些常用的PHP加密算法。MD5算法:MD5(MessageDigestAlgorithm5)是一种广泛使......
  • 如何加密重要U盘?U盘怎么加密保护?
    在日常生活中,我们常常使用U盘来存储和传输重要文件。然而,U盘的便携性也意味着它容易丢失或被盗。为了保护U盘中的数据安全,我们需要对U盘进行加密。本文将为您介绍如何加密重要U盘,以及U盘加密保护的方法。BitLockerBitLocker是Windows系统提供的磁盘加密工具,可以用于加密保......