inject dlla do programu

0

kiedy dolaczam swoja dllke do jakiegos programu i probuje operowac na pamieci tegoz programu, dostaje blad access violation - ktos moze mnie oswiecic i powiedziec czym to jest spowodowane i jak obejsc/wylaczyc/zrobic tak by program nie blokowal mi dostepu do pamieci?

0

Napisz jakieś szczegóły, bo to może mieć różne przyczyny... Tak Ci nikt nie pomoże, ale jeśli zaczynasz programować i używasz tablic dynamicznych to lepiej się im przyjrzyj :-)

0

nothing to do z tablicami dynamicznymi

po prostu mam program i chcac czytac z pamieci bez uzywania readprocessmemory, tylko pointerami injectuje dllke do tejze aplikacji i dziala, ale kiedy chce cos odczytac to access violation

kumpel mi napomknal cos o thread safety, ale nie wiem jak to obejsc

0

jak tą dllkę wstrzykujesz, hm? Bo większość 'programistów delphi' nie wie, że istnieją odrębne przestrzenie adresowe dla każdego programu, programy nie widzą się wzajemnie...

0

lol, ale ten art jest o ładowaniu dll w przestrzeni adresowej Twojego procesu... Po jakiegoś grzyba wymyślono w Intelu tryb chroniony aby utrudnić bezpośrednią interakcję pomiędzy procesami... Czyli miałem rację pisząc w czudzysłowiu 'programistów delphi' - jak zwykle nie mają pojęcia o organizacji pamięci...

0

wiec jakies inne pomysly, jak wrzucic swoja dllke do programu?

na pewno da sie to zrobic, tylko jak?

0

Coldpeer iniekcja dllki to ładowanie jej w inny proces, a w podanych przez Ciebie artach są tylko informacje o pracy z własnym procesem. Odnoszę wrażenie, że autor tematu sam nie wie czego chce, ale... Jako, że nie piszę w delphi, gdyby ktoś był tak miły - mógłby to przepisać z C++.

bool InjectDll2 (HANDLE hProcess, char* pLibName)
{
  DWORD ExitCode;

	FARPROC LoadLib = GetProcAddress (GetModuleHandle ("kernel32.dll"), "LoadLibraryA");

	void* pMem = VirtualAllocEx (hProcess, 0, MAX_PATH, MEM_COMMIT, PAGE_READWRITE);

	WriteProcessMemory(hProcess, pMem, pLibName, lstrlen (pLibName), 0);

	HANDLE hThread = CreateRemoteThread (hProcess, 0, 0, (LPTHREAD_START_ROUTINE) LoadLib, pMem, 0, &ExitCode);
	WaitForSingleObject (hThread, INFINITE);
	GetExitCodeThread (hThread, &ExitCode);
	
	VirtualFreeEx (hProcess, pMem, MAX_PATH, MEM_DECOMMIT);
	/* ExitCode zawiera adres zaladowanej biblioteki lub 0 jesli zaladowanie sie nie powiodlo */	
	return (ExitCode);
};

Jako, że LoadLibrary przyjmuje taką samą liczbę argumentów co THREAD_START_ROUTINE można wywołać LL bezpośrednio w 'atakowanym' procesie bez wstrzykiwania własnego kodu. Należy jednak umieścić w przestrzeni adresowej programu nazwę dll'ki do załadowania... i przekazać jej adres jako argument wątku. Jedna z moich kilku procek do iniekcji, najprostsza i w większości wypadków wystarczająca... przykład wywołania:

InjectDll2 (GetCurrentProcess(), "dllek.dll");

Jak już pisałem, gdyby ktoś był tak miły...

0

Dałoby radę, żeby ktoś pomógł? ;)

0

Nie sprawdzałem czy działa, sprawdziłem tylko czy się kompiluje:

function InjectDll2(hProcess: Cardinal; pLibName: PChar): Boolean;
var
  ExitCode: DWORD;
  LoadLib: FARPROC;
  pMem: Pointer;
  lpNumberOfBytesWritten, hThread: Cardinal;
begin
  LoadLib := GetProcAddress (GetModuleHandle('kernel32.dll'), 'LoadLibraryA');

  pMem := VirtualAllocEx (hProcess, nil, MAX_PATH, MEM_COMMIT, PAGE_READWRITE);

  WriteProcessMemory (hProcess, pMem, pLibName, lstrlen(pLibName), lpNumberOfBytesWritten);

  hThread := CreateRemoteThread (hProcess, nil, 0, LoadLib, pMem, 0, ExitCode);
  WaitForSingleObject (hThread, INFINITE);
  GetExitCodeThread (hThread, ExitCode);
  VirtualFreeEx (hProcess, pMem, MAX_PATH, MEM_DECOMMIT);

  Result := ExitCode <> 0;
end;
0

Dzięki, zaraz sprawdzę.

0

Dobra, niby inject działa. Ale nic nie moge z dllką zrobić... Nie działa nic, nawet msgboxa mi nie chce wyświetlić. WTF?!

1 użytkowników online, w tym zalogowanych: 0, gości: 1