Наши преимущества

Компоненты для Delphi/C++Builder ~ Components for Delphi/C++Builder 6

Статус
Закрыто для дальнейших ответов.
QuickReport v5.05 for XE4 32+64 Full Source
*** скрытый блок ***

Уважаемый Вы уже второй раз (то что я
заметил) людей в заблуждение вводите,
постоянно по Вашим ссылкам попадаешь на

Как увидеть ссылки? | How to see hidden links?

Вы уж проверьте, если конечно это не
умышленно.

Прошу прощения за оффтоп
 
Уважаемый Вы уже второй раз (то что я
заметил) людей в заблуждение вводите,
постоянно по Вашим ссылкам попадаешь на

Как увидеть ссылки? | How to see hidden links?

Вы уж проверьте, если конечно это не
умышленно.

Прошу прощения за оффтоп

Да норм все, в правом верхнем углу skip нажми (после недолгого счетчика) и будет тебе счастье.
 
TMS Component Pack v6.8.2.0 for Delphi & C++Builder 5-XE3 Full Sources
Как увидеть ссылки? | How to see hidden links?

TMS Component Pack v6.8.0.1 for Delphi & C++Builder 5-XE3 Full Source with Install
Как увидеть ссылки? | How to see hidden links?

Добавлено через 11 минут
RAD Studio XE4 Architect
Как увидеть ссылки? | How to see hidden links?

Patch
Как увидеть ссылки? | How to see hidden links?

Я оставлю это сообщение для ссылок
Если еще будешь увеличивать размеры - накажу

Для IDE есть соответствующая тема
 
Cindy components 6.0 released and avaible for all from Delphi 7 to Delphi XE4!

- Windows 32 bits/64 bits development support!
- Some units in "Core" folder FireMonkey ready!

Please make any donation to support Cindy project.

Как увидеть ссылки? | How to see hidden links?

283539.jpg

x1.jpg

cyBook.jpg

210830.jpg

234287.jpg

cyPageControl.jpg


Mauricio
 
Последнее редактирование модератором:
Injector

Компонент для инжекта dll в выбранный процесс

Инжект из 64 битных процессов в 32/64 битные в Windows 64 бит, из 32 битных процессов в 32 битные в Windows 32/64 бит

Windows 2003/XP/Vista/7/8

Delphi XE2, XE3, XE4, 32/64 бит DCU

Как увидеть ссылки? | How to see hidden links?
 
Последнее редактирование модератором:
Компонент для инжекта dll в выбранный процесс

Инжект из 64 битных процессов в 32/64 битные в Windows 64 бит, из 32 битных процессов в 32 битные в Windows 32/64 бит

Windows 2003/XP/Vista/7/8

Delphi XE2 32/64 бит DCU
Я надеюсь, что ты просто толстый троль, потому что только слабоумные могут пытаться продать Как увидеть ссылки? | How to see hidden links? Как увидеть ссылки? | How to see hidden links? за 300 баксов.

Для тех, кому лень ходить по ссылкам ниже код который использую я.

Код:
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;
 
Последнее редактирование модератором:
Я надеюсь, что ты просто толстый троль, потому что только слабоумные могут пытаться продать Как увидеть ссылки? | How to see hidden links? Как увидеть ссылки? | How to see hidden links? за 300 баксов.

Все это не будет работать если вы хотите из под 64 битного процесса инжектировать в 32 битный процесс

32 бит процесс -> 32 бит процесс
64 бит процесс -> 64 бит процесс
64 бит -> 32 бит не получится

Нет юникода

В Windows 8 - 100% не будет работать UnInject

Вообще что бы выгрузить "чужую" dll нужно сначала установить счетчик Load Count = 1, в Windows 8 уже так не прокатывает

Дальше почитайте "Попробывал сделать инжект длл к другому процессу, но дллка не присоединилась. Код идентичный, что здесь. Почему не получается? Win7 x64"

Абсолютно рабочий компонент пользуйтесь DCU как хотите, в чем проблема?
 
Последнее редактирование модератором:
Код:
pThreadStart := GetProcAddress(GetModuleHandle('KERNEL32.DLL'), PAnsiChar('LoadLibraryA'));

Полный бред, вы получаете адрес функции LoadLibraryA из KERNEL32.DLL в своем процессе, нужно прочитать память процесса в который будете внедрять dll и там найти адрес функции LoadLibrary и уже тогда CreateRemoteThread

Добавлено через 16 минут
Ответьте что будет если в вашем процессе будет установлен hook на функцию LoadLibrary, так например делают антивирусы для самозащиты
 
Последнее редактирование модератором:
Статус
Закрыто для дальнейших ответов.
Верх