QuickReport v5.05 for XE4 32+64 Full Source
*** скрытый блок ***
Уважаемый Вы уже второй раз (то что я
заметил) людей в заблуждение вводите,
постоянно по Вашим ссылкам попадаешь на
Для просмотра ссылки Войдиили Зарегистрируйся
Вы уж проверьте, если конечно это не
умышленно.
Прошу прощения за оффтоп
TMS Component Pack v6.8.2.0 for Delphi & C++Builder 5-XE3 Full Sources
Для просмотра ссылки Войдиили Зарегистрируйся
TMS Component Pack v6.8.0.1 for Delphi & C++Builder 5-XE3 Full Source with Install
Для просмотра ссылки Войдиили Зарегистрируйся
Добавлено через 11 минут
RAD Studio XE4 Architect
Для просмотра ссылки Войдиили Зарегистрируйся
Patch
Для просмотра ссылки Войдиили Зарегистрируйся
Я надеюсь, что ты просто толстый троль, потому что только слабоумные могут пытаться продать Для просмотра ссылки ВойдиКомпонент для инжекта dll в выбранный процесс
Инжект из 64 битных процессов в 32/64 битные в Windows 64 бит, из 32 битных процессов в 32 битные в Windows 32/64 бит
Windows 2003/XP/Vista/7/8
Delphi XE2 32/64 бит DCU
const
DllName = 'thread_splice_lib.dll';
function InjectLib(ProcessID: Integer): Boolean;
var
Process: HWND;
ThreadRtn: FARPROC;
DllPath: AnsiString;
RemoteDll: Pointer;
BytesWriten: DWORD;
Thread: DWORD;
ThreadId: DWORD;
begin
Result := False;
// Открываем процесс
Process := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or
PROCESS_VM_WRITE, True, ProcessID);
if Process = 0 then Exit;
try
// Выделяем в нем память под строку
DllPath := AnsiString(ExtractFilePath(ParamStr(0)) + DLLName) + #0;
RemoteDll := VirtualAllocEx(Process, nil, Length(DllPath),
MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if RemoteDll = nil then Exit;
try
// Пишем путь к длл в его адресное пространство
if not WriteProcessMemory(Process, RemoteDll, PChar(DllPath),
Length(DllPath), BytesWriten) then Exit;
if BytesWriten <> DWORD(Length(DllPath)) then Exit;
// Получаем адрес функции из Kernel32.dll
ThreadRtn := GetProcAddress(GetModuleHandle('Kernel32.dll'), 'LoadLibraryA');
if ThreadRtn = nil then Exit;
// Запускаем удаленный поток
Thread := CreateRemoteThread(Process, nil, 0, ThreadRtn, RemoteDll, 0, ThreadId);
if Thread = 0 then Exit;
try
// Ждем пока удаленный поток отработает...
Result := WaitForSingleObject(Thread, INFINITE) = WAIT_OBJECT_0;
finally
CloseHandle(Thread);
end;
finally
VirtualFreeEx(Process, RemoteDll, 0, MEM_RELEASE);
end;
finally
CloseHandle(Process);
end;
end;
function ResumeLib(ProcessID: Integer): Boolean;
var
hLibHandle: THandle;
hModuleSnap: THandle;
ModuleEntry: TModuleEntry32;
OpCodeData: Word;
Process: HWND;
BytesWriten: DWORD;
Thread: DWORD;
ThreadId: DWORD;
ExitCode: DWORD;
PLibHandle: PDWORD;
OpCode: PWORD;
CurrUnloadAddrOffset: DWORD;
UnloadAddrOffset: DWORD;
begin
Result := False;
// рассчитываем оффсет адреса выгрузки библиотеки относительно адреса ее загрузки
hLibHandle := LoadLibrary(PChar(DLLName));
try
UnloadAddrOffset :=
DWORD(GetProcAddress(hLibHandle, 'SelfUnload')) - hLibHandle;
if UnloadAddrOffset = -hLibHandle then Exit;
finally
FreeLibrary(hLibHandle);
end;
// Находим адрес библиотеки в чужом адресном пространстве
hModuleSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessID);
if hModuleSnap <> INVALID_HANDLE_VALUE then
try
FillChar(ModuleEntry, SizeOf(TModuleEntry32), #0);
ModuleEntry.dwSize := SizeOf(TModuleEntry32);
if not Module32First(hModuleSnap, ModuleEntry) then Exit;
repeat
if AnsiUpperCase(ModuleEntry.szModule) =
AnsiUpperCase(DLLName) then
begin
// Получаем адрес функции выгрузки
CurrUnloadAddrOffset := ModuleEntry.hModule + UnloadAddrOffset;
Break;
end;
until not Module32Next(hModuleSnap, ModuleEntry);
finally
CloseHandle(hModuleSnap);
end;
// Открываем процесс
Process := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or
PROCESS_VM_WRITE, True, ProcessID);
if Process = 0 then Exit;
try
// Пишем опкод jmp [ebx]
OpCode := VirtualAllocEx(Process, nil, 2,
MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if OpCode = nil then Exit;
try
OpCodeData := $23FF;
if not WriteProcessMemory(Process, OpCode, @OpCodeData,
2, BytesWriten) then Exit;
// Пишем адрес функции выгрузки (он будет лежать в EBX при старте потока)
PLibHandle := VirtualAllocEx(Process, nil, 4,
MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if PLibHandle = nil then Exit;
try
if not WriteProcessMemory(Process, PLibHandle, @CurrUnloadAddrOffset,
4, BytesWriten) then Exit;
// запускаем поток
Thread := CreateRemoteThread(Process, nil, 0, OpCode,
PLibHandle, 0, ThreadId);
if Thread = 0 then Exit;
try
// Ждем пока удаленный поток отработает...
if (WaitForSingleObject(Thread, INFINITE) = WAIT_OBJECT_0) then
if GetExitCodeThread(Thread, ExitCode) then
Result := ExitCode = 0;
finally
CloseHandle(Thread);
end;
finally
VirtualFreeEx(Process, PLibHandle, 0, MEM_RELEASE);
end;
finally
VirtualFreeEx(Process, OpCode, 0, MEM_RELEASE);
end;
finally
CloseHandle(Process);
end;
end;
Я надеюсь, что ты просто толстый троль, потому что только слабоумные могут пытаться продать Для просмотра ссылки Войдиили Зарегистрируйся Для просмотра ссылки Войдиили Зарегистрируйся за 300 баксов.
pThreadStart := GetProcAddress(GetModuleHandle('KERNEL32.DLL'), PAnsiChar('LoadLibraryA'));