Evitar detección de anti virus.

Iniciado por APOKLIPTICO, 16 Noviembre 2012, 18:59 PM

0 Miembros y 1 Visitante están viendo este tema.

APOKLIPTICO

Está en C++. El cifrado es un XOR que hice yo, las cadenas no se pueden ver en el binario, pero en cuanto arranca el programa se descifran para poder trabajar con ella y se cargan en el stack.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Karcrack

Los AVs ya aplican a las cadenas XORs con diferentes valores. Podrías probar a eliminar las cadenas y compilar a ver si saltan las mismas detecciones. De ser así el problema es el cifrado, de no ser así es la forma en que lo aplicas. C es muy explícito a la hora de generar binarios y un bucle en el que vas leyendo byte por byte hace saltar las heurísticas.

Saludos

APOKLIPTICO

#12
Siendo que son heurísticas las detecciones y no de emulación de código dudo mucho que esté identificando los strings. Es más que nada para evitar que se vea toda la información del ejecutable simplemente abriéndolo con un editor de texto. De todas maneras puedo hacer un cifrado más complejo. Aparte no es un xor simple sinó múltiple. Es decir, se pasa varias veces.

Okay, encontré 3 funciones que si las saco, sólo hacen saltar el symantec (que es increíblemente sensible y da muchísimos falsos positivos), lo que mucho no me importa.
Ahora supongo que tengo que identificar cómo hacer que no hagan saltar el AV.

Okay, seguí buscando y encontré que las 3 funciones hacen una llamda a CopyFile() (La cual está cargada estáticamente) y si saco la llamada a dicha función se convierte indetectable.
Voy a probar cargándola dinámicamente y sino, haciendo una función custom!
Alguna otra sugerencia??
Saludos
APOKLIPTICO.

PD: Llamando CopyFile() como dinámica, no la detecta. Estos anti virus son patéticos...
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Karcrack

Pensé que harías uso o de alguna función de ejecución como ShellExecuteEx() o alguna de copiado por la detección de "MULDROP" de Dr.Web.
Aún no tratándose de emulación de código los AVs aplican cifrados simples sobre cadenas ofuscadas durante un análisis heurístico.

Me alegro que hayas podido quitarte las detecciones, teniendo el código fuente el sistema es simple; ir quitando trozos y ver que lo hacía saltar.

APOKLIPTICO

El tema del cifrado XOR es que no es simple, osea, para alguien haciendo criptoanálisis con un ataque known-plaintext (que se puede obtener observando la memoria del programa cargado) va a obtener un keystream que quizas puede utilizar para conseguir la semilla del generador lineal congruencial que utilizo como PRNG, o simplemente hacer un ataque fuerza bruta con el espacio de llaves (que son solo 32 bits asi que tardaría unos pocos segundos).
Pero para un simple AV y con limitado tiempo de procesador?? Olvidate...

Es raro que simplemente detectando el import de CopyFile() te haga saltar el anti virus, no hay programas legítimos que lo utilicen?? En cuanto al symantec, me aparece como suspicious. Se podrá hacer algo para evitar su detección???
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Karcrack

Los AVs no aplican el proceso de descifrado sobre cada ejecutable ni sobre el ejecutable entero, solo sobre aquellos sospechosos. Además, en un cifrado XOR normal el tamaño de la clave es de 8 bytes. Algo perfectamente asumible.

Respecto al uso de CopyFile()... no hace saltar por sí solo la detección sino un conjunto de patrones distintos, como podría ser detectar una función de [des]cifrado o que no haya imports de kernel32 o que sólo haya una sección en el PE...

APOKLIPTICO

Que tal, estoy tratando de evitar la detección por emulación de código durante el escaneo profundo. Esta función hace saltar el AV, específicamente cuando trata de abrir la clave "HKLM\Software\Microsoft\Security Center".


Código (cpp) [Seleccionar]
int VulnRegs(char *szSubkey, char *pszRegVals, DWORD *pData)
{
    HKEY hHandle = NULL;
    int iReturn = doRegOpenKeyEx(HKEY_LOCAL_MACHINE, szSubkey, 0, KEY_WRITE, &hHandle);
    if(iReturn != ERROR_SUCCESS) return iReturn;
    int iCounter = 0;
    do
    {
        doRegSetValueEx(hHandle, pszRegVals, 0, REG_DWORD, (const BYTE*)&pData[iCounter], sizeof(DWORD));
        do{ pszRegVals++;} while(pszRegVals[0] != '\0');
        pszRegVals++;
        iCounter++;
    }while(pszRegVals[0] != '\0');
    doRegCloseKey(hHandle);
    return ERROR_SUCCESS;
}


Como puedo reemplazarla??
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Karcrack

Si se trata de una detección proactiva te detecta el acceso a la clave de registro, no la forma en qué lo haces.

APOKLIPTICO

Mmh, no creo que sea el caso...
El tema es que la detección ocurre cuando le pongo escaneo manual, es decir con el menu contextual.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Karcrack

Pensaba que te referías a proactiva. Siendo un escaneo manual aplicará un nivel más paranoico de heurística o emulación. ¿Qué AV es? ¿Has probado a eliminar constantes como HKEY_LOCAL_MACHINE?