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

加密参数
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调用的更多相关文章
- 37.前台js登陆加密分析
开篇 由于现在的登陆接口如果明文传输的话,容易被暴力破解,越来越多的网站选择了前台js加密的方式,像这样: 或者这样: 枯了,对渗透造成一定的影响 本篇文章将系统的讲述使用Python对前台js加密爆 ...
- RPC调用框架比较分析--转载
原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC: RPC(Remote Pr ...
- Openstack Nova 源码分析 — RPC 远程调用过程
目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacompute ...
- Dubbo 源码分析 - 服务调用过程
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...
- RPC调用与GC垃圾回收
RPC调用 多个服务协同完成一次业务时,由于业务约束(如红包不符合使用条件.账户余额不足等).系统故障(如网络或系统超时或中断.数据库约束不满足等),都可能造成服务处理过程在任何一步无法继续,使数据处 ...
- pomelo RPC调用时新增字段缺失
接触pomelo开发一个月,正式开始参与项目开发有10天,遇到很多细节的坑,今天讲讲标题:后端服务器节点之间的rpc调用过程中,返回的数据中新增字段缺失问题. 先讲结果:原因是该rpc调用已经采用了p ...
- alluxio源码解析-rpc调用概述(1)
alluxio中几种角色以及角色之间的rpc调用: 作为分布式架构的文件缓存系统,rpc调用必不可少 client作为客户端 master提供thrift rpc的服务,管理以下信息: block信息 ...
- Dubbo系列(三)dubbo的核心技术--RPC调用
dubbo的核心技术--RPC调用:分为俩部分RPC协议Protocol和方法调用Invoke: 一.RPC协议Protocol(Remote Procedure Call)远程过程调用协议 1.我们 ...
- Solon rpc 之 SocketD 协议 - RPC调用模式
Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...
- 闲话RPC调用
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 自SOA架构理念提出以来,应用程序间如何以最低耦合度通信的问题便呈现在所有架构师面前. 互联网系统的复杂度让我们不 ...
随机推荐
- 初看vue3源码
因为工作的原因又回到了vue的领域,需要加深对vue和vue生态的了解 也许平时比较多人手机看别人解析怎么看vue源码的,自己动手看vue源码的还是比较少,这次我想自己动手看看 首先 吧代码获取到本地 ...
- 【Lodop】01 Lodop手册阅读上手
官方网站: http://www.c-lodop.com/index.html 版本:6.2.2.6 一.概述 Lodop是一款用于WEB打印开发的专业WEB打印控件 控件发布包有3个系统文件组成,主 ...
- pytorch-a2c-ppo-acktr-gail 算法代码
地址: https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail
- python版本的“共轭梯度法”算法代码
在看代码的过程中遇到了共轭梯度法这个概念,对这个算法的数学解释看过几遍,推导看过了,感觉懂了,然后过上一些日子就又忘记了,然后又看了一遍推导,然后过了一些日子也就又忘记了,最后想想这个算法的数学解释就 ...
- 在python中numpy.sum的性能真的好吗
首先我们应该知道np.sum是用C语言写的矢量计算,应用场景为规模较大的numpy数组求和.本文要说的就是numpy.sum是不是对规模较小的numpy数组求和也同样会有不错的性能? 代码: impo ...
- php 常用文件操作
判断文件或文件夹是否存在 file_exists() 打开文件 fopen() 关闭文件 fclose() 判断是否可写入 is_writable() 写入数据 fwrite() 测试文件指针是否到了 ...
- python调用第三方java包实例
先看结果: 对于python与java的互调,我一开始是用的py4j,但是后来发现在使用方法的时候,不知道如何在python中导入jar包,然后网上的资料也比较少.后来想不出来办法,又看到有Jpype ...
- NuminaMath 是如何荣膺首届 AIMO 进步奖的?
今年,Numina 和 Hugging Face 合作角逐 AI 数学奥林匹克 (AI Math Olympiad,AIMO) 的首届进步奖.此次比赛旨在对开放 LLM 进行微调,以使其能解决高中难度 ...
- 并查集基础 &打击罪犯
并查集基础 真的很基础 题目描述:Description 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个 ...
- 告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧 本文介绍了五种加速在国内访问和下载 GitHub 的方法,包括:使用 Gitee 平台加速克隆代码.修改 hosts 文件.使用油猴 ...