Proguard - Como usar!

1,333 views
Skip to first unread message

Psy Khé

unread,
Sep 18, 2012, 7:16:53 AM9/18/12
to androidb...@googlegroups.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é.

Ernani Joppert Pontes Martins

unread,
Sep 18, 2012, 8:03:45 AM9/18/12
to androidb...@googlegroups.com
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é <psy...@gmail.com>

--
 
 

Ernani Joppert Pontes Martins

unread,
Sep 18, 2012, 8:06:07 AM9/18/12
to androidb...@googlegroups.com
Este link aqui mostra como configurar seu ant file para suportar o build com proguard!

Psy Khé

unread,
Sep 18, 2012, 8:21:03 AM9/18/12
to androidb...@googlegroups.com
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é.

--
 
 

Psy Khé

unread,
Sep 18, 2012, 8:23:56 AM9/18/12
to androidb...@googlegroups.com
Sorry...

Nao tinha visto seu outro post...

Parece bom, explica bem...

Vou ve o que eu consigo...

Valeu!!!!

Abs,

Psy Khé.

Psy Khé

unread,
Sep 18, 2012, 2:30:46 PM9/18/12
to androidb...@googlegroups.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é.

Ernani Joppert Pontes Martins

unread,
Sep 18, 2012, 8:59:06 PM9/18/12
to androidb...@googlegroups.com
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é <psy...@gmail.com>
--
 
 

Jonas Alves

unread,
Sep 18, 2012, 10:21:36 PM9/18/12
to androidb...@googlegroups.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.

--
 
 

Ernani Joppert Pontes Martins

unread,
Sep 19, 2012, 2:02:26 AM9/19/12
to androidb...@googlegroups.com
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

Inline image 1



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

image.png

Psy Khé

unread,
Sep 19, 2012, 10:39:03 AM9/19/12
to androidb...@googlegroups.com
É 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é.

--
 
 

image.png

Psy Khé

unread,
Sep 19, 2012, 10:45:59 AM9/19/12
to androidb...@googlegroups.com
Acrescentando...

720K MainActivity-release.apk
720K MainActivity-release-unaligned.apk
716K MainActivity-release-unsigned.apk

Creio que não está ocorrendo a ofuscação corretamente, o tamanho dela unaligned e com a possivel ofuscação está a mesma.

Uma coisa que vi na configuracao do build do proguard - Configuracao do xml.

<property name="proguard-jar" value="${proguard.dir}/proguard.jar" />
<property name="proguard-conf.dir" value="" />

A variavel do diretorio proguard.dir - está declarada no local.properties..tranquilo.

Mas essa do proguard-conf.dir está sem valor...creio que pode ser um problema.

Agora no post, ele fala para colocar a procfg.txt na raiz do projeto...

Como faço para pegar o path do projeto? e passar nessa variable - proguard-conf.dir?

Valeu!!

Abs,

Psy Khé.
image.png

Jonas Alves

unread,
Sep 19, 2012, 10:52:54 AM9/19/12
to androidb...@googlegroups.com

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

--
 
 
image.png

Ernani Joppert Pontes Martins

unread,
Sep 19, 2012, 1:25:42 PM9/19/12
to androidb...@googlegroups.com
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 <jon...@gmail.com>
--
 
 

image.png

Psy Khé

unread,
Sep 19, 2012, 9:51:33 PM9/19/12
to androidb...@googlegroups.com
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é

--
 
 

image.png

Psy Khé

unread,
Sep 19, 2012, 10:15:50 PM9/19/12
to androidb...@googlegroups.com
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é.
image.png
58.png

Jonas Alves

unread,
Sep 19, 2012, 11:42:21 PM9/19/12
to androidb...@googlegroups.com

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?

--
 
 
image.png

Psy Khé

unread,
Sep 20, 2012, 9:36:15 AM9/20/12
to androidb...@googlegroups.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é

--
 
 

image.png

Ernani Joppert Pontes Martins

unread,
Sep 20, 2012, 9:48:38 AM9/20/12
to androidb...@googlegroups.com
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é <psy...@gmail.com>
--
 
 

image.png

Psy Khé

unread,
Sep 20, 2012, 11:04:54 AM9/20/12
to androidb...@googlegroups.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é.

--
 
 

image.png

Ernani Joppert Pontes Martins

