Herramientas para analizar APK (app Android)

APK son las siglas de Android Aplication Package. Este tipo de archivo contiene el programa o aplicación que queremos instalar de la misma manera que también el instalador. Por tanto diremos que se trata de un archivo instalable concebido para Android.

Para analizar una aplicación, lo primero es conseguir el archivo .APK (Android) o .IPA (iOS). Para descargar el .APK de la PlayStore se puede utilizar el servicio de APKPure. Solo se debe pasar la URL oficial de la PlayStore. Esta herramienta no hace ningún cambio a la aplicación descargada por lo que hasta la fecha es un servicio confiable.

Este repositorio GIT tiene un listado actualizado de herramientas para analizar aplicaciones de Android (APK), al igual que Android Arsenal.

Online Tools

  • Mobile Security Framework (MobSF): Es LA herramienta, la que recomiendo abiertamente para el análisis dinámico y estático de apps, independiente de la plataforma (Android o iOS), si vas a realizar el análisis de aplicaciones móviles habitualmente esta herramienta no puede faltar en tu arsenal.
  • Quick Android Review Kit o QARK: Es un framework de análisis automatizado de aplicaciones android que tiene poco tiempo de vida, esta enfocado al análisis de aplicaciones android y cuenta con muy buenas funcionalidades.
  • SandDroid (informe de ejemplo): Es una de las mejores herramientas online que podemos tener para el análisis automático de aplicaciones android, realiza análisis dinámico y estático, además de darnos un puntaje de riesgo basado en la información que logra recolectar.
  • Reverse.it (informe de ejemplo): Es una herramienta que también permite el análisis dinámico y estático de aplicaciones android de forma automatizada, es una especialmente útil cuando buscamos comportamientos anómalos dentro de las aplicaciones móviles.
  • Dexter: Para un análisis más detallado podemos usar (previo registro gratuito) esta herramienta, enfocada en el análisis de software que nos permite de forma colaborativa visualizar el funcionamiento de la aplicación con un potente buscador que nos ayudará a encontrar fácilmente funciones interesantes en las cuales centrar nuestra atención.
  • JavaDecompilers: Es una herramienta online que nos permite decompilar aplicaciones online abriendo la posibilidad de examinar su código fuente desde un simple navegador, si con Dexter encontraste funciones interesantes que analizar, con javadecompilers puedes examinar sus entrañas para ver su funcionamiento a nivel de código.

Análisis Estático

Análisis Dinamico

  • Android DBI frameowork
  • Androl4b– A Virtual Machine For Assessing Android applications, Reverse Engineering and Malware Analysis
  • Android Malware Analysis Toolkit: (linux distro) Earlier it use to be an online analyzer
  • Mobile-Security-Framework MobSF: Mobile Security Framework is an intelligent, all-in-one open source mobile application (Android/iOS) automated pen-testing framework capable of performing static, dynamic analysis and web API testing.
  • AppUse – custom build for pentesting
  • Cobradroid – custom image for malware analysis
  • ViaLab Community Edition
  • Droidbox
  • Mercury
  • Drozer
  • Xposed: equivalent of doing Stub based code injection but without any modifications to the binary
  • Inspeckage: Android Package Inspector: dynamic analysis with api hooks, start unexported activities and more. (Xposed Module)
  • Android Hooker: Dynamic Java code instrumentation (requires the Substrate Framework)
  • ProbeDroid: Dynamic Java code instrumentation
  • Android Tamer: Virtual / Live Platform for Android Security Professionals
  • DECAF: Dynamic Executable Code Analysis Framework based on QEMU (DroidScope is now an extension to DECAF)
  • CuckooDroid: Android extension for Cuckoo sandbox
  • Mem: Memory analysis of Android (root required)
  • Crowdroid: unable to find the actual tool
  • AuditdAndroid: android port of auditd, not under active development anymore
  • Android Security Evaluation Framework: not under active development anymore
  • Android Reverse Engineering: ARE (android reverse engineering) not under active development anymore
  • Aurasium: Practical security policy enforcement for Android apps via bytecode rewriting and in-place reference monitor.
  • Android Linux Kernel modules
  • Appie: Appie is a software package that has been pre-configured to function as an Android Pentesting Environment.It is completely portable and can be carried on USB stick or smartphone.This is a one stop answer for all the tools needed in Android Application Security Assessment and an awesome alternative to existing virtual machines.
  • StaDynA: a system supporting security app analysis in the presence of dynamic code update features (dynamic class loading and reflection). This tool combines static and dynamic analysis of Android applications in order to reveal the hidden/updated behavior and extend static analysis results with this information.
  • DroidAnalytics: incomplete
  • Vezir Project: Virtual Machine for Mobile Application Pentesting and Mobile Malware Analysis
  • MARA: Mobile Application Reverse engineering and Analysis Framework
  • NowSecure Lab Automated: Enterprise tool for mobile app security testing both Android and iOS mobile apps. Lab Automated features dynamic and static analysis on real devices in the cloud to return results in minutes.
  • Taintdroid: requires AOSP compilation

