
{"id":1250,"date":"2011-02-14T08:21:45","date_gmt":"2011-02-14T11:21:45","guid":{"rendered":"http:\/\/www.talsoft.com.ar\/?p=1250"},"modified":"2011-02-14T08:21:45","modified_gmt":"2011-02-14T11:21:45","slug":"reversing-malware-android-geinimi-a-en-android","status":"publish","type":"post","link":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/","title":{"rendered":"Reversing Malware Android.Geinimi.A en Android"},"content":{"rendered":"<div><strong>Introducci\u00f3n<\/strong><\/div>\n<div>A principios de a\u00f1o saltaba a la  palestra la noticia de la aparici\u00f3n de un nuevo malware procedente de  China para dispositivos Android. Geinimi o Gemini (<em>as\u00ed han decidido llamarlo los eruditos<\/em>) ha sido considerado por varias fuentes como el m\u00e1s potente y da\u00f1ino que se conoce hasta la fecha.<\/div>\n<div>Su m\u00e9todo de propagaci\u00f3n a trav\u00e9s de aplicaciones de  terceros por  Markets de dudosa reputaci\u00f3n (<em>en su mayor\u00eda procedentes del pa\u00eds de origen<\/em>) consegu\u00eda su objetivo, infectar al usuario final y tomar el control del mismo.<\/div>\n<div>Entre sus objetivos se le atribuye <strong>recolectar todo tipo de informaci\u00f3n de car\u00e1cter privado<\/strong> disponible en el dispositivo y establecer comunicaci\u00f3n con servidores donde esta es enviada.<\/div>\n<div>En lo que respecta a este post,  mi intenci\u00f3n es enfocar un poco el tema al an\u00e1lisis de la aplicaci\u00f3n y  de paso cubrir lo que viene a ser el reversing de los apk.<\/div>\n<div><strong>Preparando el terreno<\/strong><\/div>\n<div>La aplicaci\u00f3n de la que vamos a  servirnos es de MonkeyJump2.0.apk, infectada por Gemini como bien nos  indica el informe de VirusTotal, en el que se obtiene un porcentaje del <strong>40.5%<\/strong> de detecci\u00f3n, <strong>17 positivos<\/strong> sobre 42:<\/div>\n<p><a href=\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s1600\/malware-android.jpg\" onblur=\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\"><img decoding=\"async\" id=\"BLOGGER_PHOTO_ID_5571491097065672658\" src=\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg\" border=\"0\" alt=\"\" \/><\/a><\/p>\n<div>El archivo apk con MD5: <strong>e0106a0f1e687834ad3c91e599ace1be<\/strong> presenta la siguiente estructura una vez desempaquetado:<\/div>\n<pre>sebas@Helios:~\/Android\/infected\/MonkeyJump2.0.apk_FILES$ tree .\r\n.\r\n|-- AndroidManifest.xml\r\n|-- classes.dex\r\n|-- META-INF\r\n|-- res\r\n`-- resources.arsc\r\n\r\n5 directories, 46 files\r\n<\/pre>\n<p>El icono asociado al mismo es:<\/p>\n<p><a href=\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHp46Ewo9I\/AAAAAAAAAJE\/uIrg1SJ0ruA\/s1600\/icon.jpg\" onblur=\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\"><img decoding=\"async\" id=\"BLOGGER_PHOTO_ID_5571491377905181650\" src=\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHp46Ewo9I\/AAAAAAAAAJE\/uIrg1SJ0ruA\/s320\/icon.jpg\" border=\"0\" alt=\"\" \/><\/a><\/p>\n<div>Si tratamos de ver el contenido del fichero <strong>AndroidManifest.xml<\/strong> nos dice que est\u00e1 mal formado, aun as\u00ed los permisos que solicita la aplicaci\u00f3n son:<\/div>\n<ul>\n<li><strong>CALL_PHONE<\/strong>: Realizar llamadas de tel\u00e9fono sin necesidad de que el usuario de permiso expl\u00edcito.<\/li>\n<li><strong>SEND_SMS<\/strong>: Enviar SMS.<\/li>\n<li><strong>READ_SMS<\/strong>: Leer los SMS.<\/li>\n<li><strong>ACCESS_FINE_LOCATION<\/strong>: Acceder a nuestra posici\u00f3n geogr\u00e1fica.<\/li>\n<li><strong>READ_CONTACTS<\/strong>: Leer la agenda de contactos.<\/li>\n<li><strong>MOUNT_UNMOUNT_FILESYSTEMS<\/strong>: Montar y desmontar sistemas de ficheros para unidades extra\u00edbles.<\/li>\n<li><strong>WRITE_EXTERNAL_STORAGE<\/strong>:  Posibilidad de escribir en un medio de almacenamiento externo.<\/li>\n<li><strong>INSTALL_SHORTCUT<\/strong>:<\/li>\n<li><strong>WRITE_CONTACTS<\/strong>: Escribir en la agenda de contactos.<\/li>\n<li><strong>ACCESS_GPS<\/strong>:<\/li>\n<li><strong>ACCESS_LOCATION<\/strong>:<\/li>\n<li><strong>RESTART_PACKAGES<\/strong>:<\/li>\n<li><strong>RECEIVE_SMS<\/strong>: Monitorizar los SMS de entrada para almacenarlos o procesarlos.<\/li>\n<li><strong>SMS_RECEIVE<\/strong>:<\/li>\n<li><strong>WRITE_SMS<\/strong>: Escribir SMS.<\/li>\n<\/ul>\n<div>Los permisos no definidos pertenecen a funcionalidades de versiones previas de la API que est\u00e1n obsoletas.<\/div>\n<div>Llegados a este punto, nos  podemos hacer una ligera idea del potencial que guarda este peque\u00f1o mono  come pl\u00e1tanos. Permisos como <strong>RECEIVE_SMS<\/strong>, <strong>WRITE_SMS<\/strong> hacen pensar que una de las funcionalidades incluidas en este malware sea el de <strong>formar parte de una botnet<\/strong> a la espera de recibir instrucciones por SMS. Si a eso le sumamos los  permisos para obtener nuestra localizaci\u00f3n, y la posibilidad de montar  dispositivos de almacenamiento externo, as\u00ed como acceso completo a  nuestra agenda de contactos, nos encontramos ante la posibilidad de <strong>dejar expuestos nuestros datos personales y privados a terceros<\/strong>.<\/div>\n<div>Para facilitar la tarea en el proceso de reversing vamos a utilizar las herramientas <a href=\"http:\/\/code.google.com\/p\/dex2jar\/\">dex2jar<\/a> para transformar el fichero de clases Java .dex a .jar y <a href=\"http:\/\/www.varaneckas.com\/jad\">Jad<\/a> para desempacar el fichero resultante.<\/div>\n<pre>sebas@Helios:~\/Android$ .\/dex2jar.sh MonkeyJump2.0.apk_FILES\/classes.dex\r\n<\/pre>\n<div>Nos crear\u00e1 un fichero <strong>classes.dex.dex2jar.jar<\/strong> que al descomprimir nos devolver\u00e1 todo el conjunto de ficheros .class  que componen la aplicaci\u00f3n. El siguiente paso ser\u00e1 transformarlo a  extensi\u00f3n .jad y trabajar directamente sobre el c\u00f3digo.<\/div>\n<div><strong>Tres, dos, uno\u2026 ACCI\u00d3N<\/strong><\/div>\n<div>Para facilitarnos un poco el  terreno nos haremos con una copia leg\u00edtima de la aplicaci\u00f3n sin  infectar, repetiremos los pasos previos y haremos un diff de todos los  ficheros obtenidos para comparar qu\u00e9 porciones del mismo se han visto  modificadas.<\/div>\n<p><a href=\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHr2xfEALI\/AAAAAAAAAJM\/ksZV0lCFtU0\/s1600\/Untitled-1.jpg\" onblur=\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\"><img decoding=\"async\" id=\"BLOGGER_PHOTO_ID_5571493540263100594\" src=\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHr2xfEALI\/AAAAAAAAAJM\/ksZV0lCFtU0\/s320\/Untitled-1.jpg\" border=\"0\" alt=\"\" \/><\/a><\/p>\n<div>A la izquierda la versi\u00f3n original y a  la derecha la versi\u00f3n infectada, con m\u00e1s de 100 ficheros nuevos. No voy  a tratar cada una de las funcionalidades que se han incluido en el  mismo, as\u00ed que me detendr\u00e9 a destacar las que m\u00e1s me han llamado la  atenci\u00f3n.<\/div>\n<div><strong>Ofuscaci\u00f3n<\/strong><\/div>\n<div>Con la intenci\u00f3n de pasar  inadvertido y complicar las cosas un poco a la hora de analizarlo,  Gemini aplica dos t\u00e9cnicas anti an\u00e1lisis como son la ofuscaci\u00f3n y el  cifrado. As\u00ed todas las comunicaciones que se producen entre el servidor y  el cliente van bajo el  algoritmo DES y la clave &#8220;<strong>12345678<\/strong>&#8220;.<\/div>\n<div>Esto dificulta en demas\u00eda cualquier an\u00e1lisis est\u00e1tico que queramos aplicar al binario. As\u00ed podemos encontrar en el fichero <em>MonkeyJump2.0\/jump2\/e\/p.jad<\/em> la funci\u00f3n utilizada para cifrar y descifrar:<\/div>\n<pre>public static byte[] a(byte abyte0[])\r\n{\r\nif(b == null)\r\n{\r\nbyte abyte1[] = k.b;\r\nDESKeySpec deskeyspec = new DESKeySpec(abyte1);\r\njavax.crypto.SecretKey secretkey = SecretKeyFactory.getInstance(\"DES\").generateSecret(deskeyspec);\r\nCipher cipher = Cipher.getInstance(\"DES\");\r\nb = cipher;\r\ncipher.init(2, secretkey);\r\n}\r\nif(b != null) goto _L2; else goto _L1\r\n_L1:\r\nbyte abyte2[] = null;\r\n_L3:\r\nreturn abyte2;\r\n_L2:\r\nbyte abyte3[] = b.doFinal(abyte0);\r\nabyte2 = abyte3;\r\ngoto _L3\r\nException exception;\r\nexception;\r\nabyte2 = null;\r\ngoto _L3\r\n}\r\n<\/pre>\n<pre>public static byte[] b(byte abyte0[])\r\n{\r\nbyte abyte2[];\r\nbyte abyte1[] = k.b;\r\nDESKeySpec deskeyspec = new DESKeySpec(abyte1);\r\njavax.crypto.SecretKey secretkey = SecretKeyFactory.getInstance(\"DES\").generateSecret(deskeyspec);\r\nCipher cipher = Cipher.getInstance(\"DES\");\r\ncipher.init(1, secretkey);\r\nabyte2 = cipher.doFinal(abyte0);\r\nbyte abyte3[] = abyte2;\r\n_L2:\r\nreturn abyte3;\r\nException exception;\r\nexception;\r\nabyte3 = null;\r\nif(true) goto _L2; else goto _L1\r\n_L1:\r\n}\r\n<\/pre>\n<div>Analizando un poco m\u00e1s dicho fichero,  encontramos una lista de arrays que contienen todos los strings  utilizados por el troyano, conociendo el algoritmo y la clave utilizada  para generar la informaci\u00f3n codificada, realizar el proceso contrario es  trivial, y la lista que se obtiene puede <a href=\"http:\/\/pastebin.com\/MAiR6c27\">verse aqu\u00ed<\/a>.<\/div>\n<div>Como se ve, hay una serie de direcciones URL que comentaremos m\u00e1s adelante qu\u00e9 objetivo tienen.<\/div>\n<div><strong>Comunicaci\u00f3n<\/strong><\/div>\n<div>La comunicaci\u00f3n con el C&amp;C se sucede a trav\u00e9s de un socket TCP que corre bajo los puertos <strong>5432<\/strong>, <strong>4501<\/strong>, o <strong>6543<\/strong>.  Gemini ejecuta un servicio para crear un hilo encargado de manejar el  socket, que permanece a la escucha de recibir la cadena &#8220;<strong>hi,are you online?<\/strong>&#8220;, a lo que responde con &#8220;<strong>yes,I&#8217;m online<\/strong>&#8220;. Posteriormente el cliente env\u00eda la versi\u00f3n SDK del troyano y el servidor responde con la versi\u00f3n que \u00e9l est\u00e1 ejecutando.<\/div>\n<pre>public static boolean isRunningServices(Context context)\r\n{\r\nint i1;\r\nint j1;\r\nboolean flag;\r\nint k1;\r\ni1 = 0;\r\nString as[] = com.dseffects.MonkeyJump2.jump2.e.k.f().split(\"\\\\.\");\r\nj1 = Integer.parseInt(as[i1]);\r\nflag = Integer.parseInt(as[1]);\r\nk1 = i1;\r\n_L3:\r\nint l1 = a.length;\r\nif(i1 &gt;= l1)\r\nbreak MISSING_BLOCK_LABEL_261;\r\nif(k1 == 0) goto _L2; else goto _L1\r\n_L1:\r\nflag = true;\r\n_L4:\r\nreturn flag;\r\n_L2:\r\ntry\r\n{\r\n\/\/ Obtenemos un puerto de la lista {5432, 4501, 6543}\r\nint i2 = a[i1];\r\n\/\/ Crea un socket en el puerto especificado\r\nSocket socket = new Socket(\"127.0.0.1\", i2);\r\nb = socket;\r\nInputStream inputstream = socket.getInputStream();\r\nOutputStream outputstream = b.getOutputStream();\r\nbyte abyte0[] = \"hi,are you online?\".getBytes();\r\noutputstream.write(abyte0);\r\nTimer timer = new Timer();\r\nu u1 = new u();\r\n\/\/ Crea un objeto de la clase Timer y lo inicializa para saber cu\u00e1ndo cerrar la conexi\u00f3n\r\ntimer.schedule(u1, 5000L);\r\n\/\/ Lee 256 bytes del inputStream\r\nbyte abyte1[] = new byte[256];\r\nint j2 = inputstream.read(abyte1);\r\n\/\/ Saca una cadena del array de bytes y compara que sea igual a \"yes, I'm online\"\r\n\/\/ Si las cadenas no coinciden, prueba con otro puerto y vuelve a ejecutar la misma porci\u00f3n de c\u00f3digo\r\nif((new String(abyte1, 0, j2)).equals(\"yes,I'm online!\"))\r\n{\r\n\/\/ Cancela el timer\r\ntimer.cancel();\r\n\/\/ Escribe la mayor versi\u00f3n del SDK\r\noutputstream.write(j1);\r\n\/\/ Escribe la menor versi\u00f3n del SDK\r\noutputstream.write(flag);\r\n\/\/ Recibe la mayor versi\u00f3n del SDK por parte del servidor\r\nint k2 = inputstream.read();\r\n\/\/ recibe la mnenor versi\u00f3n del SDK por parte del servidor\r\nint l2 = inputstream.read();\r\n\/\/ Comprueba si nos encontramos ejecutando versiones distintas\r\nif(j1 &lt; k2 || j1 == k2 &amp;&amp; flag &lt;= l2)\r\nk1 = 1; \/\/ Si es as\u00ed devuelve true\r\noutputstream.flush();\r\noutputstream.close();\r\ninputstream.close();\r\nb.close(); \/\/ Si no, cierra la conexi\u00f3n\r\n}\r\ntimer.cancel();\r\n}\r\ncatch(Exception exception) { }\r\ni1++;\r\ngoto _L3\r\nflag = k1;\r\ngoto _L4\r\n}\r\n<\/pre>\n<div>Se encarga de comprobar si estamos  ejecutando la misma versi\u00f3n del troyano que tiene el servidor y si no es  as\u00ed, procedemos a actualizarla.  Por otro lado en el fichero <em>MonkeyJump2.0\/jump\/j.jad<\/em> encontramos c\u00f3mo acepta el servidor socket, lee las versiones del SDK y decide continuar o parar el servicio del troyano.<\/div>\n<pre>public final void run()\r\n{\r\ndo\r\ntry\r\n{\r\ne e1 = a;\r\n\/\/ Aceptamos el socket\r\nSocket socket = a.c.accept();\r\ne1.d = socket;\r\nInputStream inputstream = a.d.getInputStream();\r\nOutputStream outputstream = a.d.getOutputStream();\r\nTimer timer = new Timer();\r\ncom.dseffects.MonkeyJump2.jump2.k k1 = new com.dseffects.MonkeyJump2.jump2.k(this);\r\ntimer.schedule(k1, 5000L);\r\nbyte abyte0[] = new byte[256];\r\n\/\/ Convierte los bytes leidos en strings\r\nint i1 = inputstream.read(abyte0);\r\n\/\/ Si los strings no coinciden, cerramos el socket, y lo volvemos abrir a la espera\r\n\/\/ de que se produzca la conexi\u00f3n deseada\r\nif((new String(abyte0, 0, i1)).equals(\"hi,are you online?\"))\r\n{\r\ntimer.cancel();\r\nbyte abyte1[] = \"yes,I'm online!\".getBytes();\r\noutputstream.write(abyte1);\r\n\/\/ Lee la mayor versi\u00f3n del SDK\r\nint j1 = inputstream.read();\r\n\/\/ Lee la menor versi\u00f3n del SDK\r\nint l1 = inputstream.read();\r\n\/\/ Envia la versi\u00f3n mayor del SDK\r\noutputstream.write(10);\r\n\/\/ Env\u00eda la versi\u00f3n menor del SDK\r\noutputstream.write(5);\r\noutputstream.flush();\r\noutputstream.close();\r\ninputstream.close();\r\na.d.close();\r\nString as[] = k.f().split(\"\\\\.\");\r\n\/\/ Compara la versi\u00f3n mayor del SDK recibida con la versi\u00f3n interna\r\nint l = Integer.parseInt(as[0]);\r\n\/\/ Compara la versi\u00f3n menor del SDK recibica con la versi\u00f3n interna\r\nint i = Integer.parseInt(as[1]);\r\n\/\/ Si las versiones del SDK recibidas son mayores que las internas, para\r\n\/\/ la instancia que se est\u00e1 ejecutando del troyano\r\nif(j1 &gt; l || j1 == l &amp;&amp; l1 &gt; i)\r\n{\r\na.e = true;\r\na.stopSelf();\r\n}\r\n}\r\ntimer.cancel();\r\n}\r\ncatch(IOException ioexception) { }\r\nwhile(true);\r\n}\r\n<\/pre>\n<div>Una vez la conexi\u00f3n se a establecido,  es hora de comenzar a enviar datos al C&amp;C, \u00bfrecord\u00e1is las  direcciones URL que obtuvimos antes?, esas son las a las que establece  conexi\u00f3n Gemini para mandar los datos. El tiempo de espera entre cada  una de ellas es de cinco minutos.   Una vez se realiza el primer env\u00edo  de datos, el dispositivo m\u00f3vil queda en un estado de stand-by a la  espera de recibir nuevas \u00f3rdenes a ejecutar. Toda esta informaci\u00f3n es  pasada a trav\u00e9s de una variable llamada <strong>params=<\/strong> cuyo contenido est\u00e1 cifrado siguiendo el algoritmo y la clave anteriormente descrita.<\/div>\n<pre>PTID=33050001&amp;IMEI=000000000000000&amp;sdkver=10.7&amp;SALESID=0006&amp;IMSI=310260000000000&amp;longitude=0.0&amp;latitude=0.0&amp;DID=2001&amp;autosdkver=10.7&amp;CPID=3308\r\n<\/pre>\n<div>Algunos de los par\u00e1metros que se pasan son:<\/div>\n<ul>\n<li><strong>PTID<\/strong>, <strong>SALESID<\/strong>, <strong>DID<\/strong>, <strong>CPID<\/strong>: son utilizados para identificar qu\u00e9 paquete ha sido infectado por el troyano<\/li>\n<li><strong>IMEI<\/strong>: International Mobile Equipment Identity<\/li>\n<li><strong>IMSI<\/strong>: International Mobile Subscriber Identity<\/li>\n<\/ul>\n<div>Mientras que los primeros sirven  para identificar la aplicaci\u00f3n en s\u00ed, los dos \u00faltimos identifican a un  usuario de un dispositivo m\u00f3vil, adem\u00e1s de conocer la posici\u00f3n en la que  se encuentra en todo momento.  Llegados a este punto, dudo  personalmente que hayan dise\u00f1ado el mismo con la intenci\u00f3n de atacar  objetivos espec\u00edficos, simplemente una forma de tener m\u00e1s controlados a  los usuarios que han sido infectados.<\/div>\n<div><strong>Comandos<\/strong><\/div>\n<div>Una de las principales  caracter\u00edsticas del troyano Gemini que lo diferencian de los malware  anteriores es la cantidad de comandos que posee. Lejos de ser simples  instrucciones para cada uno de ellos podemos encontrar un constructor  encargado de crear una instancia del mismo, un parser para los  par\u00e1metros que enviamos y un m\u00e9todo encargado de implementar toda la  l\u00f3gica de ejecuci\u00f3n.  Entre de los m\u00e1s nocivos, encontramos:<\/div>\n<ul>\n<li><strong>smsrecord<\/strong>: Permite  enumerar todos los mensajes recibidos y enviados al dispositivo m\u00f3vil y  enviarlos a un servidor remoto, adem\u00e1s se puede pasar como par\u00e1metro una  fecha de comienzo y otra de fin para establecer una b\u00fasqueda por rangos<\/li>\n<li><strong>dsms<\/strong>: Borra mensajes SMS especificando un n\u00famero, o aquellos que contengan una palabra clave<\/li>\n<li><strong>showurl<\/strong>: Abre una direcci\u00f3n URL indicada<\/li>\n<li><strong>call<\/strong>: Realiza una llamada a un n\u00famero arbitrario de nuestra agenda de contactos<\/li>\n<li><strong>install:\/\/<\/strong>: Descarga un APK y realiza una instalaci\u00f3n desatendida para el usuario.<\/li>\n<\/ul>\n<div><strong>Conclusi\u00f3n<\/strong><\/div>\n<div>Gemini representa una vuelta de  tuercas a la visi\u00f3n de malware para dispositivos smartphone que hemos  estado teniendo hasta d\u00eda de hoy. Es el primero en incluir su c\u00f3digo en  aplicaciones de terceros, recordemos que ha llegado a ser identificado  bajo varios nombres de APK&#8217;s leg\u00edtimas en el market.<\/div>\n<div>Enfoca el concepto de malware  desde el punto de vista de convertir nuestro tel\u00e9fono en una botnet a la  espera de recibir comandos por parte de un servidor con el que  establece una conexi\u00f3n.<\/div>\n<div>Sinceramente opino que servir\u00e1  de precedentes para una nueva oleada m\u00e1s sofisticada y peligrosa de  malware, como ya hemos visto en situaciones anteriores.<\/div>\n<div><em>Contribuci\u00f3n por <a href=\"https:\/\/twitter.com\/0xroot\">Sebasti\u00e1n Guerrero<\/a><\/em><\/div>\n<div><em>Visto en:\u00a0 <a href=\"http:\/\/www.securitybydefault.com\">Security By Default<\/a><br \/>\n<\/em><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n A principios de a\u00f1o saltaba a la palestra la noticia de la aparici\u00f3n de un nuevo malware procedente de China para dispositivos Android. Geinimi o Gemini (as\u00ed han decidido llamarlo los eruditos) ha sido considerado por varias fuentes como el m\u00e1s potente y da\u00f1ino que se conoce hasta la fecha. Su m\u00e9todo de propagaci\u00f3n [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1250","post","type-post","status-publish","format-standard","hentry","category-profesional"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>TalSoft - Seguridad Inform\u00e1tica Empresarial - Reversing Malware Android.Geinimi.A en Android<\/title>\n<meta name=\"description\" content=\"Talsoft transforma la visi\u00f3n de las empresas para que puedan proteger su informaci\u00f3n cr\u00edtica y confidencial frente ataques inform\u00e1ticos. Cons\u00faltenos sin cargo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Leandro Ferrari\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/\"},\"author\":{\"name\":\"Leandro Ferrari\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#\/schema\/person\/83d2ebde035a5a030c14e522351953c8\"},\"headline\":\"Reversing Malware Android.Geinimi.A en Android\",\"datePublished\":\"2011-02-14T11:21:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/\"},\"wordCount\":1462,\"publisher\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg\",\"articleSection\":[\"Profesional\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/\",\"url\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/\",\"name\":\"TalSoft - Seguridad Inform\u00e1tica Empresarial - Reversing Malware Android.Geinimi.A en Android\",\"isPartOf\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg\",\"datePublished\":\"2011-02-14T11:21:45+00:00\",\"description\":\"Talsoft transforma la visi\u00f3n de las empresas para que puedan proteger su informaci\u00f3n cr\u00edtica y confidencial frente ataques inform\u00e1ticos. Cons\u00faltenos sin cargo.\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage\",\"url\":\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg\",\"contentUrl\":\"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#website\",\"url\":\"https:\/\/www.talsoft-security.com\/site\/\",\"name\":\"TalSoft TS - Services IT Security\",\"description\":\"Talsoft is transforming awareness, control and decision-making power so that companies can protect their critical and confidential information from computer attacks.\",\"publisher\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.talsoft-security.com\/site\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#organization\",\"name\":\"Talsoft TS\",\"url\":\"https:\/\/www.talsoft-security.com\/site\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.talsoft-security.com\/site\/wp-content\/uploads\/2014\/02\/talsoft_logo_270x125.png\",\"contentUrl\":\"https:\/\/www.talsoft-security.com\/site\/wp-content\/uploads\/2014\/02\/talsoft_logo_270x125.png\",\"width\":270,\"height\":125,\"caption\":\"Talsoft TS\"},\"image\":{\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"http:\/\/www.facebook.com\/talsoftsrl\",\"https:\/\/x.com\/talsoft\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#\/schema\/person\/83d2ebde035a5a030c14e522351953c8\",\"name\":\"Leandro Ferrari\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.talsoft-security.com\/site\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cd259c10675b9fd302b2e6264231febeeeb3de578400cf8c91c6577e50a0d34a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cd259c10675b9fd302b2e6264231febeeeb3de578400cf8c91c6577e50a0d34a?s=96&d=mm&r=g\",\"caption\":\"Leandro Ferrari\"},\"sameAs\":[\"http:\/\/www.talsoft.com.ar\",\"https:\/\/www.facebook.com\/talsoftsrl\/\",\"https:\/\/x.com\/avatar_leandro\"],\"url\":\"https:\/\/www.talsoft-security.com\/site\/author\/leandro\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TalSoft - Seguridad Inform\u00e1tica Empresarial - Reversing Malware Android.Geinimi.A en Android","description":"Talsoft transforma la visi\u00f3n de las empresas para que puedan proteger su informaci\u00f3n cr\u00edtica y confidencial frente ataques inform\u00e1ticos. Cons\u00faltenos sin cargo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/","twitter_misc":{"Written by":"Leandro Ferrari","Estimated reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#article","isPartOf":{"@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/"},"author":{"name":"Leandro Ferrari","@id":"https:\/\/www.talsoft-security.com\/site\/#\/schema\/person\/83d2ebde035a5a030c14e522351953c8"},"headline":"Reversing Malware Android.Geinimi.A en Android","datePublished":"2011-02-14T11:21:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/"},"wordCount":1462,"publisher":{"@id":"https:\/\/www.talsoft-security.com\/site\/#organization"},"image":{"@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage"},"thumbnailUrl":"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg","articleSection":["Profesional"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/","url":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/","name":"TalSoft - Seguridad Inform\u00e1tica Empresarial - Reversing Malware Android.Geinimi.A en Android","isPartOf":{"@id":"https:\/\/www.talsoft-security.com\/site\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage"},"image":{"@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage"},"thumbnailUrl":"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg","datePublished":"2011-02-14T11:21:45+00:00","description":"Talsoft transforma la visi\u00f3n de las empresas para que puedan proteger su informaci\u00f3n cr\u00edtica y confidencial frente ataques inform\u00e1ticos. Cons\u00faltenos sin cargo.","inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.talsoft-security.com\/site\/reversing-malware-android-geinimi-a-en-android\/#primaryimage","url":"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg","contentUrl":"http:\/\/3.bp.blogspot.com\/_BcfTeHrlYdY\/TVHpoj3Zz9I\/AAAAAAAAAI8\/XNlcpvwgVZw\/s320\/malware-android.jpg"},{"@type":"WebSite","@id":"https:\/\/www.talsoft-security.com\/site\/#website","url":"https:\/\/www.talsoft-security.com\/site\/","name":"TalSoft TS - Services IT Security","description":"Talsoft is transforming awareness, control and decision-making power so that companies can protect their critical and confidential information from computer attacks.","publisher":{"@id":"https:\/\/www.talsoft-security.com\/site\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.talsoft-security.com\/site\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.talsoft-security.com\/site\/#organization","name":"Talsoft TS","url":"https:\/\/www.talsoft-security.com\/site\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.talsoft-security.com\/site\/#\/schema\/logo\/image\/","url":"https:\/\/www.talsoft-security.com\/site\/wp-content\/uploads\/2014\/02\/talsoft_logo_270x125.png","contentUrl":"https:\/\/www.talsoft-security.com\/site\/wp-content\/uploads\/2014\/02\/talsoft_logo_270x125.png","width":270,"height":125,"caption":"Talsoft TS"},"image":{"@id":"https:\/\/www.talsoft-security.com\/site\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/www.facebook.com\/talsoftsrl","https:\/\/x.com\/talsoft"]},{"@type":"Person","@id":"https:\/\/www.talsoft-security.com\/site\/#\/schema\/person\/83d2ebde035a5a030c14e522351953c8","name":"Leandro Ferrari","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.talsoft-security.com\/site\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cd259c10675b9fd302b2e6264231febeeeb3de578400cf8c91c6577e50a0d34a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cd259c10675b9fd302b2e6264231febeeeb3de578400cf8c91c6577e50a0d34a?s=96&d=mm&r=g","caption":"Leandro Ferrari"},"sameAs":["http:\/\/www.talsoft.com.ar","https:\/\/www.facebook.com\/talsoftsrl\/","https:\/\/x.com\/avatar_leandro"],"url":"https:\/\/www.talsoft-security.com\/site\/author\/leandro\/"}]}},"_links":{"self":[{"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/posts\/1250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/comments?post=1250"}],"version-history":[{"count":1,"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/posts\/1250\/revisions"}],"predecessor-version":[{"id":1251,"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/posts\/1250\/revisions\/1251"}],"wp:attachment":[{"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/media?parent=1250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/categories?post=1250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.talsoft-security.com\/site\/wp-json\/wp\/v2\/tags?post=1250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}