package Ġcom . md zz . hook Ċ Ċ import Ġcom . md zz . hook . base . Base Hook Ċ import Ġde . rob v . android . x posed . XC _ Method Hook Ċ import Ġde . rob v . android . x posed . X posed Bridge Ċ import Ġjava . lang . reflect . Method Ċ Ċ /** Ċ Ġ* Ġauthor : Ġtiny Ċ Ġ* Ġcreated Ġon : Ġ 2 0 - 5 - 5 Ġä¸Ĭ åįĪ 1 1 : 4 3 Ċ Ġ*/ Ċ class ĠH K ClassLoader Ġ: ĠBase Hook () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" HK ClassLoader " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠX POSE D _ PACKAGE _ PREFIX Ġ= Ġ" de . rob v . android . x posed " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Hook () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Loader Class Ġ= Ġclass Loader :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġload Class Method Ġ= Ġfind Method ( class Loader Class , Ġ" load Class ", ĠString :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX posed Bridge . hook Method ( load Class Method , ĠMy Method Hook ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( TAG , Ġ" run : Ġæ¨¡ åĿĹ ${ number } å·¥ä½ľ æŃ£å¸¸ ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( th : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( TAG , Ġ" run : Ġæ¨¡ åĿĹ ${ number } åĩº éĶĻ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( TAG , Ġth ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Method ( clazz : ĠClass < *> ?, ĠmethodName : ĠString , Ġvar arg Ġparameter Types : ĠClass < *> ): ĠMethod ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( clazz Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . getDeclared Method ( methodName , Ġ* parameter Types ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Method ( clazz . super class , ĠmethodName , Ġ* parameter Types ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠMy Method Hook Ġ: ĠX C _ Method Hook () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Hook ed Method ( param : ĠMethod Hook Param ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . has Throwable ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . result Ġas ? ĠClass < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. let Ġ{ Ġclazz Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clazz . name . startsWith ( X POSE D _ PACKAGE _ PREFIX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . throwable Ġ= ĠClass NotFoundException ( it . args ! ![ 0 ]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }