Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Przekierowywanie listy skanowania PB (Theory)
#1
Czy kiedykolwiek żałowałeś, że nie możesz po prostu powiedzieć punkbusterowi, żeby zeskanować inny plik? Lub powiedzieć punkbuster, co skanować? Jeśli tak, ten wątek może ci przeszkadzać.     Uwaga: Jest to tylko teoria, która w tej chwili nie jest testowana. Uwaga: Poniższa procedura nie jest definicja, tylko metoda, której użyłbym, gdybym kodował punkbuster   Najpierw zapoznaj się z następującymi funkcjami:   VirtualProtect ()       Kod:   BOOL VirtualProtect (LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect)   VirtualQuery ()       Kod:   SIZE_T VirtualQuery (LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength);   VirtualAlloc ()       Kod:   LPVOID VirtualAlloc (LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);   GetProcAddress ()       Kod:   FARPROC WINAPI GetProcAddress (HMODULE hModule, LPCSTR lpProcName)   Po ogólnym zrozumieniu tych funkcji kontynuuj czytanie poniżej. -------------------------------------------------- ---------------------------   Dla mojej demonstracji zamierzam użyć metody zaczepiania Evilhack.       Kod:   DWORD OldProtect; hOriginalDll = GetModuleHandle ("d3d8.dll"); pDirect3DCreate8 = (pDirect3DCreate8_t) GetProcAddress (hOriginalDll, "Direct3DCreate8");   Jeśli nie rozumiesz, co się tutaj dzieje, powiem ci (powinieneś jednak ponownie przeczytać o GetProcAddress !!).   W skrócie, wołasz o adres dla funkcji Direct3dCreate8 z pliku dll d3d8.dll. GetModuleHandle służy do zlokalizowania d3d8.dll na liście załadowanych modułów. Teraz możesz użyć pDirect3DCreate8, aby zastąpić lub przejąć funkcję Direct3dCreate8.   Teraz, jeśli jestem punkbuster to wiem, jak dowiedzieć się, czy ta funkcja jest podłączona. W jaki sposób? Cóż, podpinając tę funkcję, modyfikujesz pierwsze kilka bajtów. Istnieje kilka funkcji, których można użyć, aby dowiedzieć się, czy tak się stało. Masz więc wybór - A i B. Zacznę od A, ponieważ jest on pierwszy w alfabecie: P     Ukrywanie haka // Sprzątanie bałaganu   Przyjrzyjmy się tabeli importu Punkbuster (IAT) i zlokalizuj VirtualQuery (). W tym momencie Punkbuster wyeksportował już tę funkcję z własnymi parametrami i przeznaczeniem. Kod, na który należy zwrócić uwagę, to:       Kod:   typedef struct _MEMORY_BASIC_INFORMATION {PVOID BaseAddress; PVOID AllocationBase; ULONG AllocationProtect; ULONG RegionSize; ULONG State; ULONG Protect; ULONG Type; } MEMORY_BASIC_INFORMATION, * PMEMORY_BASIC_INFORMATION;     Zacytować:         Originally Posted by Holy_Father     Każda sekcja pamięci ma swój rozmiar RegionSize i jego typ Type. Darmowy pamięć ma typ MEM_FREE.         Co to oznacza, jeśli nasz hak jest tam, tam jest nasza pamięć. Jeśli nie powinno tam być, punkbuster będzie wiedział o tym i będzie głupio. Pomyślmy więc o sposobie, w jaki będziemy zachowywać się jak punkbuster. Postaram się użyć anologii, nagiej ze mną, bo może być do dupy. Powiedzmy, że jesteś śmierdzącym gościem / pisklęciem i jesteś obok kogoś, kogo lubisz. Nie chcesz, żeby zauważyli twoje oszołomienie, więc co robisz? Umieszczasz inny zapach niż twój (colone / perfumy) i / lub prysznic (sugeruje). W tej sytuacji powinieneś użyć tej samej techniki dla swojego kodu.   Jak ty to robisz? Proste, przechwytujące VirtualQuery, zmień parametr PMEMORY_BASIC_INFORMATION lpBuffer na taki, jaki powinien być. Jeśli ma być zero pamięci, zmień na MEM_FREE. Jednak powiedzmy, że MEM_FREE jest także po naszej sekcji. W takim przypadku, moja sugestia polega na znalezieniu regionu, w którym powinniśmy się znajdować przed zahaczeniem. Aby się tego dowiedzieć, użyj funkcji VirtualQuery (oczywiście) i zwróć ją za pomocą haka. Jesteś tu ze mną? Mam taką nadzieję, ponieważ opcja B może stać się o wiele bardziej skomplikowana ... Zwłaszcza ze mną to wyjaśniając.      Opcja B - Przekierowanie funkcji eksportu Punkbustera GetProcAddress      Uwaga: to moja teoria, nie ma dowodów na to, że to prawda, ponieważ nie wyglądałem (nie mam do tego odpowiednich plików - gra z pb)   Jeśli jestem punkbusterem i chcę wykryć ten kod:     Kod:   DWORD OldProtect; hOriginalDll = GetModuleHandle ("d3d8.dll"); pDirect3DCreate8 = (pDirect3DCreate8_t) GetProcAddress (hOriginalDll, "Direct3DCreate8");   Potem tworzę własnego porywacza EAT. Zrozumienie, jak to działa, jest kluczowe:   Po pierwsze, użyłbym Module32Next lub innej funkcji do przechodzenia przez załadowane moduły. Dla każdego modułu skanuję wyeksportowaną funkcję GetProcAddress. Na przykład,       Kod:   // Zainicjuj moduł32następne skanowanie .. UCHWYT hModuleSnap = INVALID_HANDLE_VALUE; MODULEENTRY32 me32; // Zrób migawkę wszystkich modułów w określonym procesie. hModuleSnap = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, dwPID); if (hModuleSnap == INVALID_HANDLE_VALUE) {printError ("CreateToolhelp32Snapshot (z modułów)");
Reply
#2
fajny samouczek, ale kilka rzeczy ... 1) Czy jesteś Tony Ray?! na pewno brzmisz tak, jakbyś kochał pb 2) NIE DAJ POMYSŁÓW PB POMYSŁÓW LOL 3) i r śmierdzi, / ja biegnie pod prysznic.
Reply
#3
Przyjemny samouczek, spróbuję
Reply
#4
w rzeczywistości bardzo ładne pomysły. Nadal jestem diggin w coś, co robi te same rzeczy, które opisałeś. Chcę redirecet niektórych połączeń, aby zwrócić kompletny fałszywy Guid. w ten sposób pb_kicks byłby przestarzały. Twój opis wydaje mi się, że trochę mi pomoże, ponieważ już mogę wpływać na moje guidy, ale oczywiście nie w pełni działający bankomat. dzięki za ten hokej. Twoje zawsze dobre dla fragmentu aplikacji ac-app.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)