Ver Mensaje Individual
  #35  
Antiguo 10-11-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Reputación: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Probado el código de Neftalí este funciona como se espera y me convence más que el uso de la función "SetDefaultDllDirectories" y la posterior comprobación de la existencia de la DLL maliciosa. El código podría quedar poco más o menos que como se ve abajo, siendo la unidad en cuestión situada la primera en el "uses" del archivo de proyecto del programa:

Código Delphi [-]
unit Cracker.Welcome;

interface

implementation

uses
  // Delphi
  Winapi.Windows,
  Winapi.TlHelp32,
  System.SysUtils;

var
  H: THandle;
  M: TModuleEntry32;

initialization

  H := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, 0);
  Win32Check(H <> INVALID_HANDLE_VALUE);
  try
    M.dwSize := Sizeof(M);
    Win32Check(Module32First(H, M));
    repeat
      if LowerCase(ExtractFileExt(M.szExePath)) = '.dll' then
      begin
        if ExtractFilePath(M.szExePath) = ExtractFilePath(ParamStr(0)) then
        begin
          Halt(1);
        end;
      end;
    until not Module32Next(H, M);
  finally
    CloseHandle(H);
  end;

end.

Dicho código supone que en el directorio del ejecutable del programa no debe existir DLL alguna. Me queda la duda de si debo cerrar el "handle" antes del "Halt"...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita