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