unread,
Sep 20, 2012, 11:11:35 AM9/20/12
to androidb...@googlegroups.com
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é <psy...@gmail.com>
--
 
 

image.png

Psy Khé

unread,
Sep 20, 2012, 11:34:25 AM9/20/12
to androidb...@googlegroups.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é.

--
 
 

image.png

Ernani Joppert Pontes Martins

unread,
Sep 20, 2012, 12:12:43 PM9/20/12
to androidb...@googlegroups.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é <psy...@gmail.com>
--
 
 

image.png

Ernani Joppert Pontes Martins

unread,
Sep 20, 2012, 12:18:38 PM9/20/12
to androidb...@googlegroups.com
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 <jop...@gmail.com>
image.png

Ernani Joppert Pontes Martins

unread,
Sep 20, 2012, 12:25:33 PM9/20/12
to androidb...@googlegroups.com
FYI, a partir do Android SDK 17 ele introduz algumas mudanças na maneira de como os jars são carregados.

Se você tem um projeto que usa jars externos, a atualização para SDK 17 ou além provavelmente quebrá-lo.

Para corrigir isso, selecione Projeto -> Propriedades -> Java Build Path -> Ordem e Exportar no menu, e marque as caixas à esquerda dos três jars usados pelo javamail.

Isso garante que os jars são exportados para o destino de compilação.

Sem essa correção, o projeto ainda vai construir, mas o javamail deixará de funcionar e o proguard também irá falhar.

Isto não é um problema do proguard.
É uma lance do Android SDK.

Nenhuma alteração no proguard.cfg será necessária.

Outra consequência da atualização do SDK é que ele não será mais necessário atualizar proguard manualmente.
image.png

Psy Khé

unread,
Sep 20, 2012, 12:39:19 PM9/20/12
to androidb...@googlegroups.com
Resolveu nao mano...os keep...

E os jars já estão la em order&export.

Fisicamente eles se encontram em assets.

Acho que ele devia carregar as libs necessarias....

Vi isso no xml...

<path id="fullclasspath">
<path refid="android.target.classpath"/>
<pathelement path="${external.libs.dir}"/>
</path>
<property name="libraryjarpath" refid="fullclasspath"/>

Tentei criar a referencia a external.libs.dir, já que nao vi nenhuma sendo feita.
<property name="external.libs.dir" value="assets" />

Porém mesmo assim parece que nao carrega as libs externas...

vide:
[echo] Resolving Dependencies for MainActivity...
[dependency] Library dependencies:
[dependency] No Libraries
[dependency] ------------------
[dependency] API<=15: Adding annotations.jar to the classpath.
[echo] ----------
[echo] Building Libraries with 'release'...
[subant] No sub-builds to iterate on

Segue print de como está as libs no projeto,

Grato,

Valeu,

Abs,

Psy Khé


--
 
 

image.png
44.png
01.png

Psy Khé

unread,
Sep 24, 2012, 8:36:41 AM9/24/12
to androidb...@googlegroups.com
Ernani / Senhores,

Voltando a codar...

Tentei mudar o caminho do jar library...que parece que ele busca as dependencias...

Mas nao obtive sucesso,

Continua mostrando que não tem library dependences...
<property name="libraryjarpath" value="assets" /> 
-libraryjars ${libraryjarpath}

Segue print,

Grato!!

Abs,

Psy Khé.
image.png
57.png

Ernani Joppert Pontes Martins

unread,
Sep 24, 2012, 1:10:23 PM9/24/12
to androidb...@googlegroups.com
Tenta colocar no classpath ou libraryjarpath além do seu classpath os outros jars direto.

Veja se resolve!

Abraço,

Ernani

2012/9/24 Psy Khé <psy...@gmail.com>
--
 
 

image.png

Psy Khé

unread,
Sep 24, 2012, 1:25:20 PM9/24/12
to androidb...@googlegroups.com
Ernani,

Nâo entendi...

O libraryjarpath eu declarei como assets...os jars estão lá.

Bem eu refiz todo o classpath com os jars...

O que persistiu o erro,

Só que fazendo o build, pelo eclipse->android-unsigned app...

Ele me dava os erros, e fui seguindo...

Por ultimo, o android.support dava erro,  então coloquei as linhas abaixo.

-keep public class * extends javax.mail.Authenticator

-dontwarn android.support.v4.**

O que conseguiu gerar o apk sem erro...

Muito bom!!!

Parece que ta funfando de boa,

