Skip to content Skip to footer

转转 APP zzreqsign 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析

版本 11.5.5

现在AI真的有点太猛了,把so文件直接全部喂给他,直接还原算法。首先思路是直接搜关键字是可以搜到的,但是怎么向上追。可以通过打印堆栈。

SignUtil.getSign.overload('java.util.Map').implementation = function (map) {

console.log('===================SignUtil.getSign.overload(\'java.util.Map\').implementation==============================')

var treeMap = Java.use('java.util.LinkedHashMap')

console.log('map:', Java.cast(map, treeMap))

var result = this.getSign(map)

console.log('result:', result)

return result

}

SignUtil.getDeviceId.implementation = function () {

console.log('===================SignUtil.getDeviceId.implementation==============================')

var result = this.getDeviceId()

console.log('result:', result)

return result

}

算法demo 全是ai写的。删除了部分代码防止被线下单杀。

import hashlib

def get_sign(input_str, device_id):

# 检查输入参数

if not input_str or not device_id:

return None

# 模拟应用签名验证(此处假设验证通过)

app_sign_sha1 = get_app_sign_sha1()

if app_sign_sha1 != "expected_app_sign":

return None

# 将输入字符串和设备ID转换为UTF-8字节数组

input_bytes = input_str.encode('utf-8')

device_id_bytes = device_id.encode('utf-8')

input_len = len(input_bytes)

device_len = len(device_id_bytes)

# 初始化结果数组,长度为输入字节数组的长度

result_bytes = bytearray(input_len)

# 按照C++逻辑进行异或操作

# 拼接固定字符串并计算MD5

md5_hash = hashlib.md5(result_bytes).hexdigest()

return md5_hash

def get_app_sign_sha1():

# 模拟正确的应用签名

return "expected_app_sign"

# 示例用法

input_str = "a%3Dbc%3Ddkeyword%3D%E5%8C%85%E8%87%80%E8%A3%99"

device_id = ""

sign = get_sign(input_str, device_id)

print("Sign:", sign)

结果

总结

1.出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来。

Copyright © 2088 我的世界杯_瑞奇马丁世界杯主题曲 - msdc8.com All Rights Reserved.
友情链接