Hay diferentes tipos de técnicas de ocultación, algunas muy fáciles de aplicar, otra más complejas y difíciles de implementar. Según John Frey un profesor de hacking ético de empresa de seguridad de la información, lógicamente para aplicar las técnicas fáciles, se requiere menos tiempo y habilidades, pero te permitirá la obtención una baja caída en la tasa de detección, en cambio los más complejos necesitan más tiempo y habilidades, pero permiten alcanzar mayores caídas en la tasa de detección. Todas estas técnicas se utilizan para ocultar el código y textos del Android malware para evitar la detección de los antivirus.

Identifier Renaming

Esta técnica intenta ocultar la aplicación, cambiar los nombres de los métodos, las clases y los identificadores de campo en la aplicación.

Call Indirections

Esta técnica modifica las llamadas dentro de la aplicación. Si tenemos una llamada al método A, esta técnica lo sustituye por una nueva llamada al método B que cuando se invoca a hacer la llamada al método original A.

Code Reordering

Consiste en modificar el orden de las instrucciones en el código. Por lo general, el “Goto”, es añadido en el código para mantener la secuencia original de las instrucciones durante la ejecución explica el profesor de hacking ético de una empresa de seguridad de la información.

Junk Code Insertion

Esta técnica consiste en añadir en el código de algunas instrucciones que se ejecutarán, pero sin cambiar la semántica de la aplicación. Las herramientas de detección que inspeccionan la secuencia de las instrucciones del software malicioso pueden ser evadidas por la estrategia de inserción de código no deseado. El código no deseado añadido al software malicioso puede ser una secuencia de nop simples o complejos ciclos de instrucciones explica John Frey, el profesor de hacking ético de una empresa de seguridad de la información .

Encapsulate Field

Esta técnica consiste en la adición de un campo específico de setter y un método getter. El primero se utiliza para establecer el valor del campo y el segundo para recuperar ese valor. Así que no hay acceso directo más para el campo seleccionado, sustituido por los métodos relativos. De esta manera la utilización de un campo específico puede ser ocultada.
Encrypting Payloads – Exploits

Código nativo se utiliza generalmente para manipular la memoria. Este tipo de código es almacenado en código binario nativo. Muy a menudo código nativo es utilizado por autores de software maliciosos debido a la falta de mecanismos de seguridad en Android. Un malware o utilizando eso puede evadir el entorno sandbox hecho por la política de permisos de Android. Según curso de hacking ético, por lo general, en malware, código nativo se almacena encriptado y se descifra solamente durante la ejecución.

Composite Transformations

Todas las técnicas de ocultación vistas antes se pueden combinar con otras para mejorar el nivel ocultación del código acuerdo con los expertos de empresa de seguridad de la información. Por lo general, las estrategias que no son muy eficaces cuando se usan solas, si se usan en combinación pueden dar buenos resultados en ocultación.

Reflection

Una clase puede inspeccionarse a sí misma utilizando esta técnica. Se usa para obtener información sobre las clases, métodos, etc. La API del Java que soporta la reflexión es Java.Reflect. Cada instrucción de invocación está sustituido con otras instrucciones de código de bytes que utilizan llamadas reflectantes para realizar las mismas operaciones de la llamada original. En particular se utilizan tres llamadas. El forName, que encuentra una clase con un nombre preciso. El getMethod; que devuelve el sistema que pertenece a la llamada forName. La tercera es la invokeque ejecuta el procedimiento deseado. Entonces la reflexión añade un código innecesario a la original con el fin de ocultar la aplicación. Podrían aprender más sobre reflection en el curso de hacking ético.
Bytecode Encryption

Esta técnica encripta algunas piezas de código para evadir las herramientas de anti malware basado en el análisis estático. En particular, el código malicioso se almacena encriptado en la aplicación. Por esta razón es imposible para el análisis estático detectar el código malicioso. El código malicioso se almacena encriptado y empacado. Durante la ejecución de la rutina de descifrado se llama y se descifra el código malicioso y lo carga a través de un cargador de clases establecido por el autor del malware.
String Encryption

Encripta los textos de una aplicación utilizando una operación XOR. El texto original se descompone durante la ejecución proporcionando el encriptado a la rutina de descifrado.

Class Encryption

Se utiliza para cifrar todas las clases de la aplicación. Comprime las clases encriptadas y las almacenar en la aplicación. Cuando la aplicación maliciosa se ejecuta las clases encriptadas qe necesitan ser descomprimidas se descifradas y después se cargan en la memoria. Por lo general, con el metodoClassLoader(), getDeclaredConstructor (), y newInstance () una nueva instancia de la clase se genera y sus campos y métodos se invocan a través de la reflexión.

Entry Point Classes, Archivos XML, Ocultacion de Assests

Esta técnica consiste en ocultar el ingreso a las carpetas y archivos entry point classes xml usando una encriptación. El objetivo es evitar la detección de algunas herramientas anti-malware que inspeccionan estos archivos.

Estas son algunas de las técnicas de evasión antivirus para dispositivos Android. Usted puede aprender más acerca de estas técnicas durante el hacking ético de empresa de seguridad de la información.

Fuente: http://noticiasseguridad.com/malware-virus/tecnicas-de-ocultacion-de-malware-en-android-para-evitar-la-deteccion-antivirus/