Los antivirus analizan los nombres de las funciones de tu programa ?

Iniciado por patilanz, 24 Enero 2015, 22:03 PM

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

patilanz

Hola estoy creando una especie de troyano keylogger y algo mas para probar y el antivirus me lo detecto en tiempo de ejecutacion antes de haber lo completado  :-X

Bueno tengo funciones que se llaman algo por el estilo de infect. No se si es algo estúpido pero no se como analizan los ejecutables. Analizan partes para ver si se parecen a otros virus o como ?

Alguien me puede orientar a cerca de como analizan los antivirus los ejecutables ?

Saludos

@Edit: Mi programa se autocopia, autoejecuta al inicio cambiando el registro, crea archivos de configuración con nombres codificados, se conecta con un servidor en modo de http con el puerto 80 para obtener información y recibir los comandos, captura la pantalla y las teclas con hook globales. Los dos últimos no están del todo listos y probé con quitar los para comprobar si es por esto pero no . Creo que es por la función infect.

r32

El tema es bastanta amplio, va a depender de que dependécias y librerias uses, sin no cifras nada el antivirus, si se precia  un poco detectará todas esas modificaciones y lo enviará a cuarentena.
Da igual las veces que compiles, por si al hash te refieres, seguirá saltando.
Ofusca el código, usa códigos que no estén muy quemados, si lo creas tu de cero no he dicho nada, entonces te tocará combiar de estraégia y empaparte de que forma analizan los AV un fichero, cada cual a su forma, a parte de ejecución interna en sandox, depende del AV...

Saludos.

engel lex

los nombres de la funcion como tal en el codigo no... eso no queda al compilarse hasta donde se, si no la ing inversa de los programas sería mucho más facil, me parece...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Bundor

Antes usaban una lista de firmas pero creció tanto que se hizo inviable tener que pasar millones de firmas a cada archivo. Entonces hicieron una especie de imagen en función del comportamiento.

Lo que no tengo claro si ha quedado fifty-fifty un poco de aquí y de allá es decir firmas e imagenes.

Lo de ofuscar es buena idea.

patilanz

#4
Cita de: engel lex en 25 Enero 2015, 02:53 AM
los nombres de la funcion como tal en el codigo no... eso no queda al compilarse hasta donde se, si no la ing inversa de los programas sería mucho más facil, me parece...

Yo lo compilo con visual studio y si que quedan los nombres tal cual con sus argumentos.



Cita de: r32 en 25 Enero 2015, 02:48 AM
entonces te tocará combiar de estraégia y empaparte de que forma analizan los AV un fichero, cada cual a su forma, a parte de ejecución interna en sandox, depende del AV...
Saludos.

Como consigo esta información, la manera que lo analizan.

He analizado mi archivo con virus total y no me lo detecto ninguna pero en tiempo de ejecutacion si.
Es bueno utilizar virus total ya que subes tu archivo a su base de datos y supongo que sera utilizado por algunos antivirus ?

Cita de: Bundor en 25 Enero 2015, 08:55 AM
Antes usaban una lista de firmas pero creció tanto que se hizo inviable tener que pasar millones de firmas a cada archivo. Entonces hicieron una especie de imagen en función del comportamiento.

Lo que no tengo claro si ha quedado fifty-fifty un poco de aquí y de allá es decir firmas e imagenes.

Lo de ofuscar es buena idea.

Ofuscar en plan de llamar a funciones a parte para realizar diferentes tareas, cambiar el lugar de las lineas de código ? A que te refieres?

Que es fifty-fifty  :)

Ahora voy a quitar partes del código, la función de inyecta para ver que es lo que hace que el antivirus salte a 20

@Edit: Vale ya tengo la parte del código que hace que el antivirus salte. Es la copia del archivo exe a la primera carpeta de appdata que encuentre y en la que se puede copiar. Ahora intentare cambiar partes a ver que tal y si no lo publico aquí.

Bundor

Por ofuscar entiendo utilizar técnicas que permitan distorsionar el código de forma que una persona o antivirus no pueda comprenderlo. Puedes utlizar una o varias técnicas complejas para hacerlo.

Ofuscar código: http://wiki.killtrojan.net/tecnicas-viricas/ofuscacion


Con fifty-fifty me referí a mitad y mitad. Pero no sé con exactitud si se han desechado las firmas o coexisten imagenes y firmas. Me imagino que cualquier técnica que les permita detectar mas y mas seguirá vigente.






patilanz

#6
Gracias por el link, lo vi pero voy a intentar lo en el siguiente malware, con este quiero algo mas simple.
Lo que hace que el antivirus salte es esta parte del código:

Código (cpp) [Seleccionar]
WIN32_FIND_DATA findData;
HANDLE firstFile = FindFirstFile((string(getenv("programdata")) + "\\*").c_str(), &findData);
while (FindNextFile(firstFile, &findData) != 0){
c.setpPath("");
if (strcmp(findData.cFileName, ".") == 0 || strcmp(findData.cFileName, "..") == 0)
continue;
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
c.setpPath(string(getenv("programdata")) + "\\" + findData.cFileName);
string where = c.getpPath() + "\\" + findData.cFileName + ".exe";
if (copyFile(fileName, where)){
c.setpName(findData.cFileName);
log << "\nExe copied to " << c.getpPath() + "\\" + findData.cFileName + ".exe";
break;
}
else{
log << "\nExe failed copy to " << c.getpPath() + "\\" + findData.cFileName + ".exe" << ". ";
printError(log);
}
}
}


Buscar una carpeta en la appdata en la que no hay archivo con el mismo nombre y se copia ahí. La funcion copyFile la escribí después de que me lo detectase con CopyFile de la api de windows.
Seguí intentando y cambia la función copyFile de modo que abro el archivo en binario pero luego cojo todo carácter por carácter y lo guardo en un string para escribir lo en el nuevo archivo.

Código (cpp) [Seleccionar]
if (ffile.good()){
ofstream tfile(to, ofstream::binary);
string strBuffer = "";
streambuf * copyBuffer = ffile.rdbuf();
while (copyBuffer->sgetc() != EOF){
strBuffer += copyBuffer->sbumpc();
}
for (int i = 0; i < strBuffer.size(); i++){
tfile.put(strBuffer[0]);
}


if (tfile.good())
return true;
return false;
}
else{
return false;
}


La copia es un poco rara pero me salta el antivirus justo en esta parte strBuffer += copyBuffer->sbumpc();
Es como si esta esperando que haga una acción de leer el ejecutable o algo así para detectar.


Seria una buena idea inyectar una dll por ejemplo a iexplorer que me copie el archivo ?


@Edit: Consegui hacer que no lo detecte y seguí con el programa pero en unos 3 o 4 "debuggings" al final volvió a detectarlo en casi el mismo sitio.
Mi conclusión: Creo que al auto copiarse muchas veces por las pruebas que hago con el antivirus activo al final lo detecta pero no la primera vez.


Que tal esta mi conclusión  ;D?

Rodri_GO

Hola..

Sin ser un experto en el tema.. no creo que los antivirus se pongan a desensamblar ejecutables y ver si aparece alguna funcion con un nombre estrano. Con ese criterio saltarian como virus un monton de programas que no son malware por tener un nombre "sospechoso".

Sin ver tu codigo en profundidad creo que el antivirus esta haciendo una deteccion por heuristica o comportamiento. Debe haber alguna llamada a alguna api de tal forma que haga sospechar al antivirus que estas haciendo "mal uso" de tal api o bien como dices algun algoritmo en cuestion que levanta la alerta.

Saludos.