Esta es una muestra de troyano que puede evadir la gran mayoría de antivirus y sandboxes
A continuación explicaré las tecnologías involucradas en el troyano; me centraré en dos aspectos: el shellcode y el loader.
Sección del loader
1.Anti-sandbox
Es bien sabido que la detección anti-sandbox convencional se basa en operaciones sobre la CPU, la memoria, el disco duro, etc. del host. Sin embargo, personalmente considero que este enfoque no es adecuado, porque algunos antivirus o sandboxes en la nube detectan las funciones anti-sandbox y supervisan algunas API sensibles, lo que puede hacer que seamos detectados. Por lo tanto, mi idea es detectar los accesos directos del escritorio, como los de software de uso común como QQ, WeChat y DingTalk, para evadir las sandboxes en la nube.
2.Recarga de ntdll e invocación dinámica de API
El mecanismo de detección de los antivirus comunes consiste en enganchar (hookear) algunas API sensibles. Por lo tanto, mediante la recarga de ntdll y la invocación dinámica de API podemos evitar los hooks y lograr la funcionalidad. En cuanto a la recarga de ntdll, se carga la ntdll.dll original desde el directorio del sistema y se reemplaza el segmento de código (.text) de la ntdll enganchada en el proceso actual por el código original. La invocación dinámica de API consiste en recorrer la tabla de exportaciones de la DLL de destino, hacer coincidir el nombre de la función mediante un hash para obtener la dirección de la función objetivo y ejecutarla mediante un puntero.
3.Separación de shellcode y loader
Sección de shellcode
Método de uso
Primero, utilice encode.cpp para cifrar el shellcode. Si va a escribir el shellcode en el exe, colóquelo en el array mac_shellcode de Unseparation_shellcode.cpp. Si desea lograr la separación de parámetros, puede ejecutar directamente el exe que compilé junto con el shellcode.
Gracias por leer.
Versión en inglés
Esta es una muestra de troyano que puede evadir la gran mayoría de antivirus y sandboxes. A continuación explicaré las tecnologías involucradas en el troyano, centrándome tanto en el shellcode como en el loader.
Sección del loader
1. Anti-sandbox
Es bien sabido que la detección convencional de las funciones anti-sandbox se basa en operaciones sobre la CPU, la memoria, el disco duro, etc. del host. Sin embargo, personalmente creo que este enfoque no es ideal, porque algunos antivirus o sandboxes en la nube supervisan las funciones anti-sandbox y vigilan las API sensibles, lo que puede conducir a la detección. Por lo tanto, mi idea es detectar los accesos directos del escritorio, como los de software de uso común como QQ, WeChat y DingTalk, para evadir las sandboxes en la nube. 
2. Recarga de ntdll e invocación dinámica de API
El mecanismo de detección del software antivirus general consiste en enganchar (hookear) algunas API sensibles. Por lo tanto, podemos evitar los hooks y lograr la funcionalidad utilizando las técnicas de recarga de ntdll e invocación dinámica de API. La parte de recarga de ntdll implica cargar la ntdll.dll original desde el directorio del sistema y reemplazar el segmento de código (.text) de la ntdll enganchada en el proceso actual por el código original. La invocación dinámica de API consiste en recorrer la tabla de exportaciones de la DLL de destino, hacer coincidir el nombre de la función mediante un hash, obtener la dirección de la función objetivo y ejecutarla mediante un puntero.
3. Separación de shellcode y loader
Además de la codificación para evadir el antivirus, el shellcode también puede separarse del loader. Si el shellcode no está incluido en el archivo exe, al software antivirus le resultará bastante difícil detectar cualquier problema.
La sección de shellcode se somete principalmente a un procesamiento de ofuscación multicapa, que involucra XOR, RC4, base64 y MAC. La salida final está en formato de dirección MAC, aprovechando la tolerancia de Windows hacia las cadenas en formato MAC.
Método de uso
Primero, utilice encode.cpp para cifrar el shellcode. Si escribe el shellcode en un archivo exe, colóquelo en el array mac_shellcode de Unseparation_shellcode.cpp. Si desea lograr la separación de parámetros, puede ejecutar directamente el exe compilado junto con el shellcode.
Gracias por leer.