Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Proguard - Como usar!

Provavelmente seu projeto está configurado para manter o estado normal de classes que estendem activity!


Talvez isso seja pré requisito, mas, recomendo testar comentando a linha que diz para manter as classes que estendem Activity.

Se isso não der certo, a única forma que vejo para conseguir a ofuscação das suas classes que estendem Activity é recomendando você criar uma classe base que estende Activity, tipo com.seuprojeto.seuapp.GeneralActivity. e depois fazer com que suas classes atuais estendam esta classe base com.seuprojeto.seuapp.GeneralActivity.

Abraço,

Ernani

2012/9/24 Psy Khé <psykhe6@gmail.com>
Para ficar praticamente perfect...

Eu queria que o nome das minhas classes fosse trocado os respectivos nomes,

Tentando algumas mudanças no proguard.cfg...mas até o momento sem sucesso,

Se souber e puder auxiliar,

Segue print...

Valeu!!

Abs,

Psy Khé.

Em 24 de setembro de 2012 18:05, Psy Khé <psykhe6@gmail.com> escreveu:

Ernani,

Constando...add para lista, ...

Em meus testes o envio do email, não funcionou, pois foi feito ofuscamento de nomes, etc, das libs do javamail.

Com o conteudo abaixo...que você me indicou, para nao fazer ofuscamento dos nomes delas...

-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**

-keep class javamail.** {*;}
-keep class javax.mail.** {*;}
-keep class javax.activation.** {*;}

-keep class com.sun.mail.dsn.** {*;}
-keep class com.sun.mail.handlers.** {*;}
-keep class com.sun.mail.smtp.** {*;}
-keep class com.sun.mail.util.** {*;}
-keep class mailcap.** {*;}
-keep class mimetypes.** {*;}
-keep class myjava.awt.datatransfer.** {*;}
-keep class org.apache.harmony.awt.** {*;}
-keep class org.apache.harmony.misc.** {*;}


O email funfou de boa,

Grato mais uma vez, ;)

Relendo, tentando, buscando e ta indo! rs...

Vlw,

Abs,

Psy Khé.

Em 20 de setembro de 2012 13:18, Ernani Joppert Pontes Martins <joppert@gmail.com> escreveu:

Se não rolar, adiciona estas linhas aqui:

-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**

-keep class javamail.** {*;}
-keep class javax.mail.** {*;}
-keep class javax.activation.** {*;}

-keep class com.sun.mail.dsn.** {*;}
-keep class com.sun.mail.handlers.** {*;}
-keep class com.sun.mail.smtp.** {*;}
-keep class com.sun.mail.util.** {*;}
-keep class mailcap.** {*;}
-keep class mimetypes.** {*;}
-keep class myjava.awt.datatransfer.** {*;}
-keep class org.apache.harmony.awt.** {*;}
-keep class org.apache.harmony.misc.** {*;}

Abraço,

Ernani

2012/9/20 Ernani Joppert Pontes Martins <joppert@gmail.com>
Troca estas linhas:

-keep public class * [activation.jar]
-keep public class * [mail.jar]

Por estas:

-keep public class * javax.mail
-keep public class * javax.activation

Veja se resolve!

[]'s

Ernani

2012/9/20 Psy Khé <psykhe6@gmail.com>
Poxa, entao...

[javac] /home/psykhe/Dropbox/workspace/ACP/src/oboob/mobile/util/Mail.java:5: error: package javax.activation does not exist
[javac] import javax.activation.CommandMap;

^esse erro acima ainda persiste com a classe Mail...

javax.activation.*
javax.mail.*

Tentei no config do proguard...

-keep public class * [android-support-v4.jar]
-keep public class * [activation.jar]
-keep public class * [additional.jar]
-keep public class * [mail.jar]

-keepclassmembers class * {
@javax.activation.* <fields>;
}

O android-support-v4.jar - parece que funcionou, não da mais warning dele...

Agora os demais nao rolou...

Hum? Valeu!!!

Abs,

Psy Khé.

