
Herramienta en C++ que modifica llamadas a la API de Windows para eludir las comprobaciones de tamaño de RAM del sandbox, permitiendo que el malware evite la detección en entornos de análisis aislados.
Los entornos aislados (sandboxes) se utilizan comúnmente para analizar malware. Proporcionan un entorno temporal, aislado y seguro en el que observar si un archivo sospechoso presenta algún comportamiento malicioso. Sin embargo, los desarrolladores de malware también han desarrollado métodos para evadir los entornos aislados y de análisis. Uno de esos métodos consiste en realizar comprobaciones para determinar si la máquina en la que se ejecuta el malware está siendo operada por un usuario real. Una de esas comprobaciones es el tamaño de la RAM. Si el tamaño de la RAM es irrealmente pequeño (por ejemplo, 1 GB), puede indicar que la máquina es un entorno aislado. Si el malware detecta un entorno aislado, no ejecutará su comportamiento malicioso real y puede parecer un archivo benigno.
La API GetPhysicallyInstalledSystemMemory recupera la cantidad de RAM instalada físicamente en el ordenador a partir de las tablas de firmware SMBIOS. Toma un parámetro PULONGLONG y devuelve TRUE si la función se ejecuta correctamente, estableciendo TotalMemoryInKilobytes en un valor distinto de cero. Si la función falla, devuelve FALSE.

La cantidad de memoria física recuperada por la función GetPhysicallyInstalledSystemMemory debe ser igual o superior a la cantidad reportada por la función GlobalMemoryStatusEx; si es inferior, los datos SMBIOS son incorrectos y la función falla con ERROR_INVALID_DATA. Los datos SMBIOS mal formados pueden indicar un problema con el ordenador del usuario.

El registro rcx contiene el parámetro TotalMemoryInKilobytes. Para sobrescribir la dirección de salto de GetPhysicallyInstalledSystemMemory, utilizo los siguientes opcodes: mov qword ptr ss:[rcx],4193B840. Esto mueve el valor 4193B840 (o 1.1 TB) a rcx. Luego, la instrucción ret se utiliza para extraer la dirección de retorno de la pila y saltar a ella. Por lo tanto, cada vez que se llama a GetPhysicallyInstalledSystemMemory, establecerá rcx al valor personalizado.
