package Ġcom . chen cc . android stud yn otes code . utils čĊč Ċ import Ġandroid . annotation . Suppress Lint č Ċ import Ġjava . io . File č Ċ import Ġjava . io . File OutputStream č Ċ import Ġjava . io . Filename Filter č Ċ import Ġjava . security . Invalid Key Exception č Ċ import Ġjava . security . NoSuch AlgorithmException č Ċ import Ġjavax . crypto . Bad Padding Exception č Ċ import Ġjavax . crypto . Cipher č Ċ import Ġjavax . crypto . Illegal BlockSize Exception č Ċ import Ġjavax . crypto . NoSuch Padding Exception č Ċ import Ġjavax . crypto . spec . SecretKey Spec čĊč Ċ @ Suppress Lint (" GetInstance ") č Ċ object ĠAES Utils Ġ{ čĊĠĠĠ Ġconst Ġval ĠDEFAULT _ PWD Ġ= Ġ" abcdefgh ijkl mn op " čĊčĊĠĠĠ Ġprivate Ġconst Ġval Ġalgorithm Str Ġ= Ġ" AES / E CB / PKCS 5 Padding " čĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġencrypt Cipher : ĠCipher čĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdecrypt Cipher : ĠCipher čĊčĊčĊĠĠĠ Ġfun Ġinit ( password : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt Cipher Ġ= ĠCipher . getInstance ( algorithm Str ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypt Cipher Ġ= ĠCipher . getInstance ( algorithm Str ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Str Ġ= Ġpassword . toByteArray () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Ġ= ĠSecret KeySpec ( key Str , Ġ" AES ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt Cipher . init ( Cipher . ENCRYPT _ MODE , Ġkey ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypt Cipher . init ( Cipher . DE CRYPT _ MODE , Ġkey ) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠNoSuch AlgorithmException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace (); čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠNoSuch Padding Exception ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace (); čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠInvalid Key Exception ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace (); čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ@ param Ġsrc A pk File Ġæ º Ĳ æĸĩä»¶ čĊĠĠĠĠ Ġ* Ġ@ param Ġdst A pk File Ġ Ġ çĽ®æłĩ æĸĩä»¶ čĊĠĠĠĠ Ġ* Ġ@ return Ġ Ġ åĬłå¯Ĩ åĲİçļĦ Ġ æĸ° dex Ġæĸĩä»¶ čĊĠĠĠĠ Ġ*/ čĊčĊĠĠĠ Ġfun Ġencrypt AP K File ( src A pk File Ġ: ĠFile , Ġdst A pk File Ġ: ĠFile ) Ġ: ĠFile ? { čĊĠĠĠĠĠĠĠ Ġ// Ġ è§£ åİĭ Ġapk åĪ° Ġdst A pk File čĊĠĠĠĠĠĠĠ ĠZip . un Zip ( src A pk File , Ġdst A pk File ) čĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æīĢæľī Ġdex Ġæĸĩä»¶ čĊĠĠĠĠĠĠĠ Ġvar Ġdex Files Ġ= Ġdst A pk File . list Files ( Filename Filter Ġ{ Ġ_, Ġname Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith (". dex ") čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ Ġvar Ġmain Dex File Ġ: ĠFile ? Ġ= Ġnull čĊčĊĠĠĠĠĠĠĠ Ġdex Files ?. forEach Ġ{ Ġdex File -> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯»åıĸ Ġdex Ġæĸĩä»¶ æķ°æį® čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuffer Ġ= Ġget Bytes ( dex File ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĬłå¯Ĩ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġencrypt Bytes Ġ= Ġencrypt ( buffer ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dex File . name . endsWith (" classes . dex ")){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Dex File Ġ= Ġdex File čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ åĬłå¯Ĩ åĲİ çļĦæķ°æį® åĨĻåħ¥ ĠæĽ ¿ æį¢ åİŁ æĿ¥ çļĦæķ°æį® čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġf os Ġ= ĠFileOutputStream ( dex File ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġf os . write ( encrypt Bytes ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġf os . flush () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġf os . close () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġmain Dex File čĊĠĠĠ Ġ} čĊčĊ čĊčĊĠĠĠ Ġfun Ġencrypt ( content Ġ: ĠByteArray ) Ġ: ĠByteArray ? { čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġencrypt Cipher . do Final ( content ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal BlockSize Exception ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠBad Padding Exception ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġnull čĊĠĠĠ Ġ} čĊč Ċ }