import frida, time, subprocess
ADB="/opt/android-sdk/platform-tools/adb"
JS=r"""
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){}
 var gns=null; try{gns=new NativeFunction(Module.findExportByName("libil2cpp.so","il2cpp_class_get_namespace"),'pointer',['pointer']);}catch(e){}
 Interceptor.attach(b.add(0xe1890d),{onEnter:function(){
   try{
     var slot=b.add(0x1e442d0);           // VaultThief [ebx+0x4d754]
     var klass=slot.readPointer();
     var nm = gn? gn(klass).readUtf8String() : "?";
     var ns = gns? gns(klass).readUtf8String() : "?";
     send("VaultThief mask-interface type = "+ns+"."+nm+" (klass="+klass+")");
   }catch(e){send("err "+e);}
 }});
 send("__ready");return true;}
if(!ins()){var iv=setInterval(function(){if(ins())clearInterval(iv);},120);}
"""
subprocess.run([ADB,"shell","am","force-stop","se.foglo.svt"])
dev=frida.get_usb_device(timeout=10); pid=dev.spawn(["se.foglo.svt"])
s=dev.attach(pid); sc=s.create_script(JS)
sc.on("message",lambda m,d: print(m.get("payload",m),flush=True))
sc.load(); dev.resume(pid); time.sleep(30)