Tools

  • AFLogical: Android forensics tool developed by viaForensics
  • Amandroid: Is a static analysis framework for Android apps
  • Android backup extractor: Android backup extractor
  • Android Loadable Kernel Modules
  • Android SDK
  • Android4me: J2ME port of Google’s Android
  • Android-forensics: Open source Android Forensics app and framework
  • Android-random: Collection of extended examples for Android developers
  • Androwarn: Is a tool whose main aim is to detect and warn the user about potential malicious behaviours developped by an Android application
  • ApkAnalyser: Static, virtual analysis tool
  • Apk-extractor: Android Application (.apk) file extractor and Parser for Android Binary XML
  • Apkinspector: Powerful GUI tool for analysts to analyze the Android applications
  • Apk-recovery: Recover main resources from your .apk file
  • Audit tools
  • bunq fuzzer: Program for testing a mobile app by sending it semi-random inputs
  • Canhazaxs: A tool for enumerating the access to entries in the file system of an Android device
  • ConDroid: Symbolic/concolic execution of Android apps
  • DDMS: Dalvik Debug Monitor Server
  • Decaf-platform: DECAF Binary Analysis Platform
  • Device Monitor: Graphical user interface for several Android application debugging and analysis tools
  • Dexinfo: A very rudimentary Android DEX file parser
  • Dexter: Static android application analysis tool
  • Dexterity: Dex manipulation library
  • Dextools: Miscellaenous DEX (Dalvik Executable) tools
  • DidFail: Uses static analysis to detect potential leaks of sensitive information within a set of Android apps
  • Drozer: Comprehensive security audit and attack framework for Android
  • FindBugs: Find Bugs in Java Programs
  • Find Security Bugs: The FindBugs plugin for security audits of Java web applications.
  • FlowDroid: Is a context-, flow-, field-, object-sensitive and lifecycle-aware static taint analysis tool for Android applications
  • Heimdall: Cross-platform open-source tool suite used to flash firmware (aka ROMs) onto Samsung mobile devices
  • Hidex: Demo application where a method named thisishidden() in class MrHyde is hidden from disassemblers but no called by the app
  • Hooker: Automated Dynamic Analysis of Android Applications
  • Maldrolyzer: Simple framework to extract “actionable” data from Android malware (C&Cs, phone numbers etc.)
  • mbfuzzer (Mobile Application Fuzzer via SSL MITM): Mobile Application Fuzzer via SSL MITM
  • PScout: Analyzing the Android Permission Specification
  • Scalpel: A surgical debugging tool to uncover the layers under your app
  • SPARTA: Is building a toolset to verify the security of mobile phone applications
  • Apk Sign: Sign.jar automatically signs an apk with the Android test certificate.
  • SIIS Tools: This page contains a list of software tools created by the SIIS lab
  • Smali: An assembler/disassembler for Android’s dex format
  • Smali-CFGs: Smali Control Flow Graph’s
  • SmaliEx: A wrapper to get dex from oat
  • SmaliSCA: Static Code Analysis for Smali files
  • Soot: Java Optimization Framework
  • STAMP: STatic Analysis of Mobile Programs
  • Systrace: Analyze the performance capturing and displaying execution times of your applications and other Android system processes
  • TaintDroid: Tracking how apps use sensitive information required
  • Traceview: Graphical viewer for execution logs saved by your application
  • Undx: Bytecode translator
  • XML-apk-parser: Print AndroidManifest.xml directly from apk file

