
Solución de colaboración de ingeniería inversa multiherramienta.

CollaRE es una herramienta para la ingeniería inversa colaborativa que pretende permitir que equipos que necesitan usar más de una herramienta durante un proyecto colaboren sin la necesidad de compartir los archivos en una ubicación separada. También contiene una gestión de usuarios muy simple y, como tal, puede usarse para un servidor multiproyecto donde diferentes equipos trabajan en distintos proyectos.
El back-end de la herramienta es una simple Flask app con nginx delante de ella que se ejecuta en Docker y que trabaja con archivos y manifiestos basados en JSON que contienen los datos relevantes. El front-end es una herramienta GUI basada en PyQT con una interfaz simple que permite gestionar los proyectos y trabajar con los archivos binarios y sus correspondientes bases de datos de ingeniería inversa. Por ahora, la herramienta soporta Binary Ninja, Cutter (Rizin), Ghidra, Hopper Dissassembler, IDA, JEB y Android Studio (Decompiled by JADX). La implementación está abstraída del funcionamiento interno de estas herramientas tanto como es posible para evitar problemas con cualquier cambio de API y, por lo tanto, no se integra directamente en esas herramientas en forma de plugin (excepto por los plugins de migración de datos descritos a continuación). El trabajo se basa puramente en la gestión de los archivos producidos por estas herramientas (literalmente solo en las extensiones de archivo conocidas) y en operaciones simples de check-out y check-in al estilo SVN.
Toma la última versión binaria de este repositorio o clona el repositorio y ejecuta sudo python3 setup.py install en Linux o usa la línea de comandos en Windows y ejecuta python3 setup.py install. En Linux esto instalará la herramienta en el PATH y podrás ejecutarla simplemente con el comando collare. En Windows esto colocará el archivo en C:\Users\<USERNAME>\AppData\Local\Programs\Python\<PYTHON_VERSION>\Scripts\collare.exe (dependiendo de cómo hayas instalado Python).
Para interfaces de escritorio basadas en Gnome puedes usar el siguiente archivo de escritorio (las rutas a los archivos pueden variar según la versión de CollaRE y Python):
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=CollaRE
Exec=/usr/local/bin/collare
Icon=/usr/local/lib/python3.8/dist-packages/collare-1.2-py3.8.egg/collare/icons/collare.png
Terminal=false
Para habilitar el soporte para Cutter agrega un archivo Cutter a tu ruta (cuando abras cmd/terminal escribir Cutter debería iniciar la aplicación).
Al guardar proyectos de Cutter (rizin) tienes que añadir manualmente .rzdb. No elimines la extensión que el archivo ya tiene (por ejemplo, exe o so).
Para habilitar el soporte para Binary Ninja agrega un archivo binaryninja a tu ruta (cuando abras cmd/terminal escribir binaryninja debería iniciar la aplicación).
Binary Ninja elimina las extensiones de archivo por defecto; sin embargo, la herramienta tiene esto en cuenta, por lo que no es necesario volver a añadir manualmente la extensión original del archivo. Guardar los proyectos tal cual en la ruta predeterminada es suficiente para poder subir correctamente la base de datos local bndb.
Para habilitar el soporte para Hopper Disassembler agrega un archivo Hopper a tu ruta (cuando abras cmd/terminal escribir Hopper debería iniciar la aplicación).
Hopper elimina las extensiones de archivo por defecto; sin embargo, la herramienta tiene esto en cuenta, por lo que no es necesario volver a añadir manualmente la extensión original del archivo. Guardar los proyectos simplemente con Ctrl+S es suficiente para poder subir correctamente la base de datos local hop.
Para habilitar el soporte para JEB agrega un archivo jeb a tu ruta (cuando abras cmd/terminal escribir jeb debería iniciar la aplicación). Esto se puede hacer renombrando el script de ejecución predeterminado para tu sistema operativo a jeb (para Windows esto sería realmente jeb.bat).
Para habilitar el soporte para la herramienta IDA agrega los archivos ida64 e ida a tu ruta (cuando abras cmd/terminal escribir ida64/ida debería iniciar la aplicación).
Para habilitar el soporte para esta herramienta agrega los archivos ghidraRun y analyzeHeadless (.bat para Windows) a tu ruta (cuando abras cmd/terminal escribir ghidraRun debería iniciar la aplicación). Ten en cuenta que analyzeHeadless está en la carpeta support del directorio raíz de Ghidra, así que asegúrate de ajustar PATH para acomodar ambos archivos.
El proceso de inicialización de la base de datos con Ghidra es un poco más complicado, ya que no hay forma de que Ghidra procese un archivo sin crear un proyecto. Entonces, para poder subir la base de datos de Ghidra (referida como ghdb) se te pedirá que crees un proyecto manualmente cuando el procesamiento automático falle (básicamente siempre que el archivo que procesas no sea ELF/PE) y luego especifiques la ruta al archivo gpr (perdón por eso).
Como los archivos APK y JAR se encuentran a menudo durante los esfuerzos de ingeniería inversa, la herramienta CollaRE también soporta trabajar con estos tipos de archivos. Para habilitar el soporte para estas herramientas es necesario asegurarse de que los archivos android-studio y jadx estén ambos en la ruta (cuando abras cmd/terminal escribir android-studio/jadx debería iniciar la aplicación). La herramienta JADX se utiliza para realizar la descompilación del archivo JAR/APK y Android Studio se utiliza para abrir los archivos resultantes. Ten en cuenta que el uso de Android Studio es opcional, ya que puedes asignar cualquier otra herramienta que maneje proyectos Gradle al comando android-studio (como IntelliJ IDEA).
Después de implementar el lado del servidor como se menciona en su propio archivo readme, es necesario distribuir el archivo de certificado utilizado a todos los usuarios de la aplicación, así como usar la cuenta admin predeterminada con la contraseña admin para crear otras cuentas de usuario (no olvides cambiar la contraseña del usuario admin) a través de la pestaña Admin. Cuando los usuarios están configurados, cualquiera puede crear sus propios proyectos y comenzar a trabajar con la herramienta en sí.
Para crear un proyecto, el usuario primero debe autenticarse en el servidor remoto ingresando la URL, las credenciales y proporcionar un certificado para validar la identidad del servidor. Después de eso, el estado cambiará a Connected y es posible seleccionar o eliminar proyectos existentes o crear un nuevo proyecto simplemente ingresando el nombre (solo caracteres alfanuméricos y _) y seleccionando los usuarios que participarán en el proyecto (se puede cambiar más tarde en la pestaña Admin). Ten en cuenta que el usuario que crea el proyecto se agrega automáticamente a la lista de usuarios, por lo que no tienes que seleccionarte a ti mismo.

