• Android逆向—苏宁金融app的data参数分析


    一、用工具抓包

    二、分析apk是否加壳

    没有加壳,直接用jadx打开分析
    查找data=参数

    文件:su_ning_jin_rong.js

    Java.perform(function () {
        var encrypt1 = Java.use("org.bouncycastle.crypto.engines.SM2Engine");
        console.log(encrypt1);
        encrypt1.encrypt.overload('[B', 'int', 'int').implementation = function (args1,args2,args3) {
            console.log("args1-1", args1,args2,args3);
            //JS输出内容为[object Object]  转换成数组,然后转换成字节
            console.log(JSON.stringify(args1),args2,args3)
            var args = this.encrypt(args1,args2,args3);
            console.log("args-1", args);
            return args
        }
    });
    

    三、用Frida HOOK 登录入参数

    # -*- coding: utf-8 -*-
    
    import logging
    import frida
    import sys
    logging.basicConfig(level=logging.DEBUG)
    
    def on_message(message, data):
        print(message)
    
    with open('su_ning_jin_rong.js', 'r', encoding='utf-8') as f:
        sta = ''.join(f.readlines())
    
    rdev = frida.get_remote_device()
    processes = rdev.enumerate_processes()  # 安卓手机中的所有进程
    print(processes)
    # android.content.Intent android.content.Context android.view.ViewGroup  java.lang.String, java.util.List  [Ljava.lang.String;(String[]), javax.net.ssl.SSLSession  SSLSession
    session = rdev.attach("com.suning.mobile.epa")
    print(session)
    script = session.create_script(sta)
    
    script.on("message", on_message)
    script.load()
    sys.stdin.read()
    

    四、用Frida HOOK SM2 公钥

    Java.perform(function () {
        var encrypt1 = Java.use("k.a.a.a.a.a");
        console.log(encrypt1);
        encrypt1.b.overload('java.lang.String', '[B', '[B').implementation = function (args1,args2,args3) {
            console.log("args1-1", args1, args2, args3);
            //JS输出内容为[object Object]  转换成数组,然后转换成字节
            // console.log(JSON.stringify(args1),args2,args3)
            console.log(args1)
            console.log(JSON.stringify(args2))
            console.log(JSON.stringify(args3))
    
            var args = this.b(args1,args2,args3);
            console.log("args-1:", args);
            return args
        }
    });
    
    
    import logging
    import frida
    import sys
    
    logging.basicConfig(level=logging.DEBUG)
    
    
    def on_message(message, data):
        print(message)
    
    
    with open('su_ning_jin_rong_key.js', 'r', encoding='utf-8') as f:
        sta = ''.join(f.readlines())
    
    rdev = frida.get_remote_device()
    processes = rdev.enumerate_processes()  # 安卓手机中的所有进程
    print(processes)
    # android.content.Intent android.content.Context android.view.ViewGroup  java.lang.String, java.util.List  [Ljava.lang.String;(String[]), javax.net.ssl.SSLSession  SSLSession
    session = rdev.attach("com.suning.mobile.epa")
    print(session)
    script = session.create_script(sta)
    
    script.on("message", on_message)
    script.load()
    sys.stdin.read()
    
    

    五、安装gmssl

    pip install gmssl

    import binascii
    import json
    from gmssl import sm2
    
    public_key = '47882F6B93CE57EA6903DEE9387E1BDC6D42763EFF2D93167FE92CD1D0A9C31A3D20BC796A0D7C60003BDDF3DF2C841F4E78C36A25720DFD44E9991490770AF4'
    sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key='')
    data = json.dumps({"mobileNo": "13899999999", "sceneId": "FTIS-M-001"}, separators=(',', ':')).encode()
    
    enc_data = sm2_crypt.encrypt(data)
    result = binascii.b2a_hex(enc_data).upper().decode()
    print(result)
    
    a=[123,34,109,111,98,105,108,101,78,111,34,58,34,49,51,57,49,56,50,51,56,51,52,52,34,44,34,115,99,101,110,101,73,100,34,58,34,70,84,73,83,45,77,45,48,48,49,34,125]
    print(bytes(a))
    

    六、获取公钥public_key

    JS文件:su_ning_jin_rong_key.js

    Java.perform(function () {
        var encrypt1 = Java.use("k.a.a.a.a.a");
        console.log(encrypt1);
        encrypt1.b.overload('java.lang.String', '[B', '[B').implementation = function (args1,args2,args3) {
            console.log("args1-1", args1, args2, args3);
            //JS输出内容为[object Object]  转换成数组,然后转换成字节
            // console.log(JSON.stringify(args1),args2,args3)
            console.log(args1)
            console.log(JSON.stringify(args2))
            console.log(JSON.stringify(args3))
    
            var args = this.b(args1,args2,args3);
            console.log("args-1:", args);
            return args
        }
    });
    
    
    

    七、HOOK 公钥public_key

    import logging
    import frida
    import sys
    
    logging.basicConfig(level=logging.DEBUG)
    
    
    def on_message(message, data):
        print(message)
    
    
    with open('su_ning_jin_rong_key.js', 'r', encoding='utf-8') as f:
        sta = ''.join(f.readlines())
    
    rdev = frida.get_remote_device()
    processes = rdev.enumerate_processes()  # 安卓手机中的所有进程
    print(processes)
    # android.content.Intent android.content.Context android.view.ViewGroup  java.lang.String, java.util.List  [Ljava.lang.String;(String[]), javax.net.ssl.SSLSession  SSLSession
    session = rdev.attach("com.suning.mobile.epa")
    print(session)
    script = session.create_script(sta)
    
    script.on("message", on_message)
    script.load()
    sys.stdin.read()
    
    

    八、加密

  • 相关阅读:
    vim命令大全
    docer中运行crontab
    基于预加载的热区域数据的简单设计
    解析Health端点数据获取异常数据
    微服务链路调用耗时示例图
    Spring Cloud health节点通过注册中心扫描状态的简单实现
    转载:Service Mesh:重塑微服务市场--敖小剑
    Springboot统一参数验证方式
    Spirng boot 启动的时候进行监控检查不通过停止服务与自定义健康监控节点
    准备 Python3 和 Python 虚拟环境
  • 原文地址:https://www.cnblogs.com/gqv2009/p/13651587.html
Copyright © 2020-2023  润新知