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

Rekomendowane odpowiedzi

Opublikowano

Witam!

Chciałbym napisać trainera do gry. Uruchamiam CE, wyszukuję potrzebnego adresu, zmieniam value dla pewności - działa. Jednakże po uruchomieniu ponownie rozgrywki, adres się zmienia. I tu moje pytanie - czy da się jakoś temu zaradzić?

Z góry dziękuję za odpowiedzi.

Słysząc wołanie o pomoc - pomagamy... wołać.

Radomir Dobke

Opublikowano

Witam!

Chciałbym napisać trainera do gry. Uruchamiam CE, wyszukuję potrzebnego adresu, zmieniam value dla pewności - działa. Jednakże po uruchomieniu ponownie rozgrywki, adres się zmienia. I tu moje pytanie - czy da się jakoś temu zaradzić?

Z góry dziękuję za odpowiedzi.

 

Przez ollydbg szukać pointerów i offsetów ale z tym dużo roboty jest ;]

Opublikowano

Dobrze. Znalazłem adres stały, aby znaleźć aktualny adres np. złota muszę do tego stałego dodać 10.

Fragment mojego kodu w Delphi:

var

złoto1:integer;

begin

złoto1:=readmeminteger(złoto)+10;

 

MemWriteInteger(złoto1,1000,1);

 

end;

Program się kompiluje, jednak nie działa. Po namyśle stwierdziłem że odczytana wartość z adresu stałego złoto jest w systemie decymalny (dziesiętnym). Co zrobić aby odczytana wartość z adresu stałego była w systemie hexalnym?

Słysząc wołanie o pomoc - pomagamy... wołać.

Radomir Dobke

Opublikowano

Dobrze. Znalazłem adres stały, aby znaleźć aktualny adres np. złota muszę do tego stałego dodać 10.

Fragment mojego kodu w Delphi:

 

Program się kompiluje, jednak nie działa. Po namyśle stwierdziłem że odczytana wartość z adresu stałego złoto jest w systemie decymalny (dziesiętnym). Co zrobić aby odczytana wartość z adresu stałego była w systemie hexalnym?

 

IntToHex wypróbuj :P

Opublikowano

Można jakoś jaśniej to wytłumaczyć?

napisałem coś takiego:

złoto1:=(IntToHex(readmeminteger(złoto)),1)+10;

ale nie trybi ;/

Słysząc wołanie o pomoc - pomagamy... wołać.

Radomir Dobke

Opublikowano

Można jakoś jaśniej to wytłumaczyć?

napisałem coś takiego:

 

ale nie trybi ;/

 

To jest ukryta treść, proszę

 

Nie wiem czy to poprawnie jest bo dawno już w delphi się nie bawiłem. Tylko ja z deka nie widzę sensu by to przerzucać na hexy. Adres powinien od razu podać wartość bez żadnych dodatkowych konwersacji (bynajmniej w Silkroad tak jest). Pamiętałeś by dodać przed adresem znak $ żeby poinformować że to pointer, offset np. $DC5312, $01.? Mniejwięcej tak bym to zrobił:

 

To jest ukryta treść, proszę

Opublikowano

W tym problem że pointer zwraca wartość w systemie dziesiętnym, dla przykładu:

pointer zwraca wartość 20705344 i dopiero po wklepaniu tego do kalkulatora, zamienieniu na hex i dodaniu offsetu otrzymuje adres np. złota, w tym przypadku 13BF050.

 

btw. dalej tego IntToHex nie mogę prawidłowo wklepać, przy twoim zapisie wywala błąd.

 

Tu cały kod programu:

Słysząc wołanie o pomoc - pomagamy... wołać.

Radomir Dobke

Opublikowano

nie znam się dobrze, ale u ciebie

To jest ukryta treść, proszę

 

w MemWriteInteger(tutaj_adres, 1000, 4);

podałeś adres jako interger, czyli podałeś np. 5500, a powinieneś podać adres pamięci np. $12FA4B, czyli musisz z Inta na Hexa zamienić tę zmienną drewno1. Zamień liczbę w drewnie na Hex, z np. liczby "10" będzie to "A".

 

//ee albo coś pomieszałem xD

//edit hmm w sumie to drewno przez IntToHex ma niby hexa tak? eee, wiesz co, odpalę delphi u siebie i zobaczę

 

//edit

dobra już chyba wiem

 

To jest ukryta treść, proszę

 

Integer chyba nie może mieć takich znaków jak ABCDEF itd więc zamiast integer robisz stringa i dostajesz liczbę w hexie np. w tym przypadku (10, 4) to będzie 000A (bo czwórka to ile znaków). Weź później spróbuj w WriteProcessMemory jako adres dać -> '$' + ZmiennaStringZAdresem

czyli

To jest ukryta treść, proszę

×
×
  • Dodaj nową pozycję...