实验室最近想要分析下oppo软件商店的协议写爬虫,记录下分析sign加密字段的流程,比较简单。
应用商店的搜索、详情页以及类别请求用的sign的构成与加密方式都相同:
反编译搜索关键字段:
可以看到最后的加密方法为HashUtil.md5Hex,那么参数肯定是加密前的明文了,对md5Hex进行hook:
# -*- coding: utf-8 -*-
import frida, sys
def on_message(message, data):if message['type'] == 'send':print("[*] {0}".format(message['payload']))else:print(message)
jscode = """Java.perform(function(){var temp = Java.use('com.nearme.common.util.HashUtil');temp.md5Hex.implementation = function(arg1) { send("Hook start....");var result = this.md5Hex(arg1);send("***arg1***:" + arg1);send("***result***" + result);return result;};
});
"""
process = frida.get_usb_device().attach('com.oppo.market')
script = process.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()
得到加密前的明文:
Sign字段构成:标黄部分为固定值,绿色部分为GET请求Header中ocs字段,为设备信息不同设备不一样,蓝色部分为Header中t字段,固定部分。红色部分为Header中id字段,设备IMEI号码。紫色部分为查询的url,keyword为搜索字。之后蓝色字段为前面ocs字段到url的string的length()值。之后为固定字段。
加密方法:先将上述字符串md5加密,再转换为十六进制。加密方法如下:
hook结果: