|
Título: [APORTE] [PowerShell] Modificar aleatoriamente el checksum de un archivo ejecutable Publicado por: Eleкtro en 21 Septiembre 2025, 15:07 pm El siguiente script, desarrollado en PowerShell, sirve para modificar de forma aleatoria el checksum actual de un archivo ejecutable (formato PE).
Este procedimiento podría ser útil, por ejemplo, para evitar comprobaciones simples de integridad de archivos o verificaciones de firma que dependen de valores de checksum fijos, como los que pudieran estar implementados por sistemas anti-trampas en videojuegos y otro software de protección. Para cumplir con este objetivo, el script cubre dos técnicas combinadas. La primera consiste en inyectar un valor aleatorio en el campo opcional de checksum del encabezado PE. Esta técnica es necesaria para alterar el resultado de la validación de la API de Windows 'MapFileAndCheckSum', ya que no calcula el checksum de forma corriente sobre todo el archivo, sino que utiliza el valor presente en ese campo del PE. La segunda técnica consiste en agregar una cantidad pequeña de bytes de relleno o padding (entre 4 y 16 bytes) al final del archivo para alterar el tamaño del mismo, y por consiguiente el cálculo del checksum del archivo, sin afectar a la funcionalidad del ejecutable. (https://i.imgur.com/iY99sCZ.png) (https://i.imgur.com/JXrxg4A.png) (https://i.imgur.com/8kCBQDw.png) El mismo archivo "reabierto" tras la modificación: (https://i.imgur.com/TNinMCs.png) 24 de septiembre de 2025: Script actualizado para identificar archivos PE que contienen una tabla de certificados y abortar la operación de inmediato, evitando así la posible corrupción del ejecutable. Aunque considero haber probado el código lo suficiente, no me hago responsable de posibles daños causados al intentar modificar un archivo. Hagan siempre una copia de seguridad antes de modificar un archivo. 👍 Randomize executable checksum.ps1 El código fuente Código
Aspectos a tener en cuenta antes de usar La configuración del script está definida directamente en el código y no admite parámetros por línea de comandos. Citar Código
Atentamente, Elektro. 👋 Título: Re: [APORTE] [PowerShell] Modificar aleatoriamente el checksum de un archivo ejecutable Publicado por: W17CH3R en 23 Septiembre 2025, 20:01 pm Gracias por el aporte, y también por el aviso de archivos PE que tengan un certificado digital puedan corromperse, lo testeare en una máquina virtual con Windows.
De nuevo, excelente aporte. :) Título: Re: [APORTE] [PowerShell] Modificar aleatoriamente el checksum de un archivo ejecutable Publicado por: Eleкtro en 24 Septiembre 2025, 06:53 am Gracias por el aporte, y también por el aviso de archivos PE que tengan un certificado digital puedan corromperse Gracias a ti por el comentario. He actualizado el script para identificar archivos PE que contienen una tabla de certificados y abortar la operación de inmediato, evitando así la posible corrupción del ejecutable. El problema radica en que el certificado digital de un archivo PE se ubica (o debería ubicarse) al final del flujo de datos del archivo. En un PE firmado, la tabla de certificados tiene un tamaño fijo que se define dentro del propio PE, y la firma puede incluir un hash del archivo (llamémosle digest o 'image hash'): https://learn.microsoft.com/es-es/windows/win32/debug/pe-format#certificate-data - que se calcula tomando en cuenta las partes del PE excepto la zona ocupada por el certificado. Por ese motivo, cualquier byte de relleno que se agregue al final del archivo se considerará parte de la zona excluida del certificado, y esto provoca que el digest (image hash) calculado del PE ya no coincida con el almacenado en la firma, lo que hace que Windows muestre un error genérico al intentar ejecutar el archivo: "No se puede ejecutar esta aplicación en el equipo." Para hacerlo correctamente con archivos PE firmados habría que añadir una cantidad de padding al final de la tabla de certificados (al final del archivo) pero manteniendo una alineación de 8 bytes, es decir, añadir entre 1 a 8 bytes hasta alinear la tabla, y asignar un nuevo tamaño de la tabla de certificados dentro del PE para incluir este padding y que así los bytes de relleno se excluyan del cálculo del digest o image hash y Windows no lance un error al intentar ejecutar el archivo. Eso me resultaría tedioso implementarlo con PowerShell. Sin embargo, y por si te sirve de algo a ti o alguna otra persona interesada, compartí un código en VB.NET que precisamente sirve para hacer todo esto, permitiendo adjuntar cualquier cosa (como bytes de relleno) al final de la tabla de certificado de un archivo PE. El código es este: https://foro.elhacker.net/net_c_vbnet_asp/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg2285007#msg2285007 (el código completo está repartido en tres posts a partir de ese primer post.) Con ese código en VB.NET se puede alterar el cálculo del file checksum de un archivo PE firmado digitalmente, sin corromperlo. Se usaría de la siguiente manera para añadir, por ejemplo, dos bytes de relleno a la tabla de certificados (sin contar los bytes de relleno que se añadirán automáticamente para mantener la tabla de certificados alineada): Código
Sin embargo, en algunos casos hay que seguir teniendo especial cuidado: me he topado con software comercial de terceros que parecen hacer sus propias comprobaciones de integridad del archivo ejecutable, por lo que al modificar el PE, dan un error genérico al intentar iniciar el programa. En conclusión, hay que verificar que el archivo ejecutable modificado funcione correctamente, sin asumir nada. Un saludo. Título: Re: [APORTE] [PowerShell] Modificar aleatoriamente el checksum de un archivo ejecutable Publicado por: W17CH3R en 17 Octubre 2025, 23:01 pm Disculpa la tardanza, en Septiembre me matrícule en ASIR, y estado ocupado con trabajos de clase y exámenes.
Sin embargo, en algunos casos hay que seguir teniendo especial cuidado: Totalmente, de hecho lo testeado en un entorno controlado, nunca testeo en mi host principal para evitar posibles daños, sin embargo excelente trabajo :) |