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

[Pytanie][C++] Zmienianie Wartości Pointera


Rekomendowane odpowiedzi

Opublikowano

Ok mam nowy problem który pasowałoby rozwiązać;p Mogłem napisać w tamtym temacie ale w sumie teraz chodzi o coś innego:)

 

Sprawą jest "pointer", z tego co wyczytałem jest to wskaźnik w którym przechowywana jest wartość domyślna, którą ja chciałbym zmienić:)

Domyślam się że w metinie działa to tak:

1. Jest adres pamięci

2. Zmieniamy wartość odpowiednią dla nas...

3. Clientowi się to nie podoba i generuje nowy adres pamięci

4. Wartość do tego nowego adresu pamięci bierze z pointera...

 

Czyli muszę zmienić wartość pointera:)

Otworzyłem CE i znalazłem adres pamięci a potem przeskanowałem w poszukiwaniu pointera... no i znalazłem:)

poin.jpg

czyli metin2clien.bin+0023CA80

na UG znalazłem taki temat "Trovare Pointer in meno di 5 Minuti METIN2" i tam jest taki wzór: 00400000+001F29BC = 005F29BC, czyli wynikałoby że metin2client.bin=0040000

 

Dochodzę do sedna sprawy według tego wzoru:

00400000+0023CA80 = 0063CA80

 

Czyli mój pointer to 63CA80 tak?

No i teraz jak go użyć?

 

Próbowałem tak:

 

			
void MemCpy(void* dest, void* src, size_t size)
{
       DWORD oProtect = NULL;
       VirtualProtect(dest, size, PAGE_EXECUTE_READWRITE, &oProtect);
       memcpy(dest, src, size);
       VirtualProtect(dest, size, oProtect, NULL);
}

	                         DWORD sh = (DWORD)(0x63CA80);
				 unsigned long t=343621848;
				 MemCpy( (void*)sh, &t, 4);

 

ale gdy użyje tego to metin się automatycznie wyłącza... pewnie jakiś błąd pamięci albo coś...

 

 

Więc jak mam użyć tego pointera?

Może wogóle źle myśle i o powinno być inaczej?

Ktoś wie jak to powinno być, aby działało?

 

Z góry dziękuje:)

eh...

Opublikowano

Jeśli używasz własnej .dll to tak się robi wskaźnik na adres

 

DWORD *wsk = (DWORD*)0xADRES;

*wsk = wartość

 

no a jak masz własne .exe to WriteProcessMemory :)

Opublikowano

hmm używam własnej dll bo to do metina;p

Zrobiłem tak jak ty podałeś i aktualnie jest CRASH, po prostu proces zamyka się;p

 

Próbowałem jeszcze zrobić to tak:

				 DWORD *wsk = (DWORD*)0x63CA80;
				 unsigned long sh = 343621848;
				 MemCpy( (void*)*wsk, &sh, 4);

ale brak jakiejkolwiek reakcji po uruchomieniu... wiesz może jakby to można zrobić? Na pewno to jakoś można zrobić bo jest zrobiony taki hack, ale oczywiście koleś się nie podzieli;p

Masz jakiś pomysł?

eh...

Opublikowano

jak gra ma tam jakąś ważna wartość np. adres funkcji i ty to zamienisz na jakąś losową liczbe to kraszuje :rolleyes: Wiesz co ten adres robi ?

Opublikowano

...no wydaje mi się że wiem..

W tym adresie jest wartość szybkości biegu w grze;p Ale gdy tą wartość zmieniam w CE to nie kraszuje;p

eh...

Opublikowano

Odczytaj najpierw wartość ze wskaźnika ( adres komórki 'speed' ? ) i potem w ten odczytany adres wpisz nową wartość.

Opublikowano

Myślę że coś źle robię... zrobiłem filmik co chce aby w mojej dll-ce było:

http://www.youtube.com/watch?v=oHDUst2LpRE

czyli zmienianie wartości tego adresu i jeszcze potem trzeba będzie założyć pętle:)

Umiałbyś taki kod zrobić? Filmik ci może więcej wyjaśni:)

##Jeżeli to będę wiedziała jak zrobić to w sumie będę mógł zrobić jakiegoś lepszego hacka ponieważ większość wartości w grze się zmienia w ten sposób:)

eh...

Opublikowano

t3ix dobrze gada, 0x63CA80 jest wskaznikiem na wskaznik

				 DWORD *wsk = (DWORD*)0x63CA80;
				 unsigned long sh = 343621848;
				 DWORD *wsk2 = *wsk;				 
				 MemCpy( (void*)*wsk2, &sh, 4);

pierdut.pl/pytanie-27-oddam_konto_do_metina_za_darmo

Opublikowano

hmm.. trochę się zastanowiłem nad tym i wywnioskowałem że źle tłumaczyłem problem...

problem.jpg

 

Obrazek przedstawia schematycznie co muszę zrobić:)

Czyli tak:

1. Najpierw mam adres "metin2client.bin"+0023CA80, który jest wskaźnikiem

2. Dodaje do niego 0x8 i ukazuje mi się wskaźnik który pokazuje na 0x202E9D24

3. 0x202E9D24 jest wskaźnikiem do którego dodajemy 0x5B6.

4. Otrzymujemy wskaźnik który pokazuje na właściwy adres któremu muszę zmienić wartość..

 

Okazuje się że punkt 1 i 2 możemy opuścić ponieważ wskaźnik 0x202E9D24 nie jest generowany tylko cały czas ma ten sam adres...(tak mi się zdaje i po sprawdzeniu w CE rzeczywiście cały czas wskazuje na prawidłowy adres!)

 

Czyli co trzeba zrobić?

0x202E9D24+0x5B6=adres który musze zmienic...(co chwilę się zmienia)

 

Myślę że wreszcie wystarczająco wytłumaczyłem aby móc mi pomóc:)

eh...

Opublikowano
int temp;

ReadProcessMemory( GetCurrentProcess(), (void*)0x63CA80, &temp, 4, 0 );
temp += 0x8;

ReadProcessMemory( GetCurrentProcess(), (void*)temp, &temp, 4, 0 );
temp += 0x5B6;

*(int*)temp = 0x1337;

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...