Fiz a engenharia reversa do classes.dex, e vi toda a arvore tensa que ele cria,

Só nao gostei que algumas classes minhas, activity e tal, ele permaneceu com o nome,

Pode ser config do proguard, mas de resto ta tudo bem ofuscado,

Até para mim, é bem dificil entender algo, ....legal pacas, rs...

Ah, ficou uma duvida, ...parece que eu criar pelo eclipse, sem ser o ant, a compilação da apk é a mesma? Como funciona? Tem diferença para compilar pelo android->unsigned app, ou pelo ant?

Valeu a todos os envolvidos e a lista, qualquer nova eu posto.

Abraços,

Psy Khé.

--
 
 

image.png

Ernani Joppert Pontes Martins

unread,
Sep 24, 2012, 1:32:45 PM9/24/12
to androidb...@googlegroups.com
Eu acredito que o Eclipse (Android SDK) compile usando as mesmas propriedades de projeto.

Tudo depende de como está seu ant file, eu recomendo usar ant apenas para casos extremos onde há um ambiente de integração contínua.

Quando havia explicado, era para vc rever se o classpath estava sendo exportado de acordo, mesmo com os jars externos, etc.

Bom saber que funcionou.

Abraço,

Ernani

2012/9/24 Psy Khé <psy...@gmail.com>
--
 
 

image.png

Psy Khé

unread,
Sep 24, 2012, 1:32:02 PM9/24/12
to androidb...@googlegroups.com
Argh...

Pelo Ant não ta rolando...

Mesmo erro....

[javac] Mail.java:5: error: package javax.activation does not exist
[javac] import javax.activation.CommandMap;

Poxa...

Abs,

Psy Khé.
image.png

Psy Khé

unread,
Sep 24, 2012, 5:05:23 PM9/24/12
to androidb...@googlegroups.com
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é.

--
 
 

image.png

Psy Khé

unread,
Sep 24, 2012, 5:26:30 PM9/24/12
to androidb...@googlegroups.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é.
image.png
proguard.png

Ernani Joppert Pontes Martins

unread,
Sep 25, 2012, 11:49:57 AM9/25/12
to androidb...@googlegroups.com
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é <psy...@gmail.com>
Para ficar praticamente perfect...
--
 
 

image.png

dms

unread,
May 25, 2015, 11:06:02 AM5/25/15
to androidb...@googlegroups.com
Pessoal, 

Fiz o download de um APK na play e mandei para um serviço de descompilação online.

Fiquei assustado com o resultado. Tipo qualquer um pode ter acesso ao meu código fonte.

Estou fazendo um novo app que irá ter algumas funcionalidades que não posso mover para serviços on-line e ao mesmo tempo não gostaria que outros tivessem acesso ao meu código. Pois este código é o "pulo do gato da aplicação". 

1) Como ofuscar este código?  Uso o ProGuard ou existem outras soluções mais simples?

2) Vi que o ProGuard pode causar muitos problemas em bibliotecas de terceiros, tem como eu ofuscar apenas algumas classes ou métodos do meu app, mantendo o restante "descompilável"?

3) Vocês indicam algum guia na internet para mim?

Obrigado

Daniel

Marcelo Alves

unread,
May 25, 2015, 11:17:12 AM5/25/15
to androidb...@googlegroups.com
Daniel,
   Tem a guide do d.androidhttp://developer.android.com/tools/help/proguard.html .. E a maioria das libs em suas documentações, elas dizem como configurar o proguard para funcionar corretamente, caso o projeto use.

Abs,
   Marcelo Alves

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Argemiro Neto

unread,
May 25, 2015, 12:04:09 PM5/25/15
to androidb...@googlegroups.com
Daniel, qual foi a ferramenta online que você utilizou? Isso é assustador e pode ser didático também, dependendo do uso e da qualidade da descompilação.


Sds,

Argemiro Neto

Marcelo Alves

unread,
May 25, 2015, 12:16:57 PM5/25/15
to androidb...@googlegroups.com
Acho curioso ser "didático" quando é código dos outros, e "assustador" com o próprio código.​ 

(Eu particularmente não me importo com isso)

Geovani **Leia a documentação oficial** de Souza

unread,
May 25, 2015, 12:20:49 PM5/25/15
to androidb...@googlegroups.com
Gente do céu, não precisa de ferramenta online: dex2jar e jd-gui já dão conta do recado. Já cheguei a testar o APK Studio, que é bem útil pra acessar Resources, mas não descompila totalmente o código.