Una vez que estés en la pestaña Project View puedes crear nuevas carpetas (solo caracteres alfanuméricos y _, lo siento) y usar arrastrar y soltar para subir archivos (o carpetas).

Dado que la herramienta actualmente no tiene plugins ni hooks nativos que permitan subidas automáticas cuando el proyecto se guarda, es necesario que la subida del archivo de BD local se active manualmente después de crear las bases de datos deseadas. Esto se puede hacer haciendo clic derecho en el archivo binario subido y eligiendo la herramienta con la que deseas procesar el binario. Puedes hacer un análisis básico, pero se recomienda encarecidamente simplemente guardar el archivo sin cambiar nada (aparte de añadir rzdb en Cutter y un proceso completamente diferente con Ghidra). NO CAMBIES LA RUTA Y EL NOMBRE DEL ARCHIVO. Después de hacer esto y cerrar el desensamblador, puedes hacer clic derecho en el nombre del binario y seleccionar la opción Push Local DBs. Esto subirá la base de datos local y, a partir de ahora, cuando quieras trabajar con el archivo de BD deberás realizar un Check-out. Ten en cuenta que cada binario puede procesarse en todas las herramientas por separado, pero solo puede existir un archivo de BD por binario y herramienta.

Cuando solo quieras inspeccionar el archivo, puedes hacer clic derecho en el archivo de BD deseado y seleccionar la opción Open File (o simplemente hacer doble clic). Si el archivo está marcado como check-out para ti, esto abrirá el archivo local y podrás realizar libremente cualquier cambio en el archivo de BD. Cuando termines (o si simplemente quieres subir los cambios), puedes seleccionar la opción Check-in. Esto subirá los cambios al servidor y te preguntará si deseas mantener el archivo con check-out para realizar más cambios. Si deseas descartar tus cambios locales, selecciona la opción Undo Check-out del menú contextual. Esto descartará tus cambios y te permitirá continuar con el archivo del servidor. Abrir un archivo sin realizar primero una operación de Check-out lo abrirá en un modo de solo lectura simulado (puedes hacer cambios en el archivo de BD, pero se perderán la próxima vez que hagas check-out o abras el archivo).

La herramienta también soporta el versionado de los archivos de BD de manera que cada acción de Check-in cuenta como una nueva versión del archivo de BD. Se te pedirá que insertes un comentario para la versión, que se utiliza para dar más contexto a los cambios aplicados en esa versión. Entonces es posible abrir o hacer check-out de las versiones anteriores de los archivos y trabajar en ellas.

La carpeta plugins dentro de este repositorio contiene plugins para las herramientas soportadas que te permiten compartir comentarios y nombres de funciones entre las herramientas en caso de que trabajes en un binario con múltiples herramientas. Sigue las instrucciones estándar de instalación de plugins para la herramienta que te interese. Cada plugin ofrece una función Import y Export. Cuando planees compartir los datos entre las herramientas, asegúrate siempre de hacer Import de los datos primero para evitar renombrar funciones que ya fueron renombradas por otra persona. Si el plugin tiene alguna advertencia, se menciona en el archivo README del plugin dado. Ten en cuenta que los plugins están destinados a migrar los datos a otra herramienta más que a una colaboración simultánea de múltiples personas.
