Android逆向(Python和JS通信)

Python

python 复制代码
import frida
import sys
import json
from datetime import datetime

def on_message(message, data):
    if message['type'] == 'send':
        try:
            payload = message['payload']
            timestamp = datetime.fromtimestamp(payload['timestamp']/1000).strftime('%Y-%m-%d %H:%M:%S')
            
            print("\n" + "="*50)
            print(f"[{timestamp}] 收到消息:")
                
            if payload['type'] == 'getLocalId_result':
                print(f"函数: getLocalId 结果")
                print(f"输入参数: {payload['input']}")
                print(f"返回结果: {payload['result']}")
                
            elif payload['type'] == 'getMsgUiDataContent':
                print(f"函数: getMsgUiDataContent")
                msg = payload['message']
                print(f"发送者: {msg.get('nickname', '')}")
                print(f"内容类型: {msg.get('content_type', '')}")
                content = msg.get('content', '')
                if content:
                    try:
                        content_json = json.loads(content)
                        if 'link' in content_json:
                            print(f"链接: {content_json['link']}")
                        else:
                            print(f"内容: {content}")
                    except:
                        print(f"内容: {content}")
                else:
                    link = msg.get('link', '')
                    if link:
                        print(f"链接: {link}")
                    else:
                        print(f"内容: {content}")
                
                
            elif payload['type'] == 'error':
                print(f"[!] 错误类型: {payload['error']}")
                print(f"错误详情: {payload['error_detail']}")
                if 'raw_message' in payload:
                    print(f"原始消息: {payload['raw_message']}")
                    
        except Exception as e:
            print(f"[!] 处理消息时出错: {str(e)}")
            print(f"原始消息: {message}")
            
    elif message['type'] == 'error':
        print(f"[!] Frida错误: {message['stack']}")

try:
    # 连接到目标进程
    device = frida.get_usb_device()
    pid = device.spawn(["com.xingin.xhs"])
    session = device.attach(pid)

    # 加载JS脚本,使用UTF-8编码打开文件
    with open(r"C:\Users\xie__\Desktop\小红书测试.js", encoding='utf-8') as f:
        script = session.create_script(f.read())
    script.on('message', on_message)
    script.load()

    device.resume(pid)
    print("[*] Hook已加载,等待消息...")
    sys.stdin.read()
    
except Exception as e:
    print(f"[!] 发生错误: {str(e)}")

JS

javascript 复制代码
Java.perform(function() {
    // Hook MsgConvertUtils
    try {
        var MsgConvertUtils = Java.use('com.xingin.chatbase.bean.convert.MsgConvertUtils');
        
        MsgConvertUtils.getLocalId.overload('java.lang.String').implementation = function(msgContent) {
            console.log('\n[+] MsgConvertUtils.getLocalId 被调用');
            
            // 发送数据到Python
            send({
                type: "getLocalId",
                input: msgContent,
                timestamp: new Date().getTime()
            });
            
            // 调用原始方法
            var result = this.getLocalId(msgContent);
            
            // 发送结果到Python
            send({
                type: "getLocalId_result",
                input: msgContent,
                result: result,
                timestamp: new Date().getTime()
            });
            
            return result;
        };
        
        // Hook getMsgUiDataContent 方法
        MsgConvertUtils.getMsgUiDataContent.overload('java.lang.String').implementation = function(msgContent) {         
            try {
                var msgJson = JSON.parse(msgContent);
                
                // 发送完整消息到Python
                send({
                    type: "getMsgUiDataContent",
                    message: msgJson,
                    timestamp: new Date().getTime()
                });
                
            } catch(e) {
                send({
                    type: "error",
                    error: "解析消息内容失败",
                    raw_message: msgContent,
                    error_detail: String(e),
                    timestamp: new Date().getTime()
                });
            }
            
            // 调用原始方法并返回结果
            var result = this.getMsgUiDataContent(msgContent);
            return result;
        };
 
    } catch(e) {
        send({
            type: "error",
            error: "Hook MsgConvertUtils 失败",
            error_detail: String(e),
            timestamp: new Date().getTime()
        });
    }
});
相关推荐
砚底藏山河5 小时前
python量化入门:多周期数据对齐统一时间轴
java·数据库·python·金融·maven
小宋10216 小时前
Agent轨迹级评测实战:工具选择、预算超限与回归门禁
android·网络·人工智能·回归
毕业设计7036 小时前
(免费领源码)django空气净化器销售系统09218- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·scrapy·mysql·pycharm·django·flask·pandas
w2sfot7 小时前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
小小张说故事7 小时前
Python 闭包到底捕获了啥?一个计数器例子讲透,别再背定义了
python
深蓝AI7 小时前
AI Agent 点了发布却超时:一条回执丢失,为什么能造成两篇文章?
人工智能·python
怪奇云呼军7 小时前
教育试听预约后没到课,闪电智能 Voice Agent 如何做分层回访?
人工智能·python·算法·云计算·音视频
weixin199701080167 小时前
《淘宝TOP API:落地方案、接口边界与业务踩坑 —— 聚石塔内外价差 10 倍的真相》(附 Python 源码)
开发语言·python
梦想的颜色7 小时前
【编程实战】AI 时代 APP 开发全栈硬核指南:技术选型 + AI 架构 + 模型落地全维度决策
python·flutter·react native·react.js·ai·桌面应用·milvus
Madison-No78 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman