Reempacotando arquivo APK usando baksmali e smali

Sou um estudante interessado em Segurança Android. Eu estava tentando modificar um arquivo APK usando baksmali e smali. No entanto, não consigo executar o aplicativo reembalado no meu celular. Quando clico no ícone, ele diz “Infelizmente, o teste parou” e existe. (Até o ícone do aplicativo foi alterado, agora vejo o ícone padrão do Android em vez do antigo ícone colorido real do aplicativo)

Qual poderia ser a razão para isso? Na verdade, nem mesmo modifiquei o código do arquivo apk. Acabei de descompactar o apk para obter o arquivo dex, depois o converti para smali usando baksmali.jar e voltei ao dex usando smali.jar. Finalmente compactado e assinado.

O que eu fiz em detalhes:

  1. Descompacte o arquivo apk

    $ Unzip test.apk 
  2. Converta 1classes.dex1 para smali

    $ baksmali -x classes.dex -o smaliClasses 
  3. Converteu as classes de volta para classes.dex (substituiu o antigo classes.dex, na verdade eu não adicionei nenhum código novo ao arquivo smali . Eu queria saber se isso funciona primeiro).

    $ smali smaliClasses -o classes.dex 
  4. Compacte todos os arquivos em test.zip

    $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc 
  5. Renomear test.zip para test.apk

    $ mv test.zip test.apk 

Agora acredito que devo assinar o APK novamente, corrija-me se estiver errado aqui.

Editado

:

  1. java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk

  2. Tentei instalar o novo APK reempacotado. Usando o adb shell. O shell do Adb mostrou que foi instalado com sucesso. No entanto, não consigo executar o aplicativo reempacotado no celular. O aplicativo trava quando clico nele. Diz “Infelizmente, o teste parou”.

Por que o aplicativo reempacotado não está em execução? Não entendo o que estou perdendo aqui?

Editado :

Tentei reempacotar o mesmo aplicativo usando apktool. Extraí os arquivos smali usando-o e reempacotei. Mas por que a reembalagem não está funcionando com baksmali, smali, zip e signapk. A compactação é o problema real neste procedimento? Vejo que o tamanho do aplicativo é reduzido drasticamente quando eu fecho e o renomeio para .apk em comparação com o arquivo apk original: |

Comentários

  • Você deve verificar seu logcat para obter mais informações, se possível, poste o log de travamento também.
  • @xDragonZ , Eu editei a postagem. Desta vez, tentei instalar usando ” adb install ” e assinei usando signapk.jar. Desta vez, o aplicativo foi instalado no telefone. No entanto, quando clico no aplicativo, ele trava, dizendo ” ” Infelizmente, o aplicativo parou “. Uma coisa que percebi é que o tamanho do apk reembalado é menor do que o original. A razão da ferramenta zip para essa alteração é o tamanho? Alguma pista sobre por que o aplicativo trava? Como faço para obter um log para isso? Muito obrigado.
  • talvez você também precise zipalignar o arquivo?
  • Você está desodexando (baksmali -x option) de propósito? Parece que, por estar executando esta opção, sem fornecer um ” bootclasspath ” você ‘ vamos obter algum código smali estranho que pode não ser capaz de ser convertido de volta em um arquivo dex. Além disso, apenas remova a pasta META-INF antes de compactar e tentar fazer zip -r unsigned.apk * dentro do diretório com todo o conteúdo. Se ainda assim travar, tente postar a saída do logcat
  • Portanto, das cinco respostas , nenhuma é aceitável?

Resposta

Eu uso apktool para esse propósito e um pequeno par de scripts de shell para descompilar e recompilar APKs:

  • decompilar-apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done." 
  • compilar-apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build 

Usar apktool tem a vantagem de ser capaz de visualizar e editar todos os recursos também como o arquivo de manifesto decodificado.

Comentários

  • Este é o único método que funciona para mim. Eu ‘ tentei dezenas, nenhuma funcionou. Muito obrigado.

Resposta

Depois de brincar com smali / baksmali, fiz funcionar. Acho que você não usou o sinalizador recursivo ao compactar . Isso fez com que a pasta res ficasse vazia, causando o travamento. Também executo o zipalign depois de assinar o apk.

Etapas:

  1. descompacte
    $ unzip test.apk
  2. Baksmali
    $ baksmali classes.dex -o smaliClasses
  3. Smali
    $ smali smaliClasses -o classes.dex
  4. Zip -r
    $ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
  5. Jarsign
    $ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
  6. Zipalign
    $ zipalign -v 4 test-patched.apk final-apk.apk
  7. Lucro 🙂

Resposta

Não posso comentar devido a reputação, por isso vou postá-lo aqui.

Já que o trabalho é feito corretamente com o uso do apktool, parece-me que algo está errado com o processo de zip.

Depois reempacotando o aplicativo, você pode verificar se o conteúdo do novo APK é idêntico (no que diz respeito aos nomes de arquivo e estrutura) ao conteúdo do original?

EDITAR: também, já que o arquivo é um arquivo .dex, não acho que você precise da opção -x no baksmali.

EDIT2: Ao reempacotar, você não precisa incluir o diretório META-INF no arquivo zip. será criado ao assinar t o arquivo.

Resposta

Usar a opção deodex “-x” não é necessário, pois você “não está executando baksmali em um odex. Basta executar o baksmali no arquivo dex. Você também pode usar o apktool para descompactar / embalar tudo, o que eu acho mais fácil.

Resposta

  • Por que o tamanho do arquivo foi reduzido?

    Porque apktool o otimizou durante a recompilação.

  • Por que ele travou?

    Possíveis razões para travar:

    1. Você não pode executar todas as etapas na ordem adequada.

    2. O aplicativo pode ter um Verificação CRC para o tamanho do arquivo.

Ferramenta totalmente automatizada com GUI. É atualizada com a estrutura Android recente, então nenhum erro de descompilação de recursos e melhor manuseio.

https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0

E este pequeno artigo que inclui Tuts sobre como reverter aplicativos Android e todas as informações básicas sobre como modificar / manipular apk.

https://www.dropbox.com/s/nkkmp4ait71kjku/Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl=0

Resposta

Se você estiver interessado em aplicativos Anroid RE, então encontrará ferramentas melhores para usar regularmente.

Bem, uma das ferramentas é o Android Cracker Kit (que desenvolvi), que oferece tudo o que você precisa: Android Cracker Kit (ACK):

Comentários

Resposta

Eu uso o APK Editor Pro para editar APKs direto do meu dispositivo Android!

https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro

Comentários

  • Ótima dica. O apk gerado não é instalado corretamente com o script de (des) compilação acima (por quê?), Mas a substituição de classes.dex fez isso.

Resposta

Etapa 4. Você se esqueceu de fazer isso recursivamente. Ele não copiará os arquivos em / res quando você compactá-lo. Adicione a opção -r.

zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc 

Etapa 6. Você não precisa assiná-lo novamente, já que você o reempacotou com o diretório META-INF para o seu apk. As informações de assinatura estão dentro do META-INF.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *