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:
-
Descompacte o arquivo apk
$ Unzip test.apk
-
Converta 1classes.dex1 para smali
$ baksmali -x classes.dex -o smaliClasses
-
Converteu as classes de volta para
classes.dex
(substituiu o antigoclasses.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
-
Compacte todos os arquivos em
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
Renomear
test.zip
paratest.apk
$ mv test.zip test.apk
Agora acredito que devo assinar o APK novamente, corrija-me se estiver errado aqui.
Editado
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
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
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:
- descompacte
$ unzip test.apk
- Baksmali
$ baksmali classes.dex -o smaliClasses
- Smali
$ smali smaliClasses -o classes.dex
- Zip -r
$ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
- Jarsign
$ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
- Zipalign
$ zipalign -v 4 test-patched.apk final-apk.apk
- 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:
-
Você não pode executar todas as etapas na ordem adequada.
-
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.
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
- Link quebrado. corrija-o.
- aqui está: forum.exetools.com/showthread.php?t=16538
- @raypixar: o link não foi quebrado, apenas lento.
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.
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 fazerzip -r unsigned.apk *
dentro do diretório com todo o conteúdo. Se ainda assim travar, tente postar a saída do logcat