elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Explicación de este código de Ransomware - Blackhunt 2.0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Explicación de este código de Ransomware - Blackhunt 2.0  (Leído 864 veces)
Fslynx

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Explicación de este código de Ransomware - Blackhunt 2.0
« en: 9 Junio 2024, 23:59 pm »

Buenas noches.

Sé que tengo un hilo abierto en paralelo en este foro para destripar el Ransomware Blackhunt 2.0 pero esta duda creo que puede abordarse en este foro.

Al descompilar el ejecutable del ransomware se ha generado este codigo pseudo C, que después de analizar y estudiar he podido llegar a la conclusión de que la clave que cifra el fichero de la clave privada con la que se desencriptan los archivos, se genera con este código que os expongo a continuación.

int32_t pbData = 0x206

if (calcularCRC32(&pbData, 0x114) != 0x4401dddf)
    {
        escribirLog(u"KEY ERROR #100");
        Sleep(0x4b0);
        ExitProcess(1);
        /* no return */
    }

// sub_407070
int32_t __fastcall calcularCRC32(int32_t arg1, int32_t arg2)
{
    // Inicializar eax a -1 (0xFFFFFFFF)
    int32_t eax = 0xffffffff;
    // Puntero para iterar sobre los datos
    void* esi = nullptr;
    // Si la longitud de los datos (arg2) no es cero, proceder con el cálculo de CRC
    if (arg2 != 0)
    {
        do
        {
            // Cargar un byte de los datos
            uint32_t edx = *(esi + arg1); // Leer un byte de los datos
            esi = (esi + 1); // Avanzar el puntero

            // Actualizar el valor de CRC
            int32_t eax_1 = (eax ^ edx);
            int32_t ecx_4 = ((-((eax_1 & 1)) & 0xedb88320) ^ (eax_1 >> 1));
            int32_t eax_7 = ((-((ecx_4 & 1)) & 0xedb88320) ^ (ecx_4 >> 1));
            int32_t ecx_10 = ((-((eax_7 & 1)) & 0xedb88320) ^ (eax_7 >> 1));
            int32_t eax_13 = ((-((ecx_10 & 1)) & 0xedb88320) ^ (ecx_10 >> 1));
            int32_t ecx_16 = ((-((eax_13 & 1)) & 0xedb88320) ^ (eax_13 >> 1));
            int32_t eax_19 = ((-((ecx_16 & 1)) & 0xedb88320) ^ (ecx_16 >> 1));
            int32_t ecx_22 = ((-((eax_19 & 1)) & 0xedb88320) ^ (eax_19 >> 1));
            eax = ((-((ecx_22 & 1)) & 0xedb88320) ^ (ecx_22 >> 1));
        } while (esi < arg2);
    }

    // Retornar la negación del valor final de CRC
    return !(eax);
}

/*
    data_478108_manejador_servicios_criptograficos: Es probable que sea un manejador (handle) para el contexto del proveedor de servicios criptográficos (CSP).
    &pbData: Apunta a la clave a ser importada. pbData contiene la clave en formato binario.
    0x114: Es el tamaño de la clave en bytes (276 bytes en decimal).
    0: Este parámetro podría ser el identificador de una clave pública o privada que se va a usar para la importación. En este caso, se pasa 0, indicando que no se usa ninguna clave adicional para el proceso.
    0: Bandera de opciones adicionales, en este caso se pasa 0, lo que indica que no hay opciones adicionales.
    &data_47a328: Apunta a una variable que recibirá el manejador de la clave importada.
    */

if (CryptImportKey(data_478108_manejador_servicios_criptograficos, &pbData, 0x114, 0, 0, &data_47a328) == 0)
    {
        escribirLog(u"CryptImportKey failed!!");
        @__security_check_cookie@4((eax_1 ^ &__saved_ebp));
        return 0;
    }

La función calcularCRC32 no entiendo qué es lo que hace, puede que el nombre no sea acertado, pero si me ayudáis a interpretarla estaré un paso mas cerca de finalizar la investigación.

Muchas gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda, explicacion de codigo
Programación C/C++
negux 1 2,876 Último mensaje 28 Abril 2010, 08:12 am
por Akai
ayuda con explicacion de codigo
Programación C/C++
Fatmf44 1 2,613 Último mensaje 24 Junio 2010, 00:10 am
por Littlehorse
explicacion de codigo
Programación C/C++
flony 3 2,949 Último mensaje 12 Octubre 2010, 14:06 pm
por flony
Explicación de un codigo
Programación C/C++
Nabore 2 2,112 Último mensaje 8 Mayo 2016, 06:38 am
por Nabore
MOVIDO: Explicación de este código de Ransomware - Blackhunt 2.0
Programación C/C++
fary 0 932 Último mensaje 10 Junio 2024, 07:52 am
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines