Pró-Reitoria de Pós-Graduação e Pesquisa Lato Sensu em Perícia Digital Trabalho de Conclusão de Curso ENGENHARIA REVERSA DE MALWARES PARA A PLATAFORMA ANDRIOD Autor: Gabriel Miranda Carvalho Orientador: Prof. Esp. Américo Munhoz Jr. Brasília - DF 2014 GABRIEL MIRANDA CARVALHO ENGENHARIA REVERSA DE MALWARES PARA A PLATAFORMA ANDROID Artigo apresentado ao curso de pósgraduação em Perícia Digital da Universidade Católica de Brasília, como requisito para obtenção do Título de Pós Graduado em Perícia Digital. Orientador: Prof. Esp. Américo Munhoz Jr. Brasília 2014 Artigo de autoria de Gabriel Miranda Carvalho, intitulado “ENGENHARIA REVERSA DE MALWARES PARA A PLATAFORMA ANDROID”, apresentado como requisito parcial para obtenção do grau de Pós Graduado em Perícia Digital da Universidade Católica de Brasília, em 30 de Maio de 2014, defendido e aprovado, pela banca examinadora abaixo assinada: __________________________________________ Professor. Esp. Américo Munhoz Jr. Orientador Curso Lato Sensu em Perícia Digital - UCB _________________________________________ Professor. Msc. Paulo Roberto Corrêa Leão Examinador Curso Lato Sensu em Perícia Digital - UCB Brasília 2014 À minha noiva pela compreensão e paciência, à minha familia que sempre me apoiou e a meus amigos que contribuíram para meu desenvolvimento profissional. 5 ENGENHARIA REVERSA DE MALWARES PARA A PLATAFORMA ANDROID GABRIEL MIRANDA CARVALHO Resumo: Esta pesquisa empírica abordou por meio de uma resenha explicativa a análise estática de Malwares para a plataforma Android através da engenharia reversa feita por softwares livres. Devido ao seu crescente número de usuários, a plataforma móvel se tornou um grande alvo de aplicações maliciosas, pois, nesses dispositivos são armazenados uma quantidade significativa informações sensíveis sobre o usuário. Daí surge a importância da análise desses tipos Malwares e de se ter ferramentas eficazes que possibilitem tal análise. Nesse trabalho foram usados os softwares Apktool, DEX2JAR e JD-GUI para realizar a engenharia reversa das aplicações. A pesquisa desenvolvida demostrou a eficácia de tais ferramentas livres para a análise de Malwares Android. Palavras-chave: Engenharia Reversa. Malware. Android. Kernel Linux. 1. INTRODUÇÃO Por muito tempo as ameaças a telefones móveis se restringiram a ataques de SMS e ligações telefônicas, mas nos dias de hoje, um smartphone é capaz de fazer muito mais do que isso. É cada vez mais comum as pessoas acessarem seus emails, navegarem na internet, acessarem suas contas em redes sociais e até mesmo acessarem suas contas bancárias pelo simples toque na tela de seus smartphones. Com esse aumento nas funcionalidades dos telefones, também aumentou a quantidade de ameaças que tentam tirar proveito ilícito dessas funcionalidades. Hoje um grande foco dos Malwares são os dispositivos móveis, pois são nesses equipamentos em que as pessoas mais gastam tempo acessando a Internet. Segundo um estudo da Kaspersky Lab sobre o cenário de ameaças a dispositivos móveis, foi detectado 100.000 novos programas maliciosos em 2013 onde 98,1% desses Malwares são destinados ao sistema Android (PINTO, 2014). O Android, ao contrário do que a maioria das pessoas pensa, é muito mais do que um sistema operacional para dispositivos móveis. Ele é uma plataforma de desenvolvimento, constituído de vários softwares. O Android é baseado no Kernel Linux, fazendo com que ele englobe um vasto conjunto de funcionalidades oferecido pelo Kernel. É surpreendente o crescimento dessa plataforma. A cada ano o Android vem crescendo em números, chegando a dominar 90% do mercado brasileiro (VENTURA, 2014). Estima-se que em 2014, o Android chegará a 1,1 bilhão de usuários, um crescimento de 26% referente ao ano de 2013 (EXAME, 2014). No primeiro quadrimestre do ano de 2013, as vendas de smartphones com Android cresceram 79,5%. Só nesse período, foram vendidos 162 milhões de aparelhos com o sistema da Google (TANJI, 2014). Consequentemente acarretou um aumento de softwares maliciosos para estes dispositivos. 1.1 JUSTIFICATIVA 6 Tendo em vista o aumento de softwares maliciosos para dispositivos móveis, o presente artigo discorreu sobre a análise estática de Malwares para Android utilizando ferramentas livres disponíveis para todos usuários, as quais foram o Apktool, DEX2JAR e JD-GUI. Ao se utilizar tais ferramentas, fica evidente que qualquer usuário poderá efetuar os procedimentos de engenharia reversa e tirar suas próprias conclusões sobre a licitude de uma aplicação. A necessidade da análise desses tipos de Malwares, se deve ao fato de que os usuários não conhecem a fundo os riscos de se instalar aplicativos de procedências duvidosas em seus dispositivos. 1.2 DELIMITAÇÃO DO TEMA O tema se delimita em avaliar a eficácia de ferramentas livres que se propõem em efetuar engenharia reversa em aplicações Android, onde o código resultante possa auxiliar na análise desses softwares. 1.3 CONTEXTUALIZAÇÃO DO PROBLEMA E O PROBLEMA Devido a facilidade de acesso à informação, à comunicação e a comodidade, grande parte da população possui dispositivos móveis (celulares, smartphones, tablets, palmtops) contendo inúmeras informações sobre seus usuários, como agenda de contatos, mensagens, e-mails e até mesmo dados bancários. O que tornam esses dispositivos grandes alvos de aplicações maliciosas. Porém, os usuários não se dão conta dos riscos que correm caso alguém mal intencionado tome posse de suas informações pessoais. Dessa forma, não fazem um julgamento prévio da licitude dos aplicativos que instalam em seus dispositivos. Sendo assim, é possível garantir a eficácia de ferramentas livres no processo de engenharia reversa para análise de Malwares em aplicações para Android? 1.4 PRESSUPOSTOS DA PESQUISA Este trabalho valeu-se do pressuposto de que é possível identificar uma atitude ilícita de um software para Android através da análise de seu código fonte utilizando ferramentas livres no processo de engenharia reversa. 1.5 PROPÓSITO 7 Mostrar a eficácia de ferramentas livres no processo de análise de Malwares, através de engenharia reversa, em aplicações para Android, demonstrando como uma aplicação ilícita pode tirar proveito de informações dos usuários sem que os mesmos percebam. 1.5.1 Objetivo Geral Comprovar a eficácia da engenharia reversa feita com ferramentas livres para a análise estática de Malwares Android. 1.5.2 Objetivos específicos Para alcanças o objetivo geral foi necessário: a) obter aplicativos para Android infectados com códigos maliciosos; b) utilizar as ferramentas Apktool, DEX2JAR e JD-GUI para a realização da engenharia reversa nas aplicações; e c) analisar os códigos fontes fornecidos pelas ferramentas a fim de detectar os trechos contendo códigos maliciosos. 1.6 ORGANIZAÇÃO DO TRABALHO Este trabalho foi dividido basicamente em três tópicos: Introdução, Desenvolvimento e Conclusão. Na Introdução está descrito o cenário atual do uso de smartphones e tablets com Android, o crescimento de Malwares para essa plataforma e algumas características gerais. No desenvolvimento foi abordado as características do Android, o esquema de segurança oferecido pelo Kernel Linux e pela plataforma Android, análise estática de Malwares através de engenharia reversa bem como matérias, metodologia, resultado da pesquisa, discussões e análise dos resultados. Finalizou-se este trabalho com as considerações finais e trabalhos futuros. 2 REFERENCIAL TEÓRICO Para entender como os Malwares agem na plataforma Android, deve-se ter em mente como funciona a arquitetura do sistema e seu modelo de segurança contra possíveis ameaças. 2.1 ARQUITETURA ANDROID 8 A arquitetura Android é organizada em camadas, onde cada camada possui suas funções muito bem definidas e provê serviços específicos para a camada acima, ver Figura 1. Na camada mais baixa o Android usa o Kernel Linux, na camada acima estão as Bibliotecas Nativas e o Android Runtime (que é constituído pela máquina virtual Dalvik e as Core Libraries), na próxima camada está o Framework de Aplicação do Android e na última camada as aplicações. (DUBEY, 2013). Figura 1: Arquitetura Android Fonte: ELINUX (2014) 2.1.1 Kernel Linux O Kernel Linux encontrado no Android não é o Kernel tradicional usado nas várias distribuições GNU/Linux, mas sim um Kernel modificado para as necessidades dos sistemas embarcados. Logo, não possui todas as funcionalidades do Kernel tradicional. Através de sua base sólida, o Linux oferece muitos benefícios ao Android. Ele provê abstração de hardware, segurança, gerência de memória e de processos. Isso faz com que o Android possa ser utilizado em vários dispositivos diferentes de diversos fornecedores. (DUBEY, 2013). 9 2.1.2 Bibliotecas Nativas e Android Runtime O Android possui um conjunto de bibliotecas escritas em C e C++ que são utilizadas por diversos de seus componentes, essas bibliotecas são chamadas de Bibliotecas Nativas. Os desenvolvedores de aplicações têm acesso a essas bibliotecas através do Framework de Aplicação (DUBEY, 2013). Algumas dessas bibliotecas são: SQLite (provê um banco de dados relacional), SSL (provê suporte a funções de criptografia) e WebKit (Motor de renderização para os Browsers do Android). O Android Runtime é dividido em duas partes: A máquina virtual Dalvik e as Core Libraries. A máquina virtual Dalvik é a implementação de uma máquina virtual Java para sistemas embarcados, e ela executa aplicações no formato “dex”. As aplicações Android são escritas em Java e compiladas em arquivos Java class. Mas o Android não executa esses arquivos, então eles são recompilados para o formato “dex” (DUBEY, 2013). As Core Libraries provêm funcionalidades disponíveis em Java, exemplo: SQLite e OpenGL. 2.1.3 Framework de Aplicação O framework de aplicação provê um conjunto vasto de classes para que os desenvolvedores possam construir suas aplicações Android. Essa camada também disponibiliza os serviços chamados Android Managers, sendo os mais importantes o Activity Manager (gerencia o ciclo de vida de uma aplicação), Resource Manager (gerencia o acesso a recursos), Location Manager (provê suporte a atualizações de localidade) e Notification Manager (gerencia a notificação de eventos para uma aplicação como o recebimento de e-mail ou SMS, por exemplo) (DUBEY, 2013). 2.1.4 Aplicação A camada de aplicação se refere ao desenvolvimento e projetos das aplicações Android. As quais podem ser disponibilizadas para download na loja oficial da Google, a Google Play. Existem várias outras lojas virtuais que disponibilizam aplicações Android. 2.2 INICIALIZAÇÃO DO ANDROID E DE SUAS APLICAÇÕES Assim como nos sistemas GNU/Linux, a inicialização do sistema operacional começa com o boot loader carregando o Kernel Linux, que por sua vez inicia o processo init. Todos os outros processos são filhos desse processo init. Então o processo init começa a inicializar algumas deamons. Finalizado a inicialização desses deamons, o processo init inicializa um processo chamado "zigoto". Esse processo zigoto inicializa a primeira máquina virtual Dalvik, pré-carrega as Core Libraries usadas pelas aplicações e fica na escuta para futuras requisições de 10 inicialização de novas máquinas virtuais. Todas as aplicações que executam no Android são processos Linux e cada aplicação executa em um processo diferente. Logo, cada aplicação é executada em sua própria instancia da máquina virtual Dalvik. Após o processo zigoto inicializar, ele faz um fork de si mesmo e inicializa todos os principais serviços Android como o Activity Manager. Cada aplicação inicializada é resultante de um fork do processo zigoto e a criação de uma nova máquina virtual Dalvik (DUBEY, 2013). 2.3 MODELO DE SEGURANÇA A implementação de segurança no Android pode ser percebida em dois níveis diferentes: Na camada do Kernel Linux e na camada de Aplicação. 2.3.1 Segurança através do Kernel Linux Cada nova aplicação que é instalada no Android recebe um identificador único de usuário (UID), um identificador único de grupo (GID) e possui seu próprio conjunto de dados e arquivos que estão associados aos seus UID e GID. O acesso a esses dados e arquivos é permitido apenas para a aplicação que possui o UID e GID correspondentes ou pelo super usuário (root). Caso uma aplicação queira compartilhar informações com outras aplicações, ela deve implementar um mecanismo de Inter Process Comunication (IPC). Dessa forma, o Linux cria sandboxes diferentes para cada aplicação, evitando que outras aplicações acessem os dados de outras (DUBEY, 2013). 2.3.2 Segurança através do Manifesto de Permissão de Aplicações Uma aplicação Android não possui permissão para executar operações como acesso a Internet, envio e recebimento de SMS, ligações telefônicas. Para que ela possa fazer esse tipo de operação, ela precisa solicitar especificamente essas permissões ao usuário. Essas permissões são declaradas em um arquivo de configuração (AndroidManifest.xml) de cada aplicação. Quando uma aplicação é instalada, o Android informa ao usuário quais permissões a aplicação está requerendo, e o usuário escolhe se aprova ou se reprova o pedido. O Usuário pode apenas aprovar ou rejeitar todas as permissões, não existe a possibilidade de rejeitar algumas e aprovar outras. Caso o pedido seja rejeitado, a aplicação não é instalada. Mas caso seja aprovado, a única forma de retirar tais permissões é desinstalando a aplicação (DUBEY, 2013). 11 2.4 MALWARES Segundo Tectherms (2014), Malware é uma abreviação de "malicious software" (software malicioso) que se refere a programas de computador projetados para danificar ou fazer outras ações indesejadas em um sistema de computador. Os Malwares podem ser classificados em diversos tipos como: Trojans, Exploits, Downloaders, Lauchers, Rootkits, Worms e Virus (SIKORSKY, 2012). 2.4.2 Análise de Malwares O propósito da análise de Malwares é determinar exatamente o que um software suspeito faz. Na maioria das vezes, apenas o executável do software (ilegível para humanos) estará disponível para análise, sendo necessário a utilização de ferramentas e técnicas para a análise (SIKORSKY, 2012). Existem duas práticas fundamentais para análise de Malware: a análise estática (envolve examinar o Malware sem executá-lo) e a análise dinâmica (examina o Malwares em execução) (SIKORSKY, 2012). Em uma análise estática avançada, é necessário fazer a engenharia reversa do Malware, ou seja, obter o código fonte do software a partir do executável através de uma ferramenta de disassembler. Já em uma análise dinâmica avançada, utilizase um depurador para examinar o estado interno do programa malicioso. Essas duas técnicas são utilizadas em conjunto para uma análise aprofundada (SIKORSKY, 2012). 2.6 APKTOOL, DEX2JAR e JD-GUI O Apktools é uma ferramenta para engenharia reversa de aplicativos Android. Ele decompila o executável do aplicativo para código “smali” (código assembler usado pela máquina virtual Dalvik) e decriptografa outros arquivos do aplicativo. O Apktool é uma ferramenta de código aberto e está disponível na licença Apache License 2.0 (APKTOOL, 2014). A ferramenta DEX2JAR também é uma ferramenta de código aberto disponível na licença Apache License 2.0. Ela decodifica o arquivo “dex” (tipo de arquivo executado pela máquina virtual Dalvik) contido dentro do arquivo “apk” para um arquivo “jar” (código Java compilado) (DEX2JAR, 2014). O JD-GUI é uma ferramenta gráfica que decompila um arquivo “class” e mostra o código fonte Java. O JD-GUI possui código aberto e é gratuito para fins não comerciais, está disponível na licença GNU GPL v2 (JDGUI, 2014). 12 3 MATERIAIS E METODOLOGIA Esse trabalho foi desenvolvido através de uma pesquisa aplicada com o intuito de realizar a engenharia reversa de aplicações maliciosas para Android a fim de identificar as formas que os Malwares agem no sistema. Utilizou-se para tal fim uma pesquisa bibliográfica a respeito do assunto abordado, bem como o uso prático de análise de Malwares comprovando o fato que foi estudado. 3.1 DESCRIÇÃO DOS PROCEDIMENTOS Foram analisados os Malwares DroidKungFu, iCalendar e Zitmo. Todos foram encontrados no site http://contagiodump.blogspot.com.br/2011/03/take-sampleleave-sample-mobile-malware.html. A máquina utilizada para a análise foi um MacBook Pro com Processador Intel Core i5 2.5GHz, 8GB de Memória RAM e sistema operacional MAC OS X Versão 10.9.3. Foi utilizada a ferramenta Apktools através do comando “apktool d nome_do_malware.apk” para obter o código fonte smali do aplicativo e o arquivo AndroidManifest.xml decriptografado. Para obter o arquivo “dex” da aplicação, foi necessário descompactar o aplicativo. Para isso, foi utilizado o programa Unzip através do comando “unzip nome_do_malware.apk”. O arquivo “dex” é o arquivo que a máquina virtual Dalvik interpreta. Para transformar os arquivos “dex” em arquivos “jar”, foi utilizado a ferramenta DEX2JAR. Através do comando “./d2j-dex2jar.sh classes.dex” obtemos um arquivo “jar” a partir de um arquivo “dex”, note que “classes.dex” é o arquivo “dex” obtido através da ferramenta Unzip. Um arquivo “jar” contém todos os arquivos “class” de uma aplicação. A última etapa da engenharia reversa é abrir o arquivo “jar” com o programa JD-GUI. O JD-GUI é uma ferramenta gráfica que mostra o código fonte Java dos arquivos “class” a partir de um arquivo “jar”. 3.2 RESULTADOS DA PESQUISA Os resultados obtidos através dos passos descritos anteriormente foram os arquivos em código assembler smali, os arquivos AndroidManifest.xml decriptografados mostrando a quais recursos as aplicações maliciosas pedem acesso e os códigos fontes Java. 13 3.3 DISCUSSÕES E ANÁLISE DOS RESULTADOS A análise dos resultados foi feita através do uso das ferramentas livres em três aplicações Android infectadas por diferentes Malwares, o DroidKungFu, iCalendar e Zitmo. 3.3.1 DroidKungFu Para dar uma direção na análise do Malware, foi verificado no arquivo AndroidManifest.xml obtido pelo Apktool, que essa aplicação solicita permissão de acesso aos seguintes recursos: Internet; Read_phone_state; Access_network_state; write_external_storage; access_fine_location; read_logs; access_wifi_state, change_wifi_state. Essas permissões possibilitam a aplicação ter acesso a Internet, permissão de leitura do estado do telefone, escrever no cartão de armazenamento externo, acesso a localização do dispositivo, leitura de logs, alteração do estado do wi-fi, entre outras. Analisando o código fonte Java obtido, foi encontrado trechos de códigos suspeitos. O trecho de código encontrado na Figura 2, mostra o Malware tendo acesso ao número de IMEI do telefone, bem como o modelo e a versão do Android utilizada. As Figuras 3 e 4 mostram em outra parte do código, duas frases escritas em chinês utilizadas para mostrar ao usuário caso o Malware não consiga adquirir acesso de superusuário ao sistema ou não consiga habilitar o modo desenvolvedor do dispositivo. As frases traduzidas para o português através do site translate.google.com significam “O software requer privilégios de root para utilizar todas as funcionalidades, por favor, ser autorizado por um programa de gerenciamento de licença!” e “A necessidade de abrir o software de depuração USB, a fim de utilizar todas as funcionalidades, certifique-se de recursos de depuração USB foram selecionados!”. 14 Figura 2: Trecho de Código DriodKungFu Roubo de Informações Figura 3: Trecho de Código DroidKungFu Frase Root em Chinês Figura 4: Trecho de Código DroidKungFu Frase USB em Chinês 3.3.2 iCalendar Analisando o arquivo AndroidManifest.xml do Malware iCalendar, foi verificado que a aplicação solicita acesso aos seguintes recursos: INTERNET, ACCESS_COARSE_LOCATION, RESTART_PACKAGES, RECEIVE_SMS, SEND_SMS, SET_WALLPAPER. Essa permissões possibilitam o aplicativo a acessar a Internet, mudar o papel de parede do dispositivo, enviar e receber mensagens de texto. Ao verificar o código fonte Java, foi encontrado um trecho de código onde a aplicação envia uma mensagem de texto para o número 1066185829 sem o consentimento do usuário com a mensagem “921X1”, conforme Figura 5. Em outro trecho de código, conforme Figura 6. Verifica-se que se o aparelho receber alguma mensagem vinda dos números 10086, 10000, 10010, 1066185829, 1066133 ou 106601412004, o aplicativo não permite que o usuário seja informado da nova mensagem. 15 Figura 5: Trecho de Código iCalendar Envio de SMS Figura 6: Trecho de Código iCalendar Abortar Recebimento SMS 3.3.3 Zitmo No arquivo AndroidManifest.xml desse Malware, foi encontrado a solicitação de acesso aos seguintes recursos: RECEIVE_SMS, INTERNET, READ_PHONE_STATE. Essas permissões possibilitam a aplicação a acessar a Internet, ler o estado do telefone e receber mensagens de texto. Ao verificar o código fonte Java, foi encontrado trechos de códigos malicioso mostrando que trata-se de um Malware que rouba as mensagens de texto do usuário e envia para um servidor remoto. O trecho de código na Figura 7, mostra o Malware filtrando por mensagens de texto. Caso seja encontrada alguma mensagem, ele não permite que usuário seja notificado da nova mensagem e inicia um serviço chamado MainService. O serviço MainService executa algumas operações com as mensagens, incluindo a captura do número de origem da mensagem e o texto, conforme Figura 8. Analisando o arquivo “ServerSession.class” foi possível identificar que as informações das mensagens de texto são enviadas ao servidor remoto "http://softthrifty.com/security.jsp". 16 Figura 7: Trecho de Código Zitmo Filtro de Mensagens Figura 8: Trecho de Código Zitmo Captura de Informações SMS 17 Figura 9: Trecho de Código Smali Gerado pelo JD-GUI 4 CONCLUSÃO Através das informações obtidas na análise dos códigos fontes e arquivos de configuração dos Malwares, pode-se afirmar que o resultado das ferramentas utilizadas para a engenharia reversa foi satisfatório. Mostrando que devido ao esquema de segurança oferecido pelo Android, os Malwares agem através da concessão de permissões dos usuários a recursos importantes dos dispositivos. O Usuário não percebendo que está instalando um aplicativo infectado, concede as permissões solicitadas pelo Malware. A decriptografia do arquivo AndroidManifest.xml pela ferramenta Apktools se mostrou eficaz e muito útil. Pois, com base na análise dos resultados do trabalho, ao verificar primeiramente a quais recursos do sistema a aplicação requer acesso, o analista consegue ter uma orientação inicial do funcionamento da aplicação e de seu propósito. Na análise feita do Malware Zitmo, o arquivo AndroidManifest.xml possuía entradas de poucos recursos onde se destacavam os recursos de acesso a internet e recebimento de mensagens de texto. Com essas informações o analista foca em encontrar trechos de código onde a aplicação utiliza esses recursos de forma ilícita. A conversão dos arquivos “dex” para “jar” pela ferramenta DEX2JAR também mostrou ser eficaz, pois, o arquivo resultante pôde ser aberto pelo software JD-GUI. A decompilação dos arquivos “jar” em código Java pela ferramenta JD-GUI foi de suma importância para a análise dos Malwares. A leitura do código fonte Java é muito mais intuitiva para um programador moderno do que a leitura do código fonte em smali gerado pela aplicação Apktools. Porém, alguns trechos (mínimos) dos 18 códigos não puderam ser decompilados pelo JD-GUI para a linguagem Java, mas o software decompilou para smali e deixou em forma de comentário Java, conforme Figura 9. 4.1 TRABALHOS FUTUROS Como trabalhos futuros, sugere-se realizar um estudo sobre ferramentas livres para análise dinâmica de Malwares Android. 5. RESUMO EM LÍNGUA ESTRANGEIRA REVERSE ENGINEERING OF MALWARES FOR ANDROID PLATFORM GABRIEL MIRANDA CARVALHO Abstract: This study covers static analysis of malware for the Android platform through reverse engineering done by free software. Due to its increasing number of users, the mobile platform has become a major target of malicious applications, because these devices a significant amount sensitive user information are stored. Hence arises the importance of analyzing these types of Malware and have effective tools that enable such analysis. In this work the Apktool, DEX2JAR and JD-GUI software to perform reverse engineering applications were used. Research carried shows the effectiveness of such free to Android malware analysis tools. Keywords: Reverse Engineering. Malware. Android. Kernel Linux. 6. REFERÊNCIAS APKTOOL. android-apktool. Disponível em: <https://code.google.com/p/androidapktool/>. Acesso em: 18 Junho. 2014. DEX2JAR. dex2jar. Disponível em: <https://code.google.com/p/dex2jar/>. Acesso em: 18 Junho. 2014. DUBEY, Abhishek., MISRA, Anmol. Android Security. New York: CRC Press, 2013. ELINUX. Android Architeture. Disponível em: <http://elinux.org/Android_Architecture>. Acesso em: 14 Maio. 2014. 19 EXAME. Mais de 1 bi de dispositivos Android serão vendidos em 2014. Disponível em:< http://exame.abril.com.br/tecnologia/noticias/mais-de-1-bi-dedispositivos-android-serao-vendidos-em-2014>. Acesso em: 14 Maio. 2014. JDGUI. JD-GUI. Disponível em: <http://jd.benow.ca>. Acesso em: 18 Junho. 2014. PINTO, Pedro. Qual a evolução do malware para dispositivos móveis?. Disponível em: <http://pplware.sapo.pt/informacao/qual-a-evolucao-do-malwarepara-dispositivos-moveis/>. Acesso em: 14 Maio. 2014. SIKORSKI, Michael., HONIG, Andrew. Pratical Malware Analysis. San Francisco: No Starch Press, 2012. TANJI, Thiago. Android tem crescimento de 80% nas vendas. Disponível em: <http://exame.abril.com.br/tecnologia/noticias/android-tem-crescimento-de-79-5-nasvendas/>. Acesso em: 14 Maio. 2014. TECHTERMS. Malware. Disponível em: <http://www.techterms.com/definition/malware>. Acesso em: 14 Maio. 2014. VENTURA, Felipe. No Brasil, smartphones Android dominam 90% do mercado e Windows Phone tenta ultrapassar iOS. Disponível em: <http://gizmodo.uol.com.br/smartphones-brasil-2q2013/>. Acesso em: 14 Maio. 2014.