Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Korzystanie z zakodowanych wskaźników na swoją korzyść
#1

OK, więc czytałem wszystkie te rzeczy z WarZ i zdecydowałem, że szukanie tego bzdur musi być PIA, więc wymyśliłem ten skrypt.   To, co to robi, to odczytanie pliku .lst stworzonego przez IDA porzuconej gry. Jest ukierunkowany na 4 kolejne instrukcje XOR, które kończą się wartością statyczną. Będzie musiał zmienić więcej niż klucze, ponieważ nie szuka żadnych znanych wartości klucza.   Potrzebujesz Pythona, aby go użyć, jest bezpłatny i open source:   Język programowania Python & ndash; Oficjalna strona internetowa   Nie zamierzam uczyć Pythona i jak z niego korzystać. Jest tam link, miliony artykułów i dostarczyłem ci skrypt.       Kod:   fh = plik ("WarZ.lst", "r") BUFOR = [] dla linii w fh. readlines (): line = line. strip (), jeśli nie linia: kontynuuj jeśli linia. znajdź ("xor")> - 1 i linię. endswith ("h") i wiersz. znajdź ("+")> - 1: BUFOR. append (line) else: if len (BUFFER) == 4: for i in BUFFER: print i print BUFFER = []   Dump WarZ.exe Załaduj do IDA i poczekaj na zakończenie analizy. Plik -> Utwórz plik -> Utwórz plik LST   Skopiuj powyższy skrypt do trybu bezczynności i zapisz go w tym samym folderze, w którym znajduje się plik lst. Uruchom skrypt, a będziesz miał listę miejsc, w których są najprawdopodobniej zakodowane wskaźniki i wiemy, że wszystkie one używały go.   To mniej więcej udowodnić im, że robienie głupiego gówna może się zemścić. Robiąc to, co zrobili, ułatwili zlokalizowanie ważnych części silnika gry.     DUŻA UWAGA: Skrypty w języku Python są rozdzielane spacjami, a wcięcia kontrolują przepływ programu, więc nie zmieniaj tego w tym, co napisałem.   Próbka Freebie: GetLocalPlayer z bazą exe @ 0xCC1000     Kod:   . tekst: 00D53E1F xor bajt ptr [esp + 4 + pLocalPlayer], 0DFh. tekst: 00D53E23 xor bajt ptr [esp + 4 + pLocalPlayer + 2], 0B7h. tekst: 00D53E28 xor bajt ptr [esp + 4 + pLocalPlayer + 1], 0B1h. tekst: 00D53E2D xor bajt ptr [esp + 4 + pLocalPlayer + 3], 13h     Kod:   . tekst: 00D53E10 Proces GetLocalPlayer w pobliżu; CODE XREF: sub_CFFF80 + 1B8? str. tekst: 00D53E10. tekst: 00D53E10 pLocalPlayer = dword ptr - 4. tekst: 00D53E10. tekst: 00D53E10 push ecx. tekst: 00D53E11 wywołanie GetClientGame. tekst: 00D53E16 mov eax, [eax + 4A25h]. tekst: 00D53E1C mov [esp + 4 + pLocalPlayer], eax. tekst: 00D53E1F xor bajt ptr [esp + 4 + pLocalPlayer], 0DFh. tekst: 00D53E23 xor bajt ptr [esp + 4 + pLocalPlayer + 2], 0B7h. tekst: 00D53E28 xor bajt ptr [esp + 4 + pLocalPlayer + 1], 0B1h. tekst: 00D53E2D xor bajt ptr [esp + 4 + pLocalPlayer + 3], 13h. tekst: 00D53E32 mov eax, [esp + 4 + pLocalPlayer]. tekst: 00D53E35 test eax, eax. tekst: 00D53E37 jz krótki loc_D53E52. tekst: 00D53E39 cmp dword ptr [eax + 0DE8h], 0. tekst: 00D53E40 jnz krótki loc_D53E52. tekst: 00D53E42 movss x mm0, ds: dword_13F42B4. tekst: 00D53E4A movss dword ptr [eax + 0DE4h], xmm0. tekst: 00D53E52. tekst: 00D53E52 loc_D53E52:; CODE XREF: GetLocalPlayer + 27? j. tekst: 00D53E52; GetLocalPlayer + 30? j. tekst: 00D53E52 pop ekx. tekst: 00D53E53 retn. tekst: 00D53E53 Zakończenie getLocalPlayer   Ciesz się lub nie
Reply
#2

Lmao, kochanie, kiedy takie gówno przychodzi, by ugryźć programistów w tyłek. XOR dosłownie nie zrobił nic, aby powstrzymać mnie przed oszukiwaniem w twojej głupiej, pieprzonej grze. W rzeczywistości, jak powiedziałeś, musiałbym się z tym zgodzić, dosłownie po prostu ułatwiło mi życie, gdy dochodziło do znalezienia ich ważniejszych rzeczy, ponieważ wszystko, co musiałem zrobić, to szukać XOR-ów i wiedziałem, że jest tam coś ważnego, w przeciwnym razie MOGLIŚMY tego przegapić. Edycja: + Rep, ponieważ nie widziałem python od mojego pierwszego roku uniwersytetu!
Reply
#3

Używam Pythona do wszelkiego rodzaju rzeczy, jest przydatny do szybkich skryptów. Używam go nawet do wstępnych skryptów kompilacji w VS do kodowania ciągów znaków. Ale tak, dlatego napisałem ten fragment, żeby udowodnić, że to, co zrobili z silnikiem, ugryzie je w tyłek. Również znalezienie xora jest łatwe, spójrz na to, co byłoby NULL wskaźnikiem w ReClass i zamiast tego zobaczysz wartość xor. Nawet kod VM jest bezwartościowy, każdy doświadczony w odwróceniu widział wystarczająco dużo kodu, by go przeczytać tuż obok. Mam nadzieję, że niektóre opierają się na analizie, ponieważ ułatwiają życie. Odkąd zmieniłem kopalnię, aby logować pełne funkcje z rzeczywistą wartością XOR do pliku. Dosłownie 20 minutowy projekt zaczyna się kończyć. Teraz pracujemy nad tym, aby wyodrębnić przesunięcia elementów klasowych, aby generować klasy w locie.
Reply
#4

Cóż, to niewiarygodnie oczywiste, że koderowie ich "anty oszustów" nigdy wcześniej nie oszukiwali. Aby zrobić oszustwo, które jest dość skuteczne, musisz najpierw dokonać oszustwa.
Reply




Users browsing this thread: 1 Guest(s)