Em 20 de setembro de 2012 12:11, Ernani Joppert Pontes Martins <joppert@gmail.com> escreveu:
Dá uma relida no tuto de antes!

Você está esquecendo de configurar o proguard para ignorar as classes do Android!

Abraço,

Ernani

2012/9/20 Psy Khé <psykhe6@gmail.com>
Ernani/ Jonas/ Senhores,

Poxa, então o diretorio encontra-se vazio...

Tentei tirar no xml uns delete que tem la...mas nada.

Creio que também nao seja esse o caso, deve ser outra situação, o porque de nada se encontrar no diretorio.

Segue como está meus arquivos de configuração:


E, o resultado de um release do ant.:

ops...^ atualizando....esquece...[essa parte foi resolvida^]

Era o config do proguard nao estava sendo carregado...

Coloquei a variavel de config do proguard no local.properties...e funcionou!

(pensei que se estivesse no build-proguard.xml ele ja iria carregar ela.argh)

[echo] proguard.config is /opt/android-sdk-linux/tools/proguard/procfg.txt
[echo] Proguard.config is enabled

Agora parece que ta executando o proguard...

Mas ele ta dando error - warning em algumas classes - libs...

Segue exemplo.:
[proguard] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator
[proguard] Warning: android.support.v4.view.AccessibilityDelegateCompatIcs$1: can't find superclass or interface android.view.View$AccessibilityDelegate
[proguard] Warning: android.support.v4.view.AccessibilityDelegateCompatJellyBean$1: can't find superclass or interface android.view.View$AccessibilityDelegate
[proguard] Warning: android.support.v4.view.accessibility.AccessibilityManagerCompatIcs$1: can't find superclass or interface android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
[proguard] Warning: android.support.v4.view.accessibility.AccessibilityNodeProviderCompatJellyBean$1: can't find superclass or interface android.view.accessibility.AccessibilityNodeProvider

[proguard] Warning: br.com.istgroup.util.Mail: can't find superclass or interface javax.mail.Authenticator

No meu projeto eu tenho as libs incluidas...

android-support-v4.jar - Não sei pra que serve, deve ser auto, e necessaria ou nao?
^em libs

e ....activation.jar - additional.jar - mail.jar - da javamail-android.
^em assets...

Ta dando warning nessa libs...

Pode me sugerir algo?

Valeuu!!

Abs,

Psy Khé.

Em 20 de setembro de 2012 10:48, Ernani Joppert Pontes Martins <joppert@gmail.com> escreveu:
Dá uma olhada no diretório proguard do seu projeto....

Procure pelos arquivos dump.txt, mapping.txt, seeds.txt e usage.txt

O mais útil deles é o mapping.txt que é onde ele referencia as mudanças feitas e a correlação entre suas classes, métodos e propriedades no código então ofuscado!

[]'s

Ernani.

2012/9/20 Psy Khé <psykhe6@gmail.com>
Não tem nenhuma classe minha nele...pacote também nada...

Muito estranho...pois peguei o ultimo pacote gerado - release e o unsigned,

E ambos aparecem essa estrutura ai... sem conseguir identificar uma classe minha, pacote, nada...

I dont know...

Alguem?

Valeuu!!!

Abs,

Psy Khé

Em 20 de setembro de 2012 00:42, Jonas Alves <jonasfa@gmail.com> escreveu:

Os pacotes "support.v*" são da biblioteca de compatibilidade (fragments, etc). É normal serem incluídos no seu aplicativo.

Você não identificou classes/pacotes do seu aplicativo na lista?

On Sep 19, 2012 11:15 PM, "Psy Khé" <psykhe6@gmail.com> wrote:
dex2jar...para converter o dex para arquivo jar.

Bem, usei ele....mas creio que nao deu nada certo, rs.

Descompactei o apk, supostamente, ofuscado...

Peguei o dex...

psykhe@psykhe-desktop:~/Downloads/dex2jar-0.0.7.9-SNAPSHOT$ sh dex2jar.sh classes.dex
0 [main] INFO com.googlecode.dex2jar.v3.Main - version:0.0.7.9-SNAPSHOT
4 [main] INFO com.googlecode.dex2jar.v3.Main - dex2jar classes.dex -> classes.dex.dex2jar.jar
2008 [main] INFO com.googlecode.dex2jar.v3.Main - Done.

