package Ġjmp 0 Ċ import Ġandroid . tele phony . Tele phony Manager Ċ import Ġjav assist . Ct Class Ċ import Ġjmp 0 . apk . A pk File Ċ import Ġjmp 0 . app . Android Environment Ċ import Ġjmp 0 . app . class loader . Class Loaded Callback Base Ċ import Ġjmp 0 . app . class loader . X Android ClassLoader Ċ import Ġjmp 0 . app . interceptor . intf . I Interceptor Ċ import Ġjmp 0 . app . interceptor . un id bg . Un id bg Interceptor Ċ import Ġjmp 0 . util . System Reflect Utils . invoke Ex Ċ import Ġorg . apache . log 4 j . Level Ċ import Ġorg . apache . log 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ Ċ // ĠTODO : Ġ 2 0 2 2 / 3 / 1 1 Ġ æķ´ çĲĨ log Ġfactory Ċ class ĠMain Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġvm Ġoption Ġ=> Ġ- X verify : none ĊĠĠĠĠ Ġ* Ġj dk _ path / ..... / lib jvm . dylib ĊĠĠĠĠ Ġ* Ġfind Ġ" Pro hibited Ġpackage Ġname :" Ġin Ġlib jvm . dylib ĊĠĠĠĠ Ġ* Ġj dk 1 1 Ġtry Ġto Ġload ĊĠĠĠĠ Ġ* Ġor ĊĠĠĠĠ Ġ* ĠPro hibited Ġpackage Ġfor Ġnon - bootstrap Ġclasses : Ġ% s Ġfrom Ġ% s ĊĠĠĠĠ Ġ* Ġand Ġchange Ġ" java /" Ġto Ġ" patch " Ġbefore Ġthe Ġstring ĊĠĠĠĠ Ġ* Ġmac os : ĊĠĠĠĠ Ġ* Ġneed Ġto Ġres ign ĊĠĠĠĠ Ġ* Ġfind Ġ=> Ġsecurity Ġfind - identity Ġ- v Ġ- p Ġcode signing ĊĠĠĠĠ Ġ* Ġres ign Ġ=> Ġcode sign Ġ- f Ġ- s Ġ" Apple ĠDevelopment : xxxx " Ġlib jvm . dylib ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= ĠLogger . getLogger ( java Class ) ĊĠĠĠĠĠĠĠ Ġfun Ġget Base Android Env ( force : Boolean ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Environment ( A pk File ( File (" test - app / build / outputs / apk / debug / test - app - debug . apk "), Ġforce , force ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI Interceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnative Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false , null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmethod Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠThread . currentThread (). context ClassLoader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġio Resolver ( path : ĠString ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false ," "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest Looper ( force : Boolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Environment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Environment ( A pk File ( File (" test - app / build / outputs / apk / debug / test - app - debug . apk "), Ġforce ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Android Runtime Class Ġ= Ġobject Ġ: ĠClass Loaded Callback Base () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Resolve Class Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Environment : ĠAndroid Environment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Class : ĠC t Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠC t Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġct Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Resolve Class Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Environment : ĠAndroid Environment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Loader : ĠX Android ClassLoader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠClass < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Interceptor Ġ= Ġobject Ġ: ĠI Interceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnative Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġ 2 0 2 2 / 3 / 7 Ġuse Ġun id bg Ġem ulate Ġnative Ġfunc . it Ġshould Ġbe Ġloaded Ġby Ġandroid Ġclass loader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(( className Ġ== Ġ" com . example . my application . Test Java ") Ġand Ġ( func Name Ġ== Ġ" string From JNI ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Interceptor . Impl Status ( true , Ġ" hook ed Ġby Ġasm jmp 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Interceptor . Impl Status ( false , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmethod Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( func Name Ġ== Ġ" test String ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" class ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġio Resolver ( path : ĠString ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false ," "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Environment . register Method Hook (" jmp 0 . test . test app . MainActivity . get Str () V ", false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠTest J av acl azz Ġ= Ġandroid Environment . load Class (" jmp 0 . test . test app . Test Kotlin ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠTest J av acl azz . getDeclared Method (" test L op per ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke Ex ( Test J av acl azz . get Constructor (). newInstance ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" test L op per Ġ=> Ġ$ ret ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest Base 6 4 () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Environment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Environment ( A pk File ( File (" test - app / build / outputs / apk / debug / test - app - debug . apk "), Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI Interceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnative Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmethod Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġio Resolver ( path : ĠString ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false ," "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġandroid Environment . load Class (" jmp 0 . test . test app . Test Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġclazz . getDeclared Constructor (). newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġclazz . getDeclared Method (" test Base 6 4 "). invoke Ex ( ins ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Environment . destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest J ni ( force : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Environment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Environment ( A pk File ( File (" test - app / build / outputs / apk / debug / test - app - debug . apk "), Ġforce , true ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠUn id bg Interceptor (" lib native - lib . so ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġother Native Called ( uuid : ĠString , ĠclassName : ĠString , Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmethod Called ( uuid : ĠString , ĠclassName : ĠString , Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("$ className .$ func Name $ signature Ġcalled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġio Resolver ( path : ĠString ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false ," "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Environment . register Method Hook (" jmp 0 . test . test app . Test Native . test All () V ", false ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġandroid Environment . load Class (" jmp 0 . test . test app . Test Native ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġclazz . getDeclared Constructor (). newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . getDeclared Method (" test All "). invoke Ex ( ins ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Environment . destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest Net Work ( force : ĠBoolean ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġae Ġ= Ġget Base Android Env ( force ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġae . load Class (" jmp 0 . test . test app . net . Test Net Work "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġget Declared Constructor (). newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Declared Method (" test "). invoke ( ins ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( ret ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest Context ( force : ĠBoolean ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġae Ġ= Ġget Base Android Env ( force ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Clazz Ġ= Ġae . find Class (" android . content . Context ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġae . load Class (" jmp 0 . test . test app . TestContext "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġget Declared Constructor ( context Clazz ). newInstance ( ae . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Declared Method (" test All "). invoke ( ins ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest AES ( force : ĠBoolean ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġae Ġ= Ġget Base Android Env ( force ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġae . load Class (" jmp 0 . test . test app . Test AES ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġclazz . getDeclared Constructor (). newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġclazz . getDeclared Method (" test All "). invoke ( ins ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( ret ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest File ( force : ĠBoolean ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġae Ġ= ĠAndroid Environment ( A pk File ( File (" test - app / build / outputs / apk / debug / test - app - debug . apk "), Ġforce , force ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI Interceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnative Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false , null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmethod Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("$ className .$ func Name $ signature Ġcalled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġio Resolver ( path : ĠString ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path Ġ== Ġ"/ proc / self / maps "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( true ," temp / test - app - debug . apk / assets / hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false ," "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġae . load Class (" jmp 0 . test . test app . File Test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġclazz . getDeclared Constructor (). newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . getDeclared Method (" test All "). invoke ( ins ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest SharedPreferences ( force : ĠBoolean ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġae Ġ= ĠAndroid Environment ( A pk File ( File (" test - app / build / outputs / apk / debug / test - app - debug . apk "), Ġforce , force ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI Interceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnative Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false , null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmethod Called ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam : ĠArray < out ĠAny ?> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("$ className .$ func Name $ signature Ġcalled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġio Resolver ( path : ĠString ): ĠI Interceptor . Impl Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path Ġ== Ġ"/ proc / self / maps "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( true ," temp / test - app - debug . apk / assets / hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠI Interceptor . Impl Status ( false ," "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Clazz Ġ= Ġae . find Class (" android . content . Context ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġae . load Class (" jmp 0 . test . test app . SharedPreferences Test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġclazz . getDeclared Constructor ( context Clazz ). newInstance ( ae . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . getDeclared Method (" test All "). invoke ( ins ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . getLogger ( jmp 0 . app . class loader . X Android ClassLoader :: class . java ). level Ġ= ĠLevel . TRACE Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . getLogger ( jmp 0 . app . mock . nt v . System Properties :: class . java ). level Ġ= ĠLevel . TRACE Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreflection s Ġ= ĠReflection s ( Common Conf . Mock . mock Native Class PackageName ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġls Ġ= Ġreflection s . get Types Annotated With ( Native Hook Class :: class . java ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġls . forEach Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest Context ( false ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest Looper ( false ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest Base 6 4 () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest J ni ( false ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest Net Work ( false ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest AES ( false ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest File ( false ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtest SharedPreferences ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }