Analizando software malicioso en Android con PHP. Parte 4

Buenas a todos, en el post de hoy continuaremos con nuestro analizados de código malicioso en Android.

Si recordáis, en el último artículo definimos una primera aproximación de lo que sería la base de nuestro analizados, y que era capaz de:
  1. Dado un APK decompilarlo para recuperar el código java original
  2. Analizar cadenas de textos en el código java
  3. Obtener las URLs a las que se conecta el software
  4. Extraer el fichero Manifest y los permisos requeridos por el APK
Hoy añadiremos una nueva funcionalidad, la de recolectar todas las imágenes contenidas en el APK, lo cual nos será de mucha utilidad para hacernos una idea rápida del contenido de las pantallas del aplicativo (si tiene claro). También comenzaremos a incluir código HTML, con el objetivo de visualizar la aplicación de forma gráfica desde un navegador web.

Por el momento utilizaremos HTML básico, y poco a poco iremos añadiendo hojas de estilo y maquetando mejor nuestra aplicación:

<html>
<head>
</head>
<body>
<?php
    //******** GLOBAL VARIABLES
    $rutaTemp="";
    //******** FUNCTIONS
    function rfile($ruta)
    {
        $extensions=array("png","jpg","jpeg","bmp","tiff","gif");
        global $rutaTemp;
        if (is_dir($ruta))
        {
            if ($aux = opendir($ruta))
            {
                while (($archivo = readdir($aux)) !== false)
                {
                    if ($archivo!="." && $archivo!="..")
                    {
                        $ruta_completa = $ruta . '/' . $archivo;
                        if (is_dir($ruta_completa))
                        {
                $rutaTemp=$rutaTemp.$ruta_completa . "/";
                            rfile($ruta_completa . "/");
                        }
                        else
                        {
                foreach($extensions as $extension)
                {
                    if(strpos($archivo, $extension)!==false)
                                    echo '<br /><img src="' . $rutaTemp."/".$archivo . '" style="width:100px"/><br />';
                }
                        }
                    }
                }
             $rutaTemp="";
                closedir($aux);
            }
        }
    }
?>
    <h1>HTTP/S</h1>
    <textarea cols="100" rows="25">
<?php
    //******** APK PARA ANALIZAR
    $bin='facebook';
    $ext='.apk';
    //******** COMANDOS BASH
    $com1='mkdir -p android';
    $com2='d2j-dex2jar '.$bin.$ext.' --force ';
    $com3='java -jar jd-core.jar '.$bin.'-dex2jar.jar android/apk ';
    $com4='find android/apk -type f -print0 | xargs -0 grep -1 "https:"';
    $com5='find android/apk -type f -print0 | xargs -0 grep -1 "http:"';
    $com6='apktool d -f '.getcwd().'/'.$bin.$ext.' '.getcwd().'/android/manifest';
    $commands=array($com1,$com2,$com3,$com4,$com5,$com6);
    foreach($commands as $com)
    {
        $output=array();
        exec($com, $output);
        foreach($output as $valor)
        {
            echo $valor;
        }
    }
    //******** LECTURA ARCHIVO MANIFEST
    $a = getcwd().'/android/manifest/AndroidManifest.xml';
    $fp = fopen($a,'r');
    $text = fread($fp, filesize($a));
?>
    </textarea>
    <h1>MANIFEST</h1>
    <textarea cols="100" rows="25">
<?php    echo $text;    ?>
    </textarea>
    <h1>IMAGES</h1>
<?php    rfile("./"); ?>
</body>
</html>

Lo que os mostrará por pantalla lo siguiente:


En el próximo artículo de la cadena seguiremos añadiendo nuevas funcionalidades a nuestro analizador.

Saludos!