Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Windows 10 naprawił mój kod
#1
Hej Przed Windows 10 miałem Windows 7.   Od jakiegoś czasu pracuję nad wewnętrznym hackerem i pewnego dnia po prostu przestał działać beze mnie, nawet dokonując zmiany (po tym, jak działał idealnie przez kilka tygodni) ... Przeszedłem przez każdą linię kodu, przywracając procedury do tego, do czego byli pierwotnie, przeszedłem także montaż mojego kodu i wszystko wydawało mi się w porządku - ale po wstrzyknięciu zawsze otrzymywałbym błąd mówiąc, że rozbił się w ramach jednej z procedur haka ...   Oto kod, który spowodował awarię:   Spowolnienia i obejmuje:               Kod:   #pragma niezarządzana // ACRestart.h #pragma once #include "stdafx.h" #include <stdio.h> #include <Windows.h> #include <WinUser.h> #include <Psapi.h> #include <gl /GLU.h> #include <gl / GL.h> #include <Wingdi.h> #include <iostream> #include <gdiplus.h> #include <gl / glut.h> #pragma comment (lib, "User32 .lib ") #pragma comment (lib," Opengl32.lib ") #pragma comment (lib," Gdiplus.lib ") #pragma comment (lib," Gdi32.lib ") #pragma comment (lib," glut.lib ") #pragma comment (lib," glut32.lib ") const int jmp = 5; const DWORD opcode = 0xE9; DWORD OnLoad (); BYTE * DetourFunction (BYTE * OrigByte, BYTE * HookByte, int MemLength); void WINDH wallhackhook (tryb GLenum); typedef void (WINAPI * WallHook_t) (tryb GLenum); WallHook_t WallsHook = NULL; void WINAPI wallhackclear (maska GLbitfield); typedef void (WINAPI * WallClear_t) (maska GLbitfield); WallClear_t WallsClear = NULL; void WINAPI menuswapbuffers (HDC hdc); typedef void (WINAPI * menuswapbuffers_t) (HDC hdc); menuswapbuffers_t menuswapped = NULL; void menuend WINAPI (void); typedef void (WINAPI * menuend_t) (void); menuend_t menuended = NULL;             Kod haka i funkcja objazdu:               Kod:   BOOL WINAPI DllMain (HMODULE hDLL, powód DWORD, zarezerwowany LPVOID) {switch (Reason) {case DLL_PROCESS_ATTACH: CreateThread (0, 0, (LPTHREAD_START_ROUTINE) OnLoad, 0, 0, 0); przerwa ; case DLL_PROCESS_DETACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: break; } Return TRUE; } DWORD OnLoad () {FARPROC WH = GetProcAddress (LoadLibraryA ("Opengl32.dll"), "glBegin"); WallsHook = (WallHook_t) DetourFunction ((BYTE *) WH, (BYTE *) i wallhackhook, 6); FARPROC Cl = GetProcAddress (LoadLibraryA ("Opengl32.dll"), "glClear"); WallsClear = (WallClear_t) DetourFunction ((BYTE *) Cl, (BYTE *) i wallhackclear, 7); FARPROC Menu2 = GetProcAddress (LoadLibraryA ("Gdi32.dll"), "SwapBuffers"); menuswapped = (menuswapbuffers_t) DetourFunction ((BYTE *) Menu2, (BYTE *) i menuusapap buforów, 5); FARPROC Menu1 = GetProcAddress (LoadLibraryA ("Opengl32.dll"), "glEnd"); menuended = (menuend_t) DetourFunction ((BYTE *) Menu1, (BYTE *) i menuend, 6); return TRUE; } void WINAPI wallhackhook (tryb GLenum) {(* WallsHook) (tryb); powrót ; } void WINAPI wallhackclear (maska GLbitfield) {(* WallsClear) (maska); powrót ; } void WINAPI menuswapbuffers (HDC hdc) {(* menuswapped) (hdc); powrót ; } void menuend WINAPI (void) {(* menuended) (); powrót ; } BYTE * DetourFunction (BYTE * OrigByte, BYTE * HookByte, int MemLength) {unsigned long OldProt = NULL; BYTE * ByteToWrite; ByteToWrite = (BYTE *) malloc (MemLength + jmp); // VirtualProtect ((LPVOID) OrigByte, MemLength, PAGE_EXECUTE_READWRITE i OldProt); memcpy (ByteToWrite, OrigByte, MemLength); // ByteToWrite + = MemLength; ByteToWrite [0] = opcode; * (DWORD *) (ByteToWrite + 1) = (DWORD) (OrigByte + MemLength - ByteToWrite) - jmp; memset (OrigByte, 0x90, MemLength); // OrigByte [0] = opcode; * (DWORD *) (OrigByte + 1) = (DWORD) (HookByte - OrigByte) - jmp; // VirtualProtect ((LPVOID) OrigByte, MemLength, OldProt, NULL); BYTE * returnval; returnval = ByteToWrite - MemLength; return (returnval); } #pragma managed             Więc ... Zasadniczo po prostu nie mogłem go naprawić, a 29-tego zaktualizowałem do Windows 10, pomyślałem, że równie dobrze mogę sprawdzić, czy aktualizacja naprawiła mój kod, i faktycznie miało - ani jednego błędu ani awarii (nawet z nieodwróconym kodem)   Moje pytanie brzmi: dlaczego mój kod się zepsuł, czy mój kod zawsze będzie łamał się w systemie Windows 7? i jak mogę tego uniknąć w przyszłości?     P.S. przepraszam za moje złe standardy kodowania   P.P.S. Rzeczywisty kod nad którym pracowałem jest znacznie większy niż to, co napisałem, ale powyższy kod jest przyczyną awarii.
Reply
#2
Jedna z zahaczonych funkcji miała względne kody operacyjne, które nie zostały przetłumaczone na nowy adres.
Reply
#3
i kolejny przypadek użycia tego samego gównianego, obskurnego objazdu, który powoduje problemy. istnieje powód, dla którego ludzie mówią, aby nie używać go już.
Reply
#4
Zacytować: Originally Posted by learn_more i kolejny przypadek użycia tego samego gównianego, obskurnego objazdu, który powoduje problemy. istnieje powód, dla którego ludzie mówią, aby nie używać go już. Czy nie ma bibliotek na uc objazdu 1.5?
Reply
#5
tak, i pełne źródło jest również dostępne, ale copypasta działa podobnie jak copypasta.
Reply
#6
Zacytować: Napisał DarthTon Jedna z zahaczonych funkcji miała względne kody operacyjne, które nie zostały przetłumaczone na nowy adres. Dlaczego mój kod działa teraz, jeśli nie wprowadziłem żadnych zmian w samym kodzie? Zacytować: Originally Posted by learn_more tak, i pełne źródło jest również dostępne, ale copypasta działa podobnie jak copypasta. wszyscy zaczynają kopiować i wklejać, dla hack'a nie zamierzam wydawać i używam tylko do celów edukacyjnych. Nie widzę problemu w kopiowaniu i wklejaniu na tym etapie. i czy mógłby Pan wyjaśnić, dlaczego ta konkretna funkcja objazdu powoduje problemy?
Reply
#7
Zacytować: Napisał Lukee9 Dlaczego mój kod działa teraz, jeśli nie wprowadziłem żadnych zmian w samym kodzie? wszyscy zaczynają kopiować i wklejać, dla hack'a nie zamierzam wydawać i używam tylko do celów edukacyjnych. Nie widzę problemu w kopiowaniu i wklejaniu na tym etapie. i czy mógłby Pan wyjaśnić, dlaczego ta konkretna funkcja objazdu powoduje problemy? nie, nie znowu.
Reply
#8
Zacytować: Originally Posted by learn_more nie, nie znowu. więc link do miejsca, w którym wcześniej to wyjaśniłeś?
Reply
#9
Zacytować: Napisał Lukee9 więc link do miejsca, w którym wcześniej to wyjaśniłeś? Objazdy i wklejone przydzielają trochę miejsca na kody operacyjne, które nadpisujesz skokiem. Po nich następuje drugi skok, więc przeskakujesz pierwszy skok i kontynuujesz resztę funkcji hook / original. Jeśli te bajty są zależne od lokalizacji (względne) i wykonasz je, zrobią coś innego, niż się spodziewano, ponieważ musisz je wcześniej przenieść. Jeśli nie rozumiesz słowa, bardzo polecam ci nauczenie się podstaw asemblera zanim zaczniemy funkcjonować
Reply
#10
Tak, rozumiem, dziękuję za wyjaśnienie
Reply




Users browsing this thread: 1 Guest(s)