import frida, time, subprocess
ADB="/opt/android-sdk/platform-tools/adb"
SLOTS=[0x1e41430,0x1e4b974,0x1e44264,0x1e4b970,0x1e5e598,0x1e5a8ac,0x1e5e5c0,0x1e44210,0x1e576c4,0x1e5e59c,0x1e457d4,0x1e57450,0x1e4417c]
JS=r"""
var SLOTS=%s;
function il2str(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 null;}}
function ins(){var m=Process.findModuleByName("libil2cpp.so");if(!m)return false;var b=m.base;
 var gn=null;try{gn=new NativeFunction(Module.findExportByName("libil2cpp.so","il2cpp_class_get_name"),'pointer',['pointer']);}catch(e){}
 Interceptor.attach(b.add(0xd34fb9),{onEnter:function(){
   try{ var out=[]; for(var i=0;i<SLOTS.length;i++){ var p=b.add(SLOTS[i]).readPointer(); if(p.isNull()){out.push("null");continue;} var s=il2str(p); if(s!=null){out.push("'"+s+"'");continue;} var nm="?"; if(gn){try{nm=gn(p).readUtf8String();}catch(e){}} out.push("<T:"+nm+">"); } send({info:"SLOTS: "+out.join(" | ")}); }catch(e){send({info:"err "+e});}
 }});
 send({info:"__ready"});return true;}
if(!ins()){var iv=setInterval(function(){if(ins())clearInterval(iv);},120);}
""" % SLOTS
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(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(8)
