import frida, time, subprocess
ADB="/opt/android-sdk/platform-tools/adb"
JS=r"""
function rd(p){try{if(p.isNull())return null;var l=p.add(8).readS32();if(l<0||l>200)return null;return p.add(0xc).readUtf16String(l);}catch(e){return "<node>";}}
function cls(p){try{var k=p.readPointer();var gn=Module.findExportByName("libil2cpp.so","il2cpp_class_get_name");if(gn){return new NativeFunction(gn,'pointer',['pointer'])(k).readUtf8String();}}catch(e){}return "?";}
function dumpL(L){try{if(L.isNull())return "NULL";var n=L.add(0xc).readS32();var it=L.add(8).readPointer();var o=[];for(var i=0;i<n&&i<50;i++){var e=it.add(0x10+i*4).readPointer();var v=e.isNull()?"null":(rd(e)||("<"+cls(e)+">"));o.push(i+":"+v);}return "n="+n+" ["+o.join(",")+"]";}catch(e){return "err "+e;}}
function ins(){var m=Process.findModuleByName("libil2cpp.so");if(!m)return false;var b=m.base;
 function T(f){try{f();}catch(e){}}
 T(function(){Interceptor.attach(b.add(0xd3c44a),{onEnter:function(a){send({info:"OnResponse err='"+rd(a[1])+"' recv="+dumpL(a[2])});}});});
 T(function(){Interceptor.attach(b.add(0xd34fb9),{onEnter:function(a){send({info:"DecodeResp recv="+dumpL(a[1])});},onLeave:function(){send({info:"DecodeResp OK"});}});});
 send({info:"__ready"});return true;}
if(!ins()){var iv=setInterval(function(){if(ins())clearInterval(iv);},120);}
"""
dev=frida.get_usb_device(timeout=10)
pid=int(subprocess.run([ADB,"shell","pidof","se.foglo.svt"],capture_output=True,text=True).stdout.split()[0])
s=dev.attach(pid); sc=s.create_script(JS); t0=time.time()
sc.on("message",lambda mm,d: print("[%5.1f] %s"%(time.time()-t0,mm.get("payload",mm)),flush=True))
sc.load(); time.sleep(1)
subprocess.run([ADB,"shell","input","tap","690","730"]); time.sleep(4)
subprocess.run([ADB,"shell","input","tap","1350","960"]); time.sleep(12)