Sobre essa neura de "esconder o pulo do gato", o jeito é esse: ProGuard, lembrando que vc precisa guardar o arquivo de "mapping" pra cada versão que vc publicar, pois só assim vc consegue "traduzir" os logs de erros (caso existam) e saber de onde eles vêm.

Outra alternativa, acredito eu, seria colocar esse "pulo do gato" em código C++ e fazer uso dele dentro do Java via JNI. Mas só de pensar na trabalheira, acho que essa sugestão fica só como registro mesmo.

Geovani **Leia a documentação oficial** de Souza

unread,
May 25, 2015, 12:23:27 PM5/25/15
to androidb...@googlegroups.com
Concordo. Pra mim a única forma de realmente manter uma ideia em segredo, é nunca tirá-la da cabeça, seja de forma falada, escrita ou codificada.

Se alguém com tempo sobrando e malícia suficiente pra querer copiar um app, provavelmente o faria imitando as funcionalidades de alto nível e completando as lacunas.

dms

unread,
May 25, 2015, 12:32:51 PM5/25/15
to androidb...@googlegroups.com
Argemiro, como não queria baixar nenhum app desconhecido no meu micro, pesquisei no Google apk decompiler online. Ele lhe fornece várias opções.

Rodrigo A.

unread,
May 25, 2015, 12:42:45 PM5/25/15
to androidbrasil-dev
Para ver as imagens eu sabia(só abrir o apk com o winrar), agora para pegar o codigo inteiro com serviço online eu ainda n tinha visto. Mas é interessante mesmo p/ estudo. 

O problema é q vai ter um monte de jogos estilo os da turma da monica do master system kkkkkkk

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Rodrigo A.

Argemiro Neto

unread,
May 25, 2015, 1:11:19 PM5/25/15
to androidb...@googlegroups.com
Na realidade, não foi essa a ideia que quis passar. Deixa eu colocar de outra forma:pra mim, é assustadora a facilidade que se tem de copiar e burlar estes aplicativos móveis de uma maneira geral. Eu mesmo já passei por uma situação assim com um aplicativo pra iOS, que uma parte vital do aplicativo estava em arquivos de resources sem nenhuma proteção e num dado momento quiseram comprar o app. No processo vi que o que estava vendendo não tinha proteção alguma e qualquer um poderia copiá-lo, inclusive a empresa que queria comprá-lo. A venda não se concretizou, fiz uma versão com os dados criptografados e monitorei por um bom tempo o que a empresa (concorrente que queria comprar meu app) lançava, se visse qualquer coisa que denotasse a cópia dos meus dados sem autorização, simplesmente os processaria.

Com relação ao didático, o que pensei na hora foi, por exemplo: ah, legal, como o pessoal do whatsapp fez pra "esconder" a actionbar na rolagem? (esclarecendo que sou novato no android)


Sds,

Argemiro Neto.

Oscar Marques

unread,
May 25, 2015, 1:13:22 PM5/25/15
to androidb...@googlegroups.com
Podemos tentar proteger o código com esses aplicativos:


Depoimento de um amigo especialista:

===

O Jode nem pensar, pois está sem manutenção desde 2002 (nem vai funcionar com 
JDKs mais recentes).

O Proguard eu uso com frequência e considero que funciona bem. O
KlassMaster parece aplicar algumas técnicas de obfuscação a mais que o
Proguard (string encryption, flow obfuscation), porém isso se deve ao
fato que o Proguard evita aplicar obfuscações que reduzam o desempenho

String encryption pode ser revertido com um piscar de olhos usando as
ferramentas de hoje em dia. Talvez flow obfuscation dificulte um pouco
mais (não cheguei a testar para ver se confunde muito descompiladores
modernos como CFR, Procyon e Fernflower).

===

O Proguard é recomendado:

E outros como:

- DashO
- Dexguard
- DexProtector
- ApkProtect
- Shield4j
- Stringer
- Allitori

E podemos usar técnicas mais complexas como:


Onde fazermos o uso de .so (shared object) mantendo a senha hardcoded e obfuscada no .so
Não temos garantia nenhuma que será impossível de quebrar, apenas vampos manter afastados atacantes inexperientes.

Acabei de enviar este email mais cedo em uma outra lista.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages