Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
przewodowe czytanie pamięci za pomocą sterownika
#1
więc mam problemy z czytaniem od mojego kierowcy btw używam tego https://www.unknowncheats.me/forum/a...river-rpm.html   Problem polega na tym, że próbuję odczytać z programu fikcyjnego, ale pokazuję tylko 1 numer, więc domyślam się, że problem jest związany z moją strukturą readmemory   SC: http://prntscr.com/kp4rgt   to jest mój usermode main.cpp       Kod:   #include <windows.h> #include "kernelthinge.h" int main () {KeInterface Driver ("\\\\. \\ myDrivername"); int ProcessId; std :: cout << "Wprowadź pid!" << std :: endl; std :: cin >> ProcessId; // co próbuję odczytać z manekina int test = Driver. RDM <int> (ProcessId, 0xAA924FF998, sizeof (int)); if (! test) {std :: cout << "nie działało" << std :: endl; } else {std :: cout << "read" << "" << test << std :: endl; } System ("pause"); }   a tutaj jest moje kernelthinge.h       Kod:   #define IOCTL_DUMP_MEM CTL_CODE (FILE_DEVICE_UNKNOWN, 0x999, METHOD_OUT_DIRECT, FILE_ANY_ACCESS) #include <windows.h> struct _Read_request {int PID; int Addr; int Wartość; int Bytes; } UserLand; class KeInterface {public: HANDLE hDriver; // Handle to driver // Inicjator KeInterface (LPCSTR RegistryPath) {hDriver = CreateFileA (ścieżka_dysku, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); } Szablon <typ typename> typ RDM (typ ProcessId, typ ReadAddress, rozmiar SIZE_T) {if (hDriver == INVALID_HANDLE_VALUE) return (type) false; Powrót DWORD, Bajty; _Read_request ReadRequest; ReadRequest. PID = ProcessId; ReadRequest. Addr = ReadAddress; ReadRequest. Wartość = rozmiar; // wyślij kod do naszego sterownika z argumentami, jeśli (DeviceIoControl (hDriver, IOCTL_DUMP_MEM, ReadRequest, sizeof (ReadRequest), i ReadRequest, sizeof (ReadRequest), 0, 0)) zwracają (typ) ReadRequest. Wartość; else return (type) false; }};   Jestem pewien, że robię coś nie tak z rzutowaniem i int, DWORD     Kod:   struct _Read_request {int PID; int Addr; int Wartość; int Bytes; } UserLand;   to.
Reply
#2
Wydaje mi się, że używasz x64, ponieważ ten problem nie pojawiłby się na x86, ponieważ wskaźnik i int mają rozmiar. Struktura facetów to: Kod: struct {int PID; // 4B void * Addr; // 8B void * Wartość; // 8B int Bytes; // 4B} UserLand; W porównaniu do twojego: Kod: struct _Read_request {int PID; // 4B int Addr; // 4B int Wartość; // 4B int Bytes; // 4B} UserLand; Moje zalecenie to: Kod: struct _Read_request {int PID; // 4B void * Addr; // 8B UINT64 Wartość; // 8B int Bytes; // 4B} UserLand; A jeśli chcesz użyć UserLand.Value, jeśli naprawdę potrzebujesz 32b, odrzuć do UINT32, jeśli potrzebujesz.
Reply
#3
Zacytować: Napisał Astralux Wydaje mi się, że używasz x64, ponieważ ten problem nie pojawiłby się na x86, ponieważ wskaźnik i int mają rozmiar. Struktura facetów to: Kod: struct {int PID; // 4B void * Addr; // 8B void * Wartość; // 8B int Bytes; // 4B} UserLand; W porównaniu do twojego: Kod: struct _Read_request {int PID; // 4B int Addr; // 4B int Wartość; // 4B int Bytes; // 4B} UserLand; Moje zalecenie to: Kod: struct _Read_request {int PID; // 4B void * Addr; // 8B UINT64 Wartość; // 8B int Bytes; // 4B} UserLand; A jeśli chcesz użyć UserLand.Value, jeśli naprawdę potrzebujesz 32b, odrzuć do UINT32, jeśli potrzebujesz. dziękuję, ale próbowałem przekonwertować ten pusty wskaźnik za pomocą instrukcji switch, ale nie wiem, gdzie powinienem to zrobić wewnątrz struktury? Właśnie zdałem sobie sprawę, że rpm nie działa, bo to tylko zwraca 4 i kiedy próbowałem zrobić rozmiar (UINT64) wrócił 8, który jest oczywiście wielkości w bajtach, więc jak mogę to naprawić?
Reply
#4
Zacytować: Napisał Nani011 dziękuję, ale próbowałem przekonwertować ten pusty wskaźnik za pomocą instrukcji switch, ale nie wiem, gdzie powinienem to zrobić wewnątrz struktury? Hmmm? Upewnij się, że używasz tej samej struktury zarówno po stronie sterownika, jak i trybu użytkownika. Zacytować: Właśnie zdałem sobie sprawę, że rpm nie działa, bo to tylko zwraca 4 i kiedy próbowałem zrobić rozmiar (UINT64) wrócił 8, który jest oczywiście wielkości w bajtach, więc jak mogę to naprawić? Nie jestem niestety Czarodziejem. Nie widzę problemów z kodem, których nie publikujesz, np. W kodzie sterownika. Upewnij się, że wypełniasz strukturę poprawnie po stronie sterownika. Najlepiej wydrukuj dodatek do pamięci twój odczyt ze sterownika. Mogę zaryzykować zgadnięcie, dlaczego widzisz rozmiar, ponieważ w sterowniku nie zapisuje oczekiwanego rezultatu i po prostu kopiuje wartość z wejściowego bufora ioctl na wyjście. Kod: ReadRequest. Wartość = rozmiar; if (DeviceIoControl (hDriver, IOCTL_DUMP_MEM, & ReadRequest, sizeof (ReadRequest), i ReadRequest, sizeof (ReadRequest), 0, 0)) zwracają (typ) ReadRequest. Wartość; ]
Reply




Users browsing this thread: 1 Guest(s)