Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Kam1n0-Community — Plataforma de análisis de ensamblado escalable para indexación, búsqueda de clones y clasificación de ejecutables mediante técnicas estáticas, dinámicas y de aprendizaje automático en múltiples arquitecturas. | Kitploit
Herramientas/GitHubGitHub/mcgill-dmas/kam1n0-community
Análisis de VulnerabilidadesAnálisis de CódigoIngeniería InversaFuzzingAnálisis de BinariosAprendizaje Automático
GitHubmcgill-dmas/kam1n0-community

Kam1n0-Community

Plataforma de análisis de ensamblado escalable para indexación, búsqueda de clones y clasificación de ejecutables mediante técnicas estáticas, dinámicas y de aprendizaje automático en múltiples arquitecturas.

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
627124hace 3 añosRevisado por Kitploit

¿Qué es Kam1n0 v2?

image GitHub (pre-)release Github All Releases JDK PRs Welcome

Build latest development release (Windows) Test release build (Windows)

Kam1n0 v2.x es una plataforma escalable de gestión y análisis de ensamblador. Permite a un usuario indexar primero una colección (grande) de binarios en diferentes repositorios y proporcionar diferentes servicios analíticos como la búsqueda de clones y la clasificación. Soporta acceso multiinquilino y gestión de repositorios de ensamblador mediante el concepto de Aplicación. Una instancia de aplicación contiene su propio repositorio exclusivo y proporciona un servicio analítico especializado. Considerando la versatilidad de las tareas de ingeniería inversa, el servidor Kam1n0 v2.x actualmente proporciona tres tipos diferentes de aplicaciones de búsqueda de clones: Asm-Clone, Sym1n0 y Asm2Vec, y una clasificación de ejecutables basada en Asm2Vec. Se pueden añadir nuevos tipos de aplicación a la plataforma.

Un usuario puede crear múltiples instancias de aplicación. Una instancia de aplicación se puede compartir entre un grupo específico de usuarios. El acceso de lectura-escritura al repositorio de la aplicación y su estado de activación/desactivación pueden ser controlados por el propietario de la aplicación. El servidor Kam1n0 v2.x puede atender las aplicaciones concurrentemente utilizando varios grupos de recursos compartidos.

Kam1n0 fue desarrollado por Steven H. H. Ding y Miles Q. Li bajo la supervisión de Benjamin C. M. Fung del Data Mining and Security Lab de la Universidad McGill en Canadá. Ganó el segundo premio en el Hex-Rays Plug-In Contest 2015. Si encuentra Kam1n0 útil, por favor cite nuestro artículo:

  • S. H. H. Ding, B. C. M. Fung, y P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. En Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), páginas 461-470, San Francisco, CA: ACM Press, agosto 2016.

  • S. H. H. Ding, B. C. M. Fung, y P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. En Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 páginas, San Francisco, CA: IEEE Computer Society, mayo 2019.

Asm-Clone

Las aplicaciones Asm-Clone intentan resolver el problema de búsqueda eficiente de subgrafos (es decir, el problema de isomorfismo de grafos) para funciones de ensamblador (tiempo promedio de consulta <1.3 s y tiempo promedio de indexación <30 ms con 2.3M funciones). Dada una función objetivo (la de la izquierda como se muestra a continuación), puede identificar los subgrafos clonados entre otras funciones en el repositorio (el de la derecha como se muestra a continuación).

  • Tipo de aplicación: Asm-Clone
  • El servicio original de búsqueda de clones utilizado en Kam1n0 v1.x.
  • Actualmente soporta Meta-PC, ARM, PowerPC y TMS320c6 (experimental).
  • Soporta búsqueda de clones de subgrafos dentro de una cierta familia de código ensamblador.
    • + Buena interpretabilidad del resultado: se descompone en subgrafos.
    • + Preciso para búsquedas dentro de la familia de código dada.
    • + Bueno para diferenciar varios parches o versiones de binarios grandes.
    • - Relativamente más sensible a cambios en el conjunto de instrucciones, optimizaciones y ofuscación.
    • - Necesita predefinir la sintaxis del lenguaje de código ensamblador.
    • - Necesita tener código ensamblador de la misma familia elegida en el repositorio.

Sym1n0

Búsqueda de clones semántica mediante pruebas de fuzzing diferenciadas y resolución de restricciones. Un enfoque híbrido dinámico-estático eficiente y escalable (tiempo promedio de consulta <1 s y tiempo promedio de indexación <100 ms con 1.5M funciones). Dada una función objetivo (la de la izquierda como se muestra a continuación), puede identificar los subgrafos clonados entre otras funciones en el repositorio (el de la derecha como se muestra a continuación). Soporta visualización del grafo de sintaxis abstracta.

  • Tipo de aplicación: Sym1n0 (solo v2)
  • Búsqueda de clones tanto por ejecución simbólica como por ejecución concreta.
  • Diferencia funciones basándose en su diferente comportamiento de E/S.
  • Búsqueda de clones realizada sobre el grafo de sintaxis abstracta construido a partir de Vex IR (potenciado por LibVex).
    • + Búsqueda de clones entre diferentes familias de código ensamblador.
      • Por ejemplo, binarios x86 indexados pero la consulta es código ARM.
    • + Búsqueda de clones de subgrafos.
    • + Soporta una amplia gama de familias a través de LibVex.
      • x86, AMD64, MIPS32, MIPS64, PowerPC32, PowerPC64, ARM32 y ARM64.
    • + Un enfoque híbrido dinámico-estático eficiente.
    • + Ideal para analizar firmware compilado para diferentes procesadores.
    • - Sensible a manipulaciones pesadas del grafo (como un aplanamiento completo).
    • - Sensible a la descomposición a gran escala de la integridad de los bloques básicos.

Asm2Vec

Asm2Vec aprovecha el aprendizaje de representaciones. Comprende la relación semántica léxica del código ensamblador. Por ejemplo, los registros xmm* están semánticamente relacionados con operaciones vectoriales como addps. memcpy es similar a strcpy. El gráfico a continuación muestra diferentes funciones de ensamblador compiladas a partir del mismo código fuente de gmpz_tdiv_r_2exp en libgmp. De izquierda a derecha, las funciones de ensamblador se compilan con la opción GCC O0, la opción GCC O3, la opción de aplanamiento del grafo de flujo de control del ofuscador O-LLVM y la opción de grafo de flujo de control falso del ofuscador LLVM. Asm2Vec puede identificarlas estáticamente como clones.

  • Aprovecha el aprendizaje de representaciones.
  • Comprende la relación semántica léxica del código ensamblador.
    • + Estado del arte para búsqueda de clones contra técnicas pesadas de ofuscación de código.
      • (>0.8 de precisión para todas las opciones aplicadas en O-LLVM, múltiples iteraciones).
    • + Estado del arte para búsqueda de clones contra optimización de código.
      • (>0.8 de precisión entre O0 y O3, >0.94 de precisión entre O2 y O3).
    • + Incluso mejor resultado que el enfoque dinámico más reciente.
    • + Mucho más eficiente que los enfoques dinámicos recientes.
    • + No necesita definir la arquitectura. Se autoaprende leyendo grandes volúmenes de código.
    • + Enfoque estático: eficiente y escalable.
    • - Sin subgrafos.
    • - Asume que el código ensamblador proviene de la misma familia de procesadores.
    • - Enfoque estático: no puede reconocer tablas de salto, etc.

Clasificación de Ejecutables

En esta aplicación, el usuario define un conjunto de clases de software basadas en la relación funcional y proporciona binarios que pertenecen a cada clase. Luego, el sistema agrupa automáticamente las funciones en clústeres en los que las funciones están conectadas directa o indirectamente por una relación de clon. Los clústeres que son discriminativos para la clasificación se mantienen y sirven como firmas de sus clases. Dado un binario objetivo, el sistema muestra el grado en que pertenece a cada clase de software.

  • Utiliza Asm2Vec como modelo de cálculo de similitud de funciones.

    • + Proporciona resultados de clasificación interpretables.
    • + Aprende características comunes (es decir, clústeres de funciones) de cada clase.
    • + Capaz de manejar conjuntos de datos más pequeños y desbalanceados que un modelo de aprendizaje automático normal.
    • - La limitación es que debe cumplirse la suposición de que los binarios en la misma clase comparten algunas funciones comunes para que el sistema funcione.

Descripción General de la Plataforma

La figura a continuación muestra los principales componentes de la interfaz de usuario y las funcionalidades de Kam1n0 v2.x. Adoptamos un diseño material. En general, cada usuario tiene una lista de aplicaciones, una lista de trabajos en ejecución y una lista de archivos de resultados.

  • La lista de aplicaciones muestra las instancias de aplicación propiedad del usuario y compartidas por otros.
  • La lista de trabajos en ejecución muestra el progreso de una consulta grande (como chrome.dll) y el procedimiento de indexación.
  • La lista de archivos de resultados muestra los resultados guardados. Se pueden encontrar más detalles del diseño de la interfaz de usuario en nuestro tutorial detallado.

Instrucciones de Instalación

La versión actual de Kam1n0 consta de dos instaladores: el servidor central y el complemento de IDA Pro.

Instalación del Servidor Kam1n0

El motor central de Kam1n0 está escrito puramente en Java. Necesita las siguientes dependencias:

  • [Requerido] La última distribución x64 11.x JRE/JDK de Oracle.
  • [Opcional] La última versión de IDA Pro con el complemento idapython instalado. El complemento de Python y el tiempo de ejecución ya deberían estar instalados con IDA Pro. Reinstale IDA Pro si es necesario.

Descargue el archivo Kam1n0-Server.msi desde nuestra página de versiones. Siga las instrucciones para instalar el servidor. Se le solicitará que seleccione una ruta de instalación. IDA Pro es opcional si el servidor no tiene que lidiar con ningún desensamblado. En otras palabras, el lado del cliente usa el complemento Kam1n0 para IDA Pro. Se recomienda firmemente tener instalado IDA Pro con el servidor Kam1n0. El servidor Kam1n0 detectará automáticamente su IDA Pro buscando la aplicación predeterminada que usó para abrir archivos .i64.

Instalación del Complemento de IDA Pro

El complemento de Kam1n0 para IDA Pro está escrito en Python para la lógica y en HTML/JavaScript para el renderizado. Se requieren las siguientes dependencias para su instalación:

  • [Requerido] IDA Pro (>6.7) con el complemento idapython instalado. El complemento de Python y el tiempo de ejecución ya deberían estar instalados con IDA Pro. Reinstale IDA Pro si es necesario.

A continuación, descargue el instalador Kam1n0-IDA-Plugin.msi desde nuestra página de versiones. Siga las instrucciones para instalar el complemento y el tiempo de ejecución. Tenga en cuenta que el complemento debe instalarse en la carpeta de complementos de IDA Pro, ubicada en $IDA_PRO_PATH$/plugins. Por ejemplo, en Windows, la ruta podría ser C:/Program Files (x86)/IDA 6.95/plugins. El instalador detectará y validará la ruta.

Configuración de Kam1n0 en sistemas basados en Ubuntu/Debian

  • Asegúrese de tener la versión Oracle de Java 11. (No default-jdk en apt).

    • Agregue el PPA de Oracle y luego actualice su repositorio de paquetes: sudo add-apt-repository ppa:webupd8team/java
      • Si encuentra algún error (como ~webupd8team not found), si está usando un proxy, asegúrese de establecer y exportar sus variables de entorno http_proxy y https_proxy, y luego intente nuevamente con la opción -E en sudo. Además, si recibe un error de 'add-apt repository command not found', intente: sudo apt install -y software-properties-common.
    • Después: sudo apt-get update, y sudo apt-get install oracle-java8-installer
      • Verifique su versión de Java con java -version; es posible que deba establecer manualmente la variable de entorno JAVA_HOME (en /etc/environment), JAVA_HOME=/usr/lib/jvm/java-11-oracle

Compatibilidad hacia atrás

Los repositorios de código ensamblador y los archivos de configuración utilizados en versiones anteriores (<2.0.0) ya no son compatibles con la última versión. Póngase en contacto con nosotros si necesita migrar sus repositorios antiguos.

Documentación

  • Tutorial del Servidor Kam1n0
    • Configuración e Inicio del Motor
    • Registrar una cuenta e iniciar sesión
    • Crear una aplicación
    • Compartir Aplicación y Control de Acceso
    • Preparación de los datos
    • La URL de la aplicación para el Complemento de IDA Pro
    • Indexar archivos binarios
    • Buscar con una función de ensamblador
      • Vista de grafo de flujo
      • Vista de diferencias de texto
      • Vista de grupo de clones
    • Buscar con un archivo binario
    • Navegar por un resultado de búsqueda de clones
      • Los cuadros de resumen

Desarrollo

Clone la última rama estable (¡no olvide --recursive!):```bash git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community

root@kitploit:~
## Importando el proyecto.
IntelliJ: Importa la raíz /kam1n0/kam1n0/ como un proyecto Maven. Todos los submódulos se cargarán en consecuencia.
EclipseEE: Agrega el repositorio clonado de git a la vista de git. Importa todos los proyectos Maven desde el repositorio de git.
Puede que necesites modificar el classpath para solucionar cualquier error.
Todas las rutas de recursos se modifican dinámicamente al ejecutarse dentro de un IDE
(a través del submódulo kam1n0-resources).

Para construir el proyecto:```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package

Los binarios resultantes se pueden encontrar en /kam1n0/build-bins/

Para ejecutar el código de prueba, primero deberá descargar chromedriver.exe desde http://chromedriver.chromium.org/ y agregar su ruta absoluta a una variable de entorno llamada webdriver.chrome.driver. También se requiere que haya un navegador Chrome instalado en el sistema. El código de prueba lanzará una instancia del navegador para probar las interfaces de UI. El procedimiento completo de prueba tomará aproximadamente 3 horas.``` cd /kam1n0/kam1n0 mvn -DskipTests clean package # you can skip this one if you already built the package mvn -DskipTests package # you can skip this one if you already built the package mvn -DforkMode=never test

root@kitploit:~
Estos comandos solo compilan java con ruedas precompiladas de libvex y z3. Funciona de fábrica.
La compilación de libvex y z3 depende de la plataforma. Usamos un fork de libvex de Angr.
Scripts de compilación más completos, así como instaladores para windows/linux, se pueden encontrar en /kam1n0-builds/

* kam1n0: El código fuente del servidor.
* kam1n0-builds: Código fuente del instalador y scripts para construir la distribución.
* kam1n0-clients: El código fuente de los clientes.

## Binary Releases

Tenemos un servidor Jenkin para desarrollo y entrega continuos. La última versión estable se publicará aquí. Periódicamente sincronizaremos nuestra rama experimental interna con este repositorio.


## Licensing

