目录
一:抓包
app名字: 6J2J5aaI5aaIdjEuNy4w
利用fiddler抓包,可以看出加密参数有sign,还有一个明显的时间戳
二:脱壳
利用jadx打开,发现里面的东西很少,很有可能已经被加固,再利用查壳工具查看
然后我们利用Xposed里面的FDex2进行脱壳,根据提示找到dex文件,导入到 /sdcard/ 下面,再导出到电脑上;
三:jadx分析
打开jadx里面的 add files,这个可以把多个dex合并打开
点击搜索,稍等加载,搜索sign,点击进入
由图可定位到sign的生成逻辑:i0.m("YqH3DGpu" + valueOf);
sign 生成方法里面的参数是有一个固定字符串加一个时间戳
再点击m 方法,里面调用的是d(str,""),再次点击进入
由下图可以看出一些md5的影子,而sign的长度同样是32位,可以hook证明是否调用的是纯粹的md5算法
四:hook代码
import frida, sys
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
test = '''
Java.perform(function (){
console.log("hook start ")
var r = Java.use('h.h.a.r');
var i0 = Java.use('w.a.r.i0');
i0.d.overload('java.lang.String', 'java.lang.String').implementation = function (str1,str2){
console.log("str1: "+str1);
console.log("str2: "+str2);
var ret = this.d(str1,str2);
console.log("ret: "+ret);
return ret;
}
})
'''
process = frida.get_usb_device(-1).attach('xxx.com')
script = process.create_script(test)
script.on('message', on_message)
script.load()
sys.stdin.read()
同理,可以拿 YqH3DGpu + 时间戳 到md5加密网站上做对比,发现与sign一致,所以可以直接用python md5直接还原