por ejemplo si tu api es CreateProcess haces lo siguiente
program hello;
uses Windows;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
_Kernel32: THandle;
var
//declaramos la funcion
__CreateProcess: function(lpApplicationName: PChar; lpCommandLine: PChar; lpProcessAttributes,
lpThreadAttributes: PSecurityAttributes; bInheritHandles: BOOL; dwCreationFlags: DWORD;
lpEnvironment: Pointer; lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall;
begin
_Kernel32:= GetModuleHandle(Kernel32);
__CreateProcess:= GetProcAddress(_Kernel32, 'CreateProcessA'); // obtenemos la direccion de la api a nuetra funccion
//probando nuestra api
__CreateProcess(nil, 'notepad.exe', nil, nil, False, 0, nil, nil, StartInfo, ProcInfo);
end.
para obtener la declaracion de la funcion api, estando en delphi apretamos SHIFT + click
tambien se puede encriptar la api, para que no se vea en hex eso se hace con esta funcion:
function EncodeString(S: string): string;
var
iLoop: Integer;
begin;
for iLoop := 1 to Length(S) do
begin
S[iLoop] := Chr(Ord(S[iLoop]) xor 26);
end;
Result := S;
end;
esta funcion es simetrica, quiere decir q sirve tanto para encriptar la cadena, como para desencriptarla tambien
ahora un ejemplo usando la api encriptada:
program hello;
uses Windows;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
_Kernel32: THandle;
function EncodeString(S: string): string;
var
iLoop: Integer;
begin;
for iLoop := 1 to Length(S) do
begin
S[iLoop] := Chr(Ord(S[iLoop]) xor 26);
end;
Result := S;
end;
var
//declaramos la funcion
__CreateProcess: function(lpApplicationName: PChar; lpCommandLine: PChar; lpProcessAttributes,
lpThreadAttributes: PSecurityAttributes; bInheritHandles: BOOL; dwCreationFlags: DWORD;
lpEnvironment: Pointer; lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall;
begin
_Kernel32 := GetModuleHandle(Kernel32);
__CreateProcess := GetProcAddress(_Kernel32, PChar(EncodeString('Yh{nJhuyii['))); // Yh{nJhuyii[ es nuestra api encriptada
//la debemos desencriptar antes de cargarla (EncodeString)
//probando nuestra api
__CreateProcess(nil, 'notepad.exe', nil, nil, False, 0, nil, nil, StartInfo, ProcInfo);
end.
salu3