简单记录一下,如需看app逆向详细过程的,可以看我前面的几篇文章,挺详细的。
查壳发现没壳
反编译,搜索关键词,api_sign
一直追下去
追到这里发现没办法跳转了,gs函数加密:gsMethod.invoke(object, context, map, str, Boolean.valueOf(z));
发现旁边有一个初始化的地方,应该是so文件初始化的
最终发现是gsNav() 调用so层,生成加密
hook走起:
import sys
import frida
rdev = frida.get_usb_device()
session = rdev.attach('com.xxx.xxx')
scr = """
Java.perform(function() {
var KeyInfo = Java.use("com.vip.vcsp.KeyInfo");
KeyInfo["gsNav"].implementation = function (context, map, str, z) {
console.log('gsNav is called' + ', ' + 'context: ' + context + ', ' + 'map: ' + map.entrySet().toArray() + ', ' + 'str: ' + str + ', ' + 'z: ' + z);
var ret = this.gsNav(context, map, str, z);
console.log('gsNav ret value is ' + ret);
return ret;
};
})
"""
script = session.create_script(scr)
def on_message(message, data):
print('msg: ' + message)
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
script.on("message", on_message)
script.load()
sys.stdin.read()
经过抓包对比,hook和抓包的是一样的