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()
八、加密
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~