Análisis de Vulnerabilidades

  • AndroBugs Framework: Is an efficient Android vulnerability scanner that helps developers or hackers find potential security vulnerabilities in Android applications. No need to install on Windows.
  • Devknox: Autocorrect security issues as you write code
  • JAADAS: Joint Advanced Defect assEsment for android applications
  • Nogotofail
  • QARK: Quick Android Review Kit – This tool is designed to look for several security related Android application vulnerabilities, either in source code or packaged APKs.
  • Quixxi: Free automated vulnerability test.
  • SUPER Android Analyzer: Secure, Unified, Powerful and Extensible Rust Android Analyzer

Crawlers

Fuzzing

Unpackers / Deobfuscators

  • Android Unpacker: Android Unpacker presented at Defcon 22 – Android Hacker Protection Level 0
  • Dehoser: Unpacker for the HoseDex2Jar APK Protection which packs the original file inside the dex header
  • Kisskiss: Unpacker for various Android packers/protectors
  • Simplify: Generic Android Deobfuscator
  • ClassNameDeobfuscator: Simple script to parse through the .smali files produced by apktool and extract the .source annotation lines.

Packers / Obfuscators

  • Allatori
  • APKfuscator: A generic DEX file obfuscator and munger
  • APKProtect
  • Bangcle
  • DexGuard: Optimizer and obfuscator for Android
  • HoseDex2Jar: Adds some instructions to the classes.dex file that Dex2Jar can not process
  • ProGuard: Shrinks, optimizes, and obfuscates the code by removing unused code and renaming classes, fields, and methods with semantically obscure names

Reverse Engineering

Network

Toolkits

Frameworks

Sandboxes


Origen de los datos / cita

https://www.hacking.land/2017/03/herramientas-para-analizar-apk-app.html


 

Códigos de estado de respuesta HTTP

Los códigos de estado de respuesta HTTP indican si se ha completado satisfactoriamente una solicitud HTTP específica. Las respuestas se agrupan en cinco clases:

  1. Respuestas informativas (100199),
  2. Respuestas satisfactorias (200299),
  3. Redirecciones (300399),
  4. Errores de los clientes (400499),
  5. y errores de los servidores (500599).

Los códigos de estado se definen en la sección 10 deRFC 2616. Puedes obtener las especificaciones actualizadas en RFC 7231.

Respuestas informativas

100 Continue
Esta respuesta provisional indica que todo hasta ahora está bien y que el cliente debe continuar con la solicitud o ignorarla si ya está terminada.
101 Switching Protocol
Este código se envía en respuesta a un encabezado de solicitud Upgrade (en-US) por el cliente e indica que el servidor acepta el cambio de protocolo propuesto por el agente de usuario.
102 Processing (en-US) (WebDAV (en-US))
Este código indica que el servidor ha recibido la solicitud y aún se encuentra procesandola, por lo que no hay respuesta disponible.
103 Early Hints (en-US)
Este código de estado está pensado principalmente para ser usado con el encabezado Link, permitiendo que el agente de usuario empiece a pre-cargar (en-US) recursos mientras el servidor prepara una respuesta.

Respuestas satisfactorias

  • GET: El recurso se ha obtenido y se transmite en el cuerpo del mensaje.
  • HEAD: Los encabezados de entidad están en el cuerpo del mensaje.
  • PUT o POST: El recurso que describe el resultado de la acción se transmite en el cuerpo del mensaje.
  • TRACE: El cuerpo del mensaje contiene el mensaje de solicitud recibido por el servidor.
