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;
 function T(f){try{f();}catch(e){send({warn:""+e});}}
 T(function(){Interceptor.attach(b.add(0x244e42),{onLeave:function(rv){rv.replace(ptr(2));}});});
 T(function(){Interceptor.replace(b.add(0xe9ea40),new NativeCallback(function(s){},"void",["pointer"]));});
 var isDism=new NativeFunction(b.add(0xdc9c3d),'int',['pointer']);
 var isInv=new NativeFunction(b.add(0xdd2257),'int',['pointer']);
 T(function(){Interceptor.attach(b.add(0xfc9bb9),{onEnter:function(a){
   try{ var dir=a[0]; var scr=dir.add(0x38).readPointer();
     var d=scr.isNull()?-1:isDism(scr); var i=scr.isNull()?-1:isInv(scr);
     var f72=dir.add(0x72).readU8();
     send({info:"RequestChangeFeState: dir72="+f72+" scr.isDismissing="+d+" scr.isInvoking="+i});
   }catch(e){send({warn:"fe "+e});}
 }});});
 T(function(){Interceptor.attach(b.add(0xfcc12a),{onEnter:function(){send({info:"CHAIN ChangeState"});}});});
 T(function(){Interceptor.attach(b.add(0xd31a4f),{onEnter:function(){send({info:"CHAIN Matchmaking.Initiate"});}});});
 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 m,d: print("[%5.1f] %s"%(time.time()-t0,m.get("payload",m)),flush=True))
sc.load(); time.sleep(1.5)
print("=== tap SNIPER ===",flush=True)
subprocess.run([ADB,"shell","input","tap","690","730"]); time.sleep(6)
print("=== tap SNIPER again ===",flush=True)
subprocess.run([ADB,"shell","input","tap","690","730"]); time.sleep(8)
