Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Odczytywanie problemu z pamięcią
#1
Tak więc mój sterownik wydaje się działać, podaje mi adres bazowy Rusta, podaje wartości pod adresami, ale dostaję dziwne wartości, takie jak:       Kod:   adres podstawowy: 7ff7edac0000 // zawsze zaczyna się od 7ff normalnie? przesunięcia: lastTaggedObject (adres bazowy + 0x141F480Wink: 60f9a30 // niektóre 7-cyfrowe przesunięcie taggedObjects (adres bazowy + 0x141F480; + 0x8): 0 // zawsze ten sam lastActiveObject (adres bazowy + 0x141F480; + 0x10): 1a53bfc0 // niektóre 8-cyfrowy offset activeObjects (adres bazowy + 0x141F480; + 0x18): ffffffff // zawsze taki sam   Wiem, że adres bazowy jest poprawny, używam 2 metod, aby upewnić się, że 1) wysyłaj callback dla każdego obrazu PE i znajdź RustClient.exe i 2) używając PsGetProcessSectionBaseAddress. Ale wartości w adresie pamięci są całkowicie błędne, więc musi to być moja funkcja odczytu memów (chyba że mam użyć jakiegoś rust.dll, tak jakbyś musiał użyć client.dll dla cs: idź do get baza addy)   C ++     Kod:   typedef struct _krr {DWORD64 pid; Adres DWORD64; Rozmiar DWORD64; Odpowiedź DWORD64; } krr, * pkrr; test krr; test. address = findBase () + 0x12F4770 + 0x008; test. pid = xxxx; (Właśnie znalazłem to na menedżerze zadań dla RustClient. Exe: / teraz) test. size = sizeof (DWORD64); DeviceIoControl (hDriver, IOCTL_READ, test, sizeof (test) i test, sizeof (test) i bajty, 0)); cout << test. odpowiedź << endl;   Dyspozytor kierowcy:       Kod:   pkrr in = (pkrr) Irp -> AssociatedIrp. SystemBuffer; pkrr out = (pkrr) Irp -> AssociatedIrp. SystemBuffer; PsLookupProcessByProcessId ((HANDLE) w -> pid i TargetProcess); status = read (TargetProcess, (HANDLE) in -> address, & in -> response, in -> size); bytesIO = sizeof (krr); Irp -> IoStatus. Status = status; Irp -> IoStatus. Informacja = bytesIO; IoCompleteRequest (Irp, IO_NO_INCREMENT);   funkcja odczytu:       Kod:   NTSTATUS read (proces PEPROCESS, PVOID sourceAddr, PVOID targetAddr, SIZE_T s) {status NTSTATUS; PSIZE_T bajtów; PEPROCESS currentprocess = PsGetCurrentProcess (); status = MmCopyVirtualMemory (process, sourceAddr, currentprocess, targetAddr, s, KernelMode, i bytes); // te same wartości, co rtlcopymemory (status & odpowiedzi, adres w domenie, sizeof (DWORD64)); }   Czytałem wszystkie istotne wątki, nie mogę znaleźć odpowiedzi na pytanie, dlaczego to nie działa. Próbowałem wielu rzeczy z tym samym rezultatem, prawie gotowym do wyrywania włosów. Czy ktoś może mi pomóc?
Reply
#2
Czy ktoś może pomóc? Debugowałem to jak diabli i wiem, że adresy są prawidłowe. Są też zawsze konsekwentni, czy jest jakiś problem z castingiem? Co może być problemem w moim kodzie? Robiłem to przez kilka dni bez rezultatu ...
Reply




Users browsing this thread: 1 Guest(s)