加密参数

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调用的更多相关文章

  1. 37.前台js登陆加密分析

    开篇 由于现在的登陆接口如果明文传输的话,容易被暴力破解,越来越多的网站选择了前台js加密的方式,像这样: 或者这样: 枯了,对渗透造成一定的影响 本篇文章将系统的讲述使用Python对前台js加密爆 ...

  2. RPC调用框架比较分析--转载

    原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC: RPC(Remote Pr ...

  3. Openstack Nova 源码分析 — RPC 远程调用过程

    目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacompute ...

  4. Dubbo 源码分析 - 服务调用过程

    注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...

  5. RPC调用与GC垃圾回收

    RPC调用 多个服务协同完成一次业务时,由于业务约束(如红包不符合使用条件.账户余额不足等).系统故障(如网络或系统超时或中断.数据库约束不满足等),都可能造成服务处理过程在任何一步无法继续,使数据处 ...

  6. pomelo RPC调用时新增字段缺失

    接触pomelo开发一个月,正式开始参与项目开发有10天,遇到很多细节的坑,今天讲讲标题:后端服务器节点之间的rpc调用过程中,返回的数据中新增字段缺失问题. 先讲结果:原因是该rpc调用已经采用了p ...

  7. alluxio源码解析-rpc调用概述(1)

    alluxio中几种角色以及角色之间的rpc调用: 作为分布式架构的文件缓存系统,rpc调用必不可少 client作为客户端 master提供thrift rpc的服务,管理以下信息: block信息 ...

  8. Dubbo系列(三)dubbo的核心技术--RPC调用

    dubbo的核心技术--RPC调用:分为俩部分RPC协议Protocol和方法调用Invoke: 一.RPC协议Protocol(Remote Procedure Call)远程过程调用协议 1.我们 ...

  9. Solon rpc 之 SocketD 协议 - RPC调用模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  10. 闲话RPC调用

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 自SOA架构理念提出以来,应用程序间如何以最低耦合度通信的问题便呈现在所有架构师面前. 互联网系统的复杂度让我们不 ...

随机推荐

  1. 【Uni-App】其他配置笔记

    manifest.json manifest.json 文件是应用的配置文件,用于指定应用的名称.图标.权限等.HBuilderX 创建的工程此文件在根目录,CLI 创建的工程此文件在 src 目录. ...

  2. JavaWeb入门到实战学习笔记

    了解,讲得并不是很好,很展开. 概念 动态web Web服务器 web服务器这节也是蜻蜓点水,引出tomcat而已 ASP(C#语言,微软) JSP PHP Java bootstrapclasslo ...

  3. NVIDIA的人形机器人的基础模型Project GR00T已在实体机器人上进行展示

    原文地址: https://blogs.nvidia.com/blog/isaac-generative-ai-manufacturing-logistics/ 项目GR00T为人型机器人开发谢幕 在 ...

  4. GPG公钥的删除与注销

    参考: 如何在 Gitee 上使用 GPG 我们通过在本地主机保存GPG私钥,然后在Gitee或Github上保存GPG公钥的方式来实现对git的commit和tag操作的签名. 当GPG公私秘钥对作 ...

  5. python 中 ctypes 的使用尝试

    最近在看Python的性能优化方面的文章,突然想起ctypes这个模块,对于这个模块一直不是很理解,不过再次看完相关资料有了些新的观点. ctypes 这个模块个人观点就是提供一个Python类型与C ...

  6. 【转载】 NumPy之:数据类型对象dtype

    原文地址: https://www.cnblogs.com/flydean/p/14720858.html ============================================== ...

  7. Ubuntu系统anaconda报错version `GLIBCXX_3.4.30' not found

    参考文章: https://blog.csdn.net/zhu_charles/article/details/75914060 =================================== ...

  8. win10开启窗口左右分屏方法

    首先进入导航栏(等同于按下win徽标): 之后点击电源键上的"设置": 进入"系统" 左边一栏里点击"多任务处理" 打开"贴靠窗囗 ...

  9. (七)Redis 持久化 AOF、RDB

    Redis 一旦服务器宕机,内存中的数据将全部丢失,从后端数据库恢复这些数据,对数据库压力很大,且性能肯定比不上从 Redis 中读取,会拖慢应用程序.所以,对 Redis 来说,实现数据的 持久化 ...

  10. nvic stm32g0

    STM32G0 32个可屏蔽中断通道 4个可编程优先等级(抢占等级:0~3) 低延时异常和中断处理 电源管理控制