注:本文章仅供学习使用,请勿用做其他商业用途,如有侵权,请联系本人。
看参数,使用了bsae64编码 。反编译看下,这里我使用是jadx-gui。搜索参数"d="。
进入方法。
进入setEncrypt方法。
看到明显RC4key,Base64,应该是RC4加密后,base64编码,最后URL编码。
使用xp,frida hook的通杀,没有RC4这个,不行。手动写代码了。
import frida import sys jscode = """ Java.perform(function () { var SwitchConfig = Java.use('XXX.EncryptUtil'); SwitchConfig.setEncrypt.overload('java.lang.String','int').implementation = function(a,b){ //showStacks() send(arguments[0]) send(arguments[1]) var skey = this.setEncrypt(a,b) send(skey) return skey } }) Java.perform(function () { var SwitchConfig = Java.use('XXX.Utils.EncryptUtil'); SwitchConfig.RC4Base.overload('[B','java.lang.String').implementation = function(a,b){ //showStacks() send(arguments[0]) send(arguments[1]) var skey = this.RC4Base(a,b) send(skey) return skey } }) """ def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) process = frida.get_remote_device().attach('XXX') script = process.create_script(jscode) script.on('message', on_message) script.load() sys.stdin.read()
设备要装好frida,手机frida-server。
参数,key,结果都hook到了。