200 OK
La solicitud ha tenido éxito. El significado de un éxito varía dependiendo del método HTTP:
201 Created
La solicitud ha tenido éxito y se ha creado un nuevo recurso como resultado de ello. Ésta es típicamente la respuesta enviada después de una petición PUT.
202 Accepted
La solicitud se ha recibido, pero aún no se ha actuado. Es una petición “sin compromiso”, lo que significa que no hay manera en HTTP que permite enviar una respuesta asíncrona que indique el resultado del procesamiento de la solicitud. Está pensado para los casos en que otro proceso o servidor maneja la solicitud, o para el procesamiento por lotes.
203 Non-Authoritative Information
La petición se ha completado con éxito, pero su contenido no se ha obtenido de la fuente originalmente solicitada, sino que se recoge de una copia local o de un tercero. Excepto esta condición, se debe preferir una respuesta de 200 OK en lugar de esta respuesta.
204 No Content (en-US)
La petición se ha completado con éxito pero su respuesta no tiene ningún contenido, aunque los encabezados pueden ser útiles. El agente de usuario puede actualizar sus encabezados en caché para este recurso con los nuevos valores.
205 Reset Content (en-US)
La petición se ha completado con éxito, pero su respuesta no tiene contenidos y además, el agente de usuario tiene que inicializar la página desde la que se realizó la petición, este código es útil por ejemplo para páginas con formularios cuyo contenido debe borrarse después de que el usuario lo envíe.
206 Partial Content
La petición servirá parcialmente el contenido solicitado. Esta característica es utilizada por herramientas de descarga como wget para continuar la transferencia de descargas anteriormente interrumpidas, o para dividir una descarga y procesar las partes simultáneamente.
207 Multi-Status (en-US) (WebDAV (en-US))
Una respuesta Multi-Estado transmite información sobre varios recursos en situaciones en las que varios códigos de estado podrían ser apropiados. El cuerpo de la petición es un mensaje XML.
208 Multi-Status (en-US) (WebDAV (en-US))
El listado de elementos DAV ya se notificó previamente, por lo que no se van a volver a listar.
226 IM Used (en-US) (HTTP Delta encoding)
El servidor ha cumplido una petición GET para el recurso y la respuesta es una representación del resultado de una o más manipulaciones de instancia aplicadas a la instancia actual.

Redirecciones

300 Multiple Choice (en-US)
Esta solicitud tiene más de una posible respuesta. User-Agent o el usuario debe escoger uno de ellos. No hay forma estandarizada de seleccionar una de las respuestas.
301 Moved Permanently (en-US)
Este código de respuesta significa que la URI del recurso solicitado ha sido cambiado. Probablemente una nueva URI sea devuelta en la respuesta.
302 Found
Este código de respuesta significa que el recurso de la URI solicitada ha sido cambiado temporalmente. Nuevos cambios en la URI serán agregados en el futuro. Por lo tanto, la misma URI debe ser usada por el cliente en futuras solicitudes.
303 See Other (en-US)
El servidor envía esta respuesta para dirigir al cliente a un nuevo recurso solicitado a otra dirección usando una petición GET.
304 Not Modified
Esta es usada para propósitos de “caché”. Le indica al cliente que la respuesta no ha sido modificada. Entonces, el cliente puede continuar usando la misma versión almacenada en su caché.
305 Use Proxy Obsoleto
Fue definida en una versión previa de la especificación del protocolo HTTP para indicar que una respuesta solicitada debe ser accedida desde un proxy. Ha quedado obsoleta debido a preocupaciones de seguridad correspondientes a la configuración de un proxy.
306 unused
Este código de respuesta ya no es usado más. Actualmente se encuentra reservado. Fue usado en previas versiones de la especificación HTTP1.1.
307 Temporary Redirect (en-US)
El servidor envía esta respuesta para dirigir al cliente a obtener el recurso solicitado a otra URI con el mismo método que se usó la petición anterior. Tiene la misma semántica que el código de respuesta HTTP 302 Found, con la excepción de que el agente usuario no debe cambiar el método HTTP usado: si un POST fue usado en la primera petición, otro POST debe ser usado en la segunda petición.
308 Permanent Redirect (en-US)
Significa que el recurso ahora se encuentra permanentemente en otra URI, especificada por la respuesta de encabezado HTTP Location:. Tiene la misma semántica que el código de respuesta HTTP 301 Moved Permanently, con la excepción de que el agente usuario no debe cambiar el método HTTP usado: si un POST fue usado en la primera petición, otro POST debe ser usado en la segunda petición.

