Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Vc++ 2008 Ee]Jak Uniwersalnie Patchować Adresy W Dllce?


Nowiu

Rekomendowane odpowiedzi

Opublikowano

Witam. Jestem nowy, więc proszę o wyrozumiałość (jeżeli to możliwe).

 

Mam taki kod, (korzystam z VC++ 2008 EE)

 

#include <windows.h>
BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
if(dwReason == 0x01)
{
DWORD Base1 = NULL;
Base1 = (DWORD)GetModuleHandleA("Gierka.exe");
if(!Base1)
Base1 = (DWORD)LoadLibraryA("Gierka.exe");
DWORD dw1;
DWORD Addr1 = Base1+0x107B0; //Adres dla wersji gry 1.0.8.00
DWORD size1 = 0x01;
BYTE patch1[1];
patch1[0] = 0x14;
VirtualProtect((void *) Addr1, size1, PAGE_READWRITE,&dw1);
memcpy((void *) Addr1,(void *) patch1, size1);
VirtualProtect((void *) Addr1, size1, dw1, &dw1);
DWORD Base2 = NULL;
Base2 = (DWORD)GetModuleHandleA("Gierka.exe");
if(!Base2)
Base2 = (DWORD)LoadLibraryA("Gierka.exe");
DWORD dw2;
DWORD Addr2 = Base2+0x20000; //Adres dla wersji gry 1.0.9.05
DWORD size2 = 0x02;
BYTE patch2[2];
patch2[0] = 0x00;
patch2[1] = 0x04;
VirtualProtect((void *) Addr2, size2, PAGE_READWRITE,&dw2);
memcpy((void *) Addr2,(void *) patch2, size2);
VirtualProtect((void *) Addr2, size2, dw2, &dw2);
DWORD Base3 = NULL;
Base3 = (DWORD)GetModuleHandleA("Gierka.exe");
if(!Base3)
Base3 = (DWORD)LoadLibraryA("Gierka.exe");
DWORD dw3;
DWORD Addr3 = Base3+0x18002; //Adres dla wersji gry 1.0.9.20
DWORD size3 = 0x02;
BYTE patch3[2];
patch3[0] = 0x00;
patch3[1] = 0x03;
VirtualProtect((void *) Addr3, size3, PAGE_READWRITE,&dw3);
memcpy((void *) Addr3,(void *) patch3, size3);
VirtualProtect((void *) Addr3, size3, dw3, &dw3);
}
return TRUE;
}

 

(Kody są zmyślone i wersje również, bo to jedynie taki przykład.) Całość chodzi jak należy, dllka podczepiona patchuje adres, lecz jak mogę wprowadzić instrukcje, która sprawdza wersję gry i jeżeli wersja zgadza się z tą, która została określona w instrukcji, to spatchuje ten adres, a nie żeby patchować wszystkie trzy adresy jednocześnie.

Bo tak się składa, że dla (fikcyjnej) wersji gry 1.0.8.00 wszystkie trzy patchowane adresy nie przeszkadzają jej i pomimo dwóch dodatkowych zmian, gra chodzi świetnie, ale za to wersje nowsze do których dllka wprowadza dwie dodatkowe zmiany z adresów innych wersji wywala błąd. (Widocznie pod tymi adresami kod nie może być zmieniony.)

 

Potrzebuję, by ta dll-ka była uniwersalna dla tych trzech wersji. Czy ktoś będzie w stanie mi pomóc?

Z góry dzięki za poświęcenie mi cennego czasu.

Opublikowano

poszukaj w deasmblerze jakiegos stringu z wersja gry a potem go odczytuj

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

A czy byłaby możliwość przedstawienia tego przykładowym kodem? Sprawdzenia stringu w exe-ku.

 

Mam taki string w wersji 1.0.8.00 - 09d33p0

A dla wersji 1.0.9.05 mam taki string - GGg762p

 

Oba nie występują u siebie razem, tylko dla każdej wersji są indywidualne, dzięki czemu nie będzie patchować wszystkich adresów, a jedynie ten konkretny dla wersji gry.

 

Mam nadzieję, że dobrze zrozumiałem.

Opublikowano

jak dziala to dobrze zrozumiales ;>

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

Niestety raczkuję w sprawdzeniu stringa i nie bardzo wiem jak zastosować taki kod, który by pod adresem 0x89000 dla wersji 1.0.8.00 sprawdził ten string 09d33p0 . Dlatego prosiłem o mały przykład.

 

Czy ktoś jest w stanie mi pomóc? Bo adwi32 to slaby pomocnik w zakresie tej tematyki. ;)

 

E: Nadal nie ma nikogo, kto mógłby mi pomóc?

 

Co z wami, to takie trudne?

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...