Agora o arquivo jar, gerou uma arvore estranha de classes...e classes diferentes, algo do proprio android, eu creio.

Segue print em anexo.

Valeu,

Abs,

Psy Khé.

Em 19 de setembro de 2012 22:51, Psy Khé <psykhe6@gmail.com> escreveu:
Então...

Partindo por essa logica, ...

É que eu estava vendo os três files apks que ele gera.

release - unaligned - unsigned

E apenas o  unsigned estava menor, os outros dois com tamanho iguais.

Então pensei que a versão final - release - da unaligned que é a sem ofuscação, estavam iguais...hm...

Mas...i dont know... mas...

Se eu gerar pelo eclipse e assinar a aplicação, ela fica com uns 1 MB.

E a versão final ou a unaligned - Está com 735KB.

E ai? eis uma certa duvida...

Vou da uma pesquisada pra ve se acho algo para fazer engenharia reversa no dex file, das classes.

Valeuuu!

Abs,

Psy Khé

Em 19 de setembro de 2012 14:25, Ernani Joppert Pontes Martins <joppert@gmail.com> escreveu:

Tenta jogar o conf num caminho fixo, e coloca lá no xml o caminho para onde vc jogou o conf!

E acrescentando, o $ são realmente inner classes, mas, isso deve ser relacionado ao android e principalmente à parte de layout, que deve ser a forma como ele gera o código.

O mais importante é ver o tamanho do seu apk no final, deve cair alguns % comparados com o original! sem ofuscamento!

Abraço,

Ernani

2012/9/19 Jonas Alves <jonasfa@gmail.com>

Classes com $ são inner classes. Não tem relação com ofuscamento.

On Sep 19, 2012 11:39 AM, "Psy Khé" <psykhe6@gmail.com> wrote:
É pensei que tendo essas classes.dex - Já seria sinal que foi ofuscado.

Ele ta gerando esse classes.dex...com as possiveis classes...

Tentei verificar o xml da configuração do proguard, mas nao consegui fazer com que ele preserver as classes ofuscadas...ou se preserva e onde e qual seria.

Argh...

Usando o jad em algumas classes dentro do bin/classes/

Ele gerou umas com dolar...creio que isso deve ser normal...mas essa com dolar, estava meio incompletas e talvez ofuscadas ou...

FormularioActivity.class - Original completa sem ofuscação

FormularioActivity$1.class - FormularioActivity$2.class - FormularioActivity$3.class
^incompletas?aparentemente ofuscadas...

Ex.:
tener()
{
this$0 = FormularioActivity.this;
super();
}

esse tener()? nao existiria...

Nao sei...

Qualquer coisa,

Valeu!!

Abs,

Psy Khé.

Em 19 de setembro de 2012 03:02, Ernani Joppert Pontes Martins <joppert@gmail.com> escreveu:
O Ofuscamento do proguard atua no .class, depois disso o Android cria os arquivos .dex a partir do .class.

Portanto, mantendo os .class já consegue ver se o ofuscamento foi feito.

Outra forma de saber se funcionou é comparando o tamanho do .apk gerado tanto o ofuscado quanto o não ofuscado!

Abraço,

Ernani





2012/9/18 Jonas Alves <jonasfa@gmail.com>

Isso não vai funcionar, pois não tem arquivos .class nem nada Java em pacotes android.

Existe uma ferramenta específica para "leitura" do bytecode do Android, o dex, mas não sei o nome. Provavelmente alguém da lista vai lembrar.

On Sep 18, 2012 9:59 PM, "Ernani Joppert Pontes Martins" <joppert@gmail.com> wrote:
Opa, pra verificar, use o jad, Java Decompiler!

Descompacte seu apk e rode jad nomedaclasse.class!

Se ele só assinou alguns arquivos não sei ao certo como resolver.

Todo o processo de assinatura é feito após o ofuscamento, então precisa ver se o processo de assinatura não precisa entender as novas classes com nomes estranhos!

Abraço,

Ernani

2012/9/18 Psy Khé <psykhe6@gmail.com>
Ernani / Senhores,

Show, acho que consegui!!!! RLZ!

Bem...

Segui o ultimo link postado...

Algumas alterações ou add...tais como:
<property name="out.classes.dir" value="class" />
<mkdir dir="${out.classes.dir}" />

Ele usava a variable out.classes.dir mas não escolhia um valor e nem criava o diretorio correspondente.

Apenas isso...

Agora ficou uma duvida:

Ele gerou alguns apks...

Identifiquei dois que deve dizer: assinado e nao assinado.

MainActivity-release.apk - Não assinado
MainActivity-release-unaligned.apk
MainActivity-release-unsigned.apk - Assinado

Claro! rs..

Mas o assinado, parece-me quebrado a assinatura...

Fiz o check...e diz assim: jarsigner -verify -verbose -certs MainActivity-release.apk

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.

Parece que ele só assinou alguns arquivos, não sei se isso é normal. Não mostra todos os files assinados com o comando acima.

Outra duvida,

Acho que em off, tu comentou comigo de um tools que faz a eng.reversa...

Queria saber para testar como ficou a ofuscação... se realmente foi realizada, etc.

Tem como me informar?

Valeu!!!!

Abs,

Psy Khé.

Em 18 de setembro de 2012 09:23, Psy Khé <psykhe6@gmail.com> escreveu:

Sorry...

Nao tinha visto seu outro post...

Parece bom, explica bem...

Vou ve o que eu consigo...

Valeu!!!!

Abs,

Psy Khé.

Em 18 de setembro de 2012 09:21, Psy Khé <psykhe6@gmail.com> escreveu:

Fala Ernani,

Então...eu havia visto esse blog em minha pesquisa.

Mas ele diz:

"Vamos fazer uma configuração extra para reduzir o tamanho da aplicação. O ProGuard comprime e optimiza ficheiros Java, retirando código que não é usado e fazendo várias optimizações no código restante."

Parecia que essa simples configuração do proguard.cfg que ele faz,

É apenas para otimizar, e nao ofuscar o codigo.

Foi o que eu achei a priori,

Nao sei se procede...

Pois em minha tentativa de leitura do proguard/documentação...tem algumas opções que ele tem, de map, etc...para que seja feita a ofuscacao do codigo.

Eu creio que o uso do proguard para ofuscar o codigo, parte do principio sim, de ter a configuracao no projeto...mas ser feita a ofuscação via command line.

ex.: java -jar proguard.jar options ...

Essas opcoes, e se é realmente dessa forma, que eu nao sei.

Hum?

Valeu!

Abs,

Psy Khé.

Em 18 de setembro de 2012 09:03, Ernani Joppert Pontes Martins <joppert@gmail.com> escreveu:

O processo para o Android SDK é mais simples do que o do de J2ME.

Veja aqui, são apenas 2 arquivos que vc precisa configurar.


Abraço,

Ernani

2012/9/18 Psy Khé <psykhe6@gmail.com>
Senhores,

Andei olhando(pesquisando) na lista,

Sobre o uso do proguard para ofuscar o codigo a ser publicado.

O que encontrei foi alguns comentarios entorno de proteção do codigo, engenharia reversa, etc...

Mas não como empregar/realizar/fazer o uso do proguard para ofuscar o codigo.

Esse tipo de procedimento, em conversas que tive em off...

Parece bem relevante, antes da publicação de um code fazer a ofuscação, ajuda...

Vi algumas coisas, para configurar no eclipse, mas nada concreto, comando, para usar o proguard no meu codigo...

Alguem pode me auxiliar para conseguir o feito?

Grato a lista!

Abs,

Psy Khé.
--
 
 

--
 
 



--
 
 

--
 
 
--
 
 

--
 
 

--
 
 
--
 
 

--
 
 


--
 
 
--
 
 

--
 
 

--
 
 

--
 
 

--
 
 

--
 
 


--
 
 


--
 
 

--
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário