
Parchear el código de ensamblaje para cambiar el comportamiento de un programa existente no es infrecuente en el análisis de malware, la ingeniería inversa de software y los dominios más amplios de investigación de seguridad. Este proyecto extiende el popular Dissembler de IDA Pro para crear un flujo de trabajo de parcheo binario interactivo más robusto diseñado para una iteración rápida.
Este proyecto actualmente está impulsado por una bifurcación menor del omnipresente motor Keystone, que soporta el parcheo X86/X64 y ARM/ARM64 con planes para habilitar las arquitecturas Keystone restantes en un lanzamiento futuro.
Un agradecimiento especial a los rayos hexagonales por apoyar el desarrollo de este complemento.
Este complemento requiere IDA 7.6 y Python 3. Admite Windows, Linux y MacOS.
Tenga en cuenta que las versiones anteriores de IDA (8.2 y abajo) no son compatibles con Python 3.11 y arriba.
Ejecute la siguiente línea en la consola IDA para instalar automáticamente el complemento:
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())Alternativamente, el complemento se puede instalar manualmente descargando el paquete de complementos distribuibles para su plataforma respectiva desde la página de versiones y desabrochándolo a su carpeta de complementos.
Se recomienda encarecidamente que instale este complemento en el directorio de complementos de usuario de IDA:
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))El complemento de parcheo se cargará automáticamente para las arquitecturas compatibles (x86/x64/arm/arm64) e inyectará acciones de parcheo relevantes en el menú contextual de clic derecho de las vistas de desmontaje de IDA:

Una lista completa de las acciones de parcheo contextual se describe en las siguientes secciones.
El cuadro de diálogo de parcheo principal se puede iniciar a través de la acción de ensamblaje en el menú contextual de clic derecho. Simula una vista básica de desmontaje de IDA que se puede utilizar para editar una o varias instrucciones en rápida sucesión.

La línea de ensamblaje es un campo editable que se puede usar para modificar las instrucciones en tiempo real. Presionar Enter Commit (parche) la instrucción ingresada en la base de datos.
Su ubicación actual (también conocida como su cursor) siempre se resaltará en verde. Las instrucciones que se golpearán como resultado de su parche / edición se resaltarán en rojo antes de cometer el parche.

Finalmente, las teclas de flecha UP y DOWN se pueden usar mientras aún se centran en el campo de texto de ensamblaje editable para mover rápidamente el cursor hacia arriba y hacia abajo de la vista de desmontaje sin usar el mouse.
La acción de parcheo más común es eliminar una o más instrucciones. Por esta razón, la acción NOP siempre será visible en el menú de clic derecho para un acceso rápido.

Las instrucciones individuales pueden ser nop', así como un rango seleccionado de instrucciones.
Forzar un salto condicional para ejecutar siempre una ruta 'buena' es otra acción de parcheo común. El complemento solo mostrará esta acción al hacer clic derecho en una instrucción de salto condicional.

Si nunca quieres que se tome un salto condicional, ¡puedes no hacerlo!
Los parches se pueden guardar (aplicarse) a un ejecutable seleccionado a través del submenú de parcheo en cualquier momento. La acción de aplicación rápida hace que sea aún más rápido guardar parches posteriores utilizando la misma configuración.

El complemento también hará un esfuerzo activo para retener una copia de seguridad ( .bak ) del ejecutable original que utiliza para aplicar 'limpiamente' el conjunto actual de parches de base de datos durante cada guardado.
Finalmente, si alguna vez no está contento con un parche, simplemente puede hacer clic derecho (amarillo) bloques de instrucciones para revertirlos a su valor original.

Si bien es "fácil" volver a los bytes a su valor original, puede ser "difícil" restaurar el análisis a su estado anterior. Revertir un parche ocasionalmente puede requerir arreglos humanos adicionales.
El tiempo y la motivación permiten, el trabajo futuro puede incluir:
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
Agradezco contribuciones externas, problemas y solicitudes de funciones. Haga cualquier solicitud de extracción a la rama develop de este repositorio si desea que se consideren para una versión futura.