Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Wypadek
#1
Cześć ludzie,   Czy coś jest nie tak z tą funkcją:       Kod:   DWORD PointerAddress (int Level, HANDLE hProcess, DWORD BaseAddress, DWORD Offsets []) {DWORD PointerTemp, PointerAddress, Pointer = BaseAddress; for (int c = 0; c <Level; c ++) {if (c == 0) {ReadProcessMemory (hProcess, (LPCVOID) Wskaźnik i PointerTemp, sizeof (PointerTemp), NULL); } PointerAddress = PointerTemp + Offsets [c]; ReadProcessMemory (hProcess, (LPCVOID) PointerAddress i PointerTemp, sizeof (PointerTemp), NULL); } Return PointerAddress; }   Moja gra się zawiesza za każdym razem, gdy mapa się zmienia, lub kiedy wskrzeszam, aby rozpocząć bazę ... lub nawet kiedy teleportuję się gdzieś indziej. Gra nazywa się Aion i jest to mmorpg.   Jeśli nie wystarczy tego kodu, opublikuję pełny.   Dziękuję Ci,
Reply
#2
Musisz opublikować więcej kodu. Zależy to również od parametrów wejściowych. Na przykład, jeśli parametr Offsets nie jest poprawny, może ulec awarii.
Reply
#3
Sądząc po tym samym copypasta, najprawdopodobniej nie masz odpowiednich przesunięć. Próbuję odczytać adres pod adresem 0x000000 lub coś równie głupiego
Reply
#4
Przy tych adresach, wskaźnikach działa dobrze ... dopóki mapa się nie zmieni. Z CE to jest to, co otrzymuję od wyszukiwania. Czy nie jest łatwo znaleźć dla mnie właściwy adres? Byłem ciekawy, czy coś jest nie tak z samym kodem. Niektóre inne ludy twierdzą, że potrzebuję innego podejścia, aby postąpić właściwie. Dopóki nie nauczę się innych lepszych sposobów, cóż ... spróbuję to naprawić. Ty,
Reply
#5
Na początek, jeśli jesteś pewien poprawności przesunięć i adresów, odrzuć tę funkcję i użyj 4 linii ReadProcessMemory, aby ręcznie przejść przez wszystkie z nich. Jeśli otrzymasz poprawny adres, funkcja nie jest poprawnie zakodowana.
Reply
#6
Rpm zwraca wartość, którą powinieneś sprawdzić i wykonać czyszczenie
Reply
#7
Czy dostosowałeś łatę bajtów do reprezentowania 64-bitowych kodów? W szczególności te bajty: 0xC6,0x83,0x1A, 0x05,0x00,0x00, 0x84,0x03,0x00,0x00 Również jeśli robisz to w C ++, dlaczego nie po prostu zrobić DLL i pozbyć się wszystkich rzeczy WPM? Jeśli możesz otworzyć proces i zmodyfikować kod, mogę tylko założyć, że A / C nie jest problemem.
Reply
#8
Kiedy łatasz opkody w procesie x86, możesz użyć domyślnych kodów x86, których wszyscy używamy. Jeśli jednak chcesz załatać proces x64, musisz wziąć pod uwagę to, co będzie demontować x64 i czy adresy będą inne. Czemu? Ponieważ x64 ma różne rejestry dla wartości QUADWORD. Zajrzyj do instrukcji obsługi procesorów Intela, jeśli nie rozumiesz o co mi chodzi. http://download.intel.com/products/p...ual/325462.pdf
Reply
#9
Nie byłoby łatwiej użyć wbudowanego zestawu w C / C ++, aby wykonać to zadanie ... Podążyłem za tutkami na youtube o x64 asm i wydaje się najlepszym sposobem na modyfikowanie opkodów. Teraz wiem, że do hakowania oprogramowania muszę znać oba języki. W każdym razie ... nadal nie rozumiem, co powinienem zrobić, żeby x64 działało Mogę otworzyć proces, uzyskać adres bazowy dla dll, napisać do tej pamięci, zobaczyć zmiany w czasie rzeczywistym, ... ale gra się zawiesza. Czytanie bliższych rejestrów "rbx, rsi, rsp" ... z x64 byłoby pierwszym krokiem do naprawy? edytować: czym różnią się od tych dwóch: 1 - jmp qword ptr [04FB0000] 2 - jmp 04FB0000 Jeśli zmienię "mov [rbx + 0000051A], si" używając "jmp qword ptr [04FB0000]" = i postępuj zgodnie z CE, wynikiem jest >> 00000000. Jeśli zmienię "mov [rbx + 0000051A], si" używając "jmp 04FB0000" = i postępuję zgodnie z CE, wynikiem jest >> przydzielona pamięć. Hack i tak pisze pierwszą, ale nigdzie nie wychodzi:
Reply
#10
Zacytować: Originally Posted by vmv czym różnią się od tych dwóch: 1 - jmp qword ptr [04FB0000] 2 - jmp 04FB0000 Istnieją dwie różnice: Pierwsze polecenie ma nawiasy kwadratowe, co oznacza, że przeskoczy do wartości pod adresem pamięci 4FB000; mówiąc: QWORD PTR zmusi procesor do użycia słowa poczwórnego do przechowywania wskaźnika. Ponieważ adres tutaj będzie pasował do podwójnego słowa, również kompilator będzie mógł go użyć, oszczędzając 4-bajtowy dodatkowy magazyn. Jeśli nie zastosujesz konkretnie atrybutu size, procesor najprawdopodobniej użyje podwójnego słowa. Chociaż nie jestem do końca pewien tego, ponieważ nigdy nie czytałem o tej dokumentacji
Reply




Users browsing this thread: 1 Guest(s)