El software fue desarrollado por [Steven H. H. Ding](http://stevending.net/), [Miles Q. Li](http://milesqli.github.io/) y [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) en el [McGill Data Mining and Security Lab](http://dmas.lab.mcgill.ca/) y el [Queen's L1NNA Research Laboratory](https://l1nna.com/) en Canadá. Se distribuye bajo la Licencia Apache Versión 2.0. Consulte [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/HEAD/LICENSE.txt) para obtener más detalles.

Copyright 2014-2021 Universidad McGill y los Investigadores. Todos los derechos reservados.

## Acknowledgement

![image](https://img.shields.io/badge/Proudly%20Funded%20by-Defence%20Research%20&%20Development%20Canada%20(DRDC)-orange.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Proudly%20Funded%20by-NSERC%20Canada%20Research%20%20Chairs%20Program-blue.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Special%20thanks%20to-Philippe%20Charland,%20DRDC-orange.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Acknowledgement-NVIDIA%20Corporation%20for%20donating%20the%20Titan%20Xp%20used%20for%20this%20research-blue.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Built%20in-Data%20Mining%20and%20Security%20Lab,%20SIS,%20McGill%20Univrsity-red.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Built%20in-L1NNA%20Research%20Laboratory,%20CS,%20Queen%27s%20Univrsity-red.svg?style=for-the-badge)
Descargar herramienta
InstaladorComponentes incluidosDescripción
Kam1n0-Server.msiMotor centralMotor principal que proporciona servicio de indexación y búsqueda.
WorkbenchUna interfaz de usuario para gestionar los repositorios y el servicio en ejecución.
Interfaz de usuario webInterfaz de usuario web para buscar/indexar archivos binarios y funciones de ensamblador.
Redistribuible de Visual C++ para VS 15Dependencia para z3.
Kam1n0-IDA-Plugin.msiComplementoConectores e interfaz de usuario.
Wheels PyPI para CefpythonMotor de renderizado para la interfaz de usuario.
PyPI y wheels dependientesGestión de paquetes para Python. Incluido para IDA 6.8 y 6.9.
  • Descargue la última versión para Linux (Kam1n0-IDA-Plugin.tar.gz y Kam1n0-Server.tar.gz) desde Kam1n0-Community.

  • Extraiga los dos tarballs (es decir, tar –xvzf Kam1n0-IDA-Plugin.tar.gz y tar –xvzf Kam1n0-Server.tar.gz)

  • El archivo Kam1n0-Server.tar.gz creará el directorio del servidor.

  • Dentro del directorio server, debería ver un archivo llamado kam1n0.properties, donde establecerá varias configuraciones para kam1n0; esto es muy importante.

  • Establezca kam1n0.data.path en el lugar donde desea que se escriban los datos relacionados con kam1n0. Elegimos colocarlo en el mismo lugar donde guardamos nuestro server. kam1n0.ida.home se refiere a la ubicación de su instalación de IDA. Comente esta línea (y kam1n0.ida.batch, la línea siguiente) si no tiene IDA y no planea usar kam1n0 para desensamblado. Para obtener más información (precisa) sobre el archivo kam1n0.properties, consulte el archivo kam1n0.properties.explained.

  • Ejecute kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar. Esto debería abrir una ventana que le solicita iniciar kam1n0. Alternativamente, ejecute kam1n0-server: java -jar kam1n0-server.jar --start. Esto inicia el servidor desde la consola sin ventana.

  • Para conectarse y usarlo, vaya a 127.0.0.1:8571 (el puerto predeterminado en el que kam1n0 escucha debe ser 8571, pero se puede cambiar en kam1n0.properties) en su navegador. Debería ver la bonita interfaz web de kam1n0. Desde allí, siga el tutorial en el repositorio Kam1n0-Community si no sabe cómo usar kam1n0.

  • Detalles
  • Tutorial del Complemento de IDA Pro
    • Funcionalidades
    • Ejemplo guiado
      • Preparación de los datos
      • Inicio del motor y URL de la aplicación
      • Configuración de conexión
      • Indexación desde el complemento
      • Búsqueda de funciones
      • Análisis de composición
      • Búsqueda de fragmentos de ensamblador
      • Cuadro de búsqueda
    • Cómo funciona el complemento
      • Interfaz de usuario
      • Sincronización
      • Comunicación bidireccional