package Ġme . ts ih en . q tools . script Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġb sh . Eval Error Ċ import Ġdal vik . system . Path ClassLoader Ċ import Ġme . ts ih en . config . Config Manager . Companion . config Ċ import Ġme . ts ih en . q tools . Main Hook Ċ import Ġme . ts ih en . util . default DirPath Ċ import Ġme . ts ih en . util . get A pk Path Ċ import Ġme . ts ih en . util . get QQ Application NonNull Ċ import Ġjava . io . File Ċ Ċ object ĠScript Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġscript Map Ġ= Ġmutable Map Of < File , ĠScript >() ĊĠĠĠ Ġval Ġscripts ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġscript Map . values ĊĠĠĠ Ġprivate Ġval Ġscript Thread Ġ= Ġobject Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġm H : ĠHandler ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . run () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . prepare () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm H Ġ= ĠHandler ( Looper . my Looper ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . loop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġscript DirPath Ġ= Ġ"$ default DirPath ${ File . separator } script " ĊĠĠĠ Ġval Ġscript ClassLoader Ġ= Ġobject Ġ: ĠClassLoader () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbug ClassLoader : ĠClassLoader Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath ClassLoader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget A pk Path ( get QQ Application NonNull (), Ġ" com . bug . z qq "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System ClassLoader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System ClassLoader () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfind Class ( name : ĠString ?): ĠClass < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Hook :: class . java . class Loader !!. load Class ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbug ClassLoader . load Class ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun And Catch Script ( action : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEval Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" èĦļæľ¬ è¯Ńæ³ķ éĶĻè¯¯ ï¼ļ source Ġ= Ġ${ e . error SourceFile }, Ġline Ġ= Ġ${ e . error LineNumber }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġtext Ġ= Ġ${ e . error Text }, Ġstack Trace Ġ= Ġ${ e . script StackTrace }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). init Cause ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Script FromFile ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . isFile ) Ġthrow ĠIllegalArgumentException (" èĦļæľ¬ ä¸įèĥ½ æĺ¯ æĸĩä»¶å¤¹ / ä¸įåŃĺåľ¨ / æĹłæ³ķ è¯»åıĸ ") ĊĠĠĠĠĠĠĠ Ġval Ġscript Ġ= ĠScript ( file ) ĊĠĠĠĠĠĠĠ Ġscript Map [ file ] Ġ= Ġscript ĊĠĠĠĠĠĠĠ Ġscript . enable Ġ= Ġconfig . get Or (" script _ enable __ ${ file . name }", Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Init () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript Thread . start () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal Thread StateException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( script DirPath ) ĊĠĠĠĠĠĠĠ Ġif Ġ( dir . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Demo () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . list Files ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config [" script _ enable _${ it . name } "] Ġ!= Ġnull Ġ|| Ġit . name . endsWith (". java ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Script FromFile ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġscript Map [ it ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s ?. enable Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Thread . m H . post Ġ{ Ġs . do Init () Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . do Init () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir . exists ()) Ġdir . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Init () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Demo () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdemo Ġ= ĠFile ("$ script DirPath ${ File . separator } ç¤ºä¾ĭ èĦļæľ¬ . java ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! demo . exists ()) Ġdemo . createNew File () ĊĠĠĠĠĠĠĠ Ġdemo . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Hook :: class . java . class Loader !!. getResource AsStream (" assets / demo . java "). reader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Text () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Enable ( script : ĠScript ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig [" script _ enable __ ${ script . file . name } "] Ġ= Ġ! script . enable ĊĠĠĠĠĠĠĠ Ġscript . enable Ġ= Ġ! script . enable ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġon Msg ( data : ĠMessage Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscript Thread . m H . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscripts . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . enable ) Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Msg ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Join ( group U in : ĠString , Ġperson : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscript Thread . m H . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscripts . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . enable ) Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Join ( group U in , Ġperson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }