某天气app逆向
本篇文章仅用作学习使用,不可用于其他违法操作,如要搬运请声明出处
目标 :
- 5b2p5LqR5aSp5rCULXY3NDcw
逆向 device接口请求头中的 x-signature

开始
1. jadx反编译, 搜索 x-signature, 找到生成位置

2. 进入加密函数, 找到 加密入口, hook获取内容

进入加密函数

编写hook脚本, (有frida检测需要绕过, 不知如何绕过可以评论交流)

其中 base64加密来源于 下方的函数, 此函数内部调用base64加密, 且为非填充模式

hook结果为

通过和请求中的值多次对比,发现, base64的加密字符串不是标准的,
而是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_,
def custom_b64encode(message, custom_alphabet, padding=0):
# 标准的 base64 字母表
standard_alphabet = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
# 创建一个翻译表
translation_table = bytes.maketrans(standard_alphabet, custom_alphabet)
# 使用标准的 base64 编码
encoded_message = base64.b64encode(message)
# 替换字母表中的字符
custom_encoded_message = encoded_message.translate(translation_table)
# 是否填充
if padding:
custom_encoded_message=custom_encoded_message.rstrip(b'=')
return custom_encoded_message.decode('utf-8')
custom_alphabet = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
signature_b64 = custom_b64encode(signature, custom_alphabet,1)
3. 使用python编写加密函数


注意
其实, 获取天气数据的接口, 不验证此参数, 纯练习, 嘻嘻☺️
- md55为
{}的md5加密, {}是data值, data为{}不变, 此值不变 - uuid可直接python中uuid生成
str(uuid.uuid4()) - 注意时间戳的长度(是10 还是 13)
- 注意uuid不取第一个字符
总结
此逆向并不难, 找加密位置不难, 没有native层加密, 加密算法也不难
但 需要细致, 不要想当然
1178

被折叠的 条评论
为什么被折叠?