Errores de cliente

400 Bad Request
Esta respuesta significa que el servidor no pudo interpretar la solicitud dada una sintaxis inválida.
401 Unauthorized
Es necesario autenticar para obtener la respuesta solicitada. Esta es similar a 403, pero en este caso, la autenticación es posible.
402 Payment Required
Este código de respuesta está reservado para futuros usos. El objetivo inicial de crear este código fue para ser utilizado en sistemas digitales de pagos. Sin embargo, no está siendo usado actualmente.
403 Forbidden
El cliente no posee los permisos necesarios para cierto contenido, por lo que el servidor está rechazando otorgar una respuesta apropiada.
404 Not Found
El servidor no pudo encontrar el contenido solicitado. Este código de respuesta es uno de los más famosos dada su alta ocurrencia en la web.
405 Method Not Allowed
El método solicitado es conocido por el servidor pero ha sido deshabilitado y no puede ser utilizado. Los dos métodos obligatorios, GET y HEAD, nunca deben ser deshabilitados y no deberían retornar este código de error.
406 Not Acceptable (en-US)
Esta respuesta es enviada cuando el servidor, después de aplicar una negociación de contenido servidor-impulsado (en-US), no encuentra ningún contenido seguido por la criteria dada por el usuario.
407 Proxy Authentication Required (en-US)
Esto es similar al código 401, pero la autenticación debe estar hecha a partir de un proxy.
408 Request Timeout
Esta respuesta es enviada en una conexión inactiva en algunos servidores, incluso sin alguna petición previa por el cliente. Significa que el servidor quiere desconectar esta conexión sin usar. Esta respuesta es muy usada desde algunos navegadores, como Chrome, Firefox 27+, o IE9, usa mecanismos de pre-conexión HTTP para acelerar la navegación. También hay que tener en cuenta que algunos servidores simplemente desconecta la conexión sin enviar este mensaje.
409 Conflict (en-US)
Esta respuesta puede ser enviada cuando una petición tiene conflicto con el estado actual del servidor.
410 Gone (en-US)
Esta respuesta puede ser enviada cuando el contenido solicitado ha sido borrado del servidor.
411 Length Required (en-US)
El servidor rechaza la petición porque el campo de encabezado Content-Length no esta definido y el servidor lo requiere.
412 Precondition Failed (en-US)
El cliente ha indicado pre-condiciones en sus encabezados la cual el servidor no cumple.
413 Payload Too Large
La entidad de petición es más larga que los límites definidos por el servidor; el servidor puede cerrar la conexión o retornar un campo de encabezado Retry-After.
414 URI Too Long (en-US)
La URI solicitada por el cliente es más larga de lo que el servidor está dispuesto a interpretar.
415 Unsupported Media Type (en-US)
El formato multimedia de los datos solicitados no está soportado por el servidor, por lo cual el servidor rechaza la solicitud.
416 Requested Range Not Satisfiable (en-US)
El rango especificado por el campo de encabezado Range en la solicitud no cumple; es posible que el rango está fuera del tamaño de los datos objetivo del URI.
417 Expectation Failed (en-US)
Significa que la expectativa indicada por el campo de encabezado Expect solicitada no puede ser cumplida por el servidor.
418 I'm a teapot
El servidor se rehúsa a intentar hacer café con una tetera.
421 Misdirected Request (en-US)
La petición fue dirigida a un servidor que no es capaz de producir una respuesta. Esto puede ser enviado por un servidor que no está configurado para producir respuestas por la combinación del esquema y la autoridad que están incluidos en la URI solicitada
422 Unprocessable Entity (en-US) (WebDAV (en-US))
La petición estaba bien formada pero no se pudo seguir debido a errores de semántica.
423 Locked (en-US) (WebDAV (en-US))
El recurso que está siendo accedido está bloqueado.
424 Failed Dependency (en-US) (WebDAV (en-US))
La petición falló debido a una falla de una petición previa.
426 Upgrade Required (en-US)
El servidor se rehúsa a aplicar la solicitud usando el protocolo actual pero puede estar dispuesto a hacerlo después que el cliente se actualice a un protocolo diferente. El servidor envía un encabezado Upgrade en una respuesta para indicar los protocolos requeridos.
428 Precondition Required (en-US)
El servidor origen requiere que la solicitud sea condicional. Tiene la intención de prevenir problemas de ‘actualización perdida’, donde un cliente OBTIENE un estado del recurso, lo modifica, y lo PONE devuelta al servidor, cuando mientras un tercero ha modificado el estado del servidor, llevando a un conflicto.
429 Too Many Requests (en-US)
El usuario ha enviado demasiadas solicitudes en un periodo de tiempo dado.
431 Request Header Fields Too Large (en-US)
El servidor no está dispuesto a procesar la solicitud porque los campos de encabezado son demasiado largos. La solicitud PUEDE volver a subirse después de reducir el tamaño de los campos de encabezado solicitados.
El usuario solicita un recurso ilegal, como alguna página web censurada por algún gobierno.

Errores de servidor

500 Internal Server Error
El servidor ha encontrado una situación que no sabe cómo manejarla.
501 Not Implemented (en-US)
El método solicitado no está soportado por el servidor y no puede ser manejado. Los únicos métodos que los servidores requieren soporte (y por lo tanto no deben retornar este código) son GET y HEAD.
502 Bad Gateway
Esta respuesta de error significa que el servidor, mientras trabaja como una puerta de enlace para obtener una respuesta necesaria para manejar la petición, obtuvo una respuesta inválida.
503 Service Unavailable
El servidor no está listo para manejar la petición. Causas comunes puede ser que el servidor está caído por mantenimiento o está sobrecargado. Hay que tomar en cuenta que junto con esta respuesta, una página usuario-amigable explicando el problema debe ser enviada. Estas respuestas deben ser usadas para condiciones temporales y el encabezado HTTP Retry-After: debería, si es posible, contener el tiempo estimado antes de la recuperación del servicio. El webmaster debe también cuidar los encabezados relacionados al caché que son enviados junto a esta respuesta, ya que estas respuestas de condición temporal deben usualmente no estar en el caché.
504 Gateway Timeout
Esta respuesta de error es dada cuando el servidor está actuando como una puerta de enlace y no puede obtener una respuesta a tiempo.
505 HTTP Version Not Supported
La versión de HTTP usada en la petición no está soportada por el servidor.
506 Variant Also Negotiates (en-US)
El servidor tiene un error de configuración interna: negociación de contenido transparente para la petición resulta en una referencia circular.
507 Insufficient Storage (en-US)
El servidor tiene un error de configuración interna: la variable de recurso escogida está configurada para acoplar la negociación de contenido transparente misma, y no es por lo tanto un punto final adecuado para el proceso de negociación.
508 Loop Detected (en-US) (WebDAV (en-US))
El servidor detectó un ciclo infinito mientras procesaba la solicitud.
510 Not Extended (en-US)
Extensiones adicionales para la solicitud son requeridas para que el servidor las cumpla.
511 Network Authentication Required (en-US)
El código de estado 511 indica que el cliente necesita autenticar para obtener acceso a la red.

Ver también