Rozumiem ten kod może nie w 100% ale rozumiem co do czego służy base address prawdopodnie zmienia się co wyłączenie gry dlatego jest ta funkcja przeryłem całe google w poszukiwaniu coś na ten temat i znajdowałem tylko funkcje GetModuleBaseAddress ale nic o czytania strigu :(
Program pisany w delphi 7 nie działa na vista/7 :(
- Rejestracja: dni
- Ostatnio: dni
Przeczytaj w dokumentacji jakie argumenty ma ReadProcessMemory popatrz na "skradzioną" funkcję ReadMemInteger i pomyśl co trzeba zrobić, żeby odczytać ciąg bajtów reprezentujący string.
- Rejestracja: dni
- Ostatnio: dni
Sprawdzałem modyfikowałem ale zawsze jakiś błąd robiłem to źle ponieważ niektórych rzeczy tam nie rozumiem dlatego zacząłem szperać po google i napisałem na tym forum. :( męczę się z tym już z tydzien :D
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
- Postów: 4191
Szczerze wątpie aby taka tibia zmieniała ImageBase co uruchomienie. Nie chcę wprowadzać w błąd. Ale imo większośc programów nie zmienia ImageBase. Może jest na to jakiś patent. Według mnie pewnie tylko edycja nagłowka pliku PE pod odpowiednimi edytorami lub ręcznie (o ile wiesz co robisz, bo masz na ten temat jakąś wiedzę) może go zmienić. Jeżeli już to zmienia się adres w pamięci procesu z jakimiś tam danymi gracza (na przykład posiadane itemy i takie tam). Dlatego należy szukać pod Cheat Engine adresów, które zapisują pod daną komórkę uzyskując w ten sposób pointery (wskaźniki). Na ten temat jest na google do znalezienia mnóstwo artykułów, w tym również po polsku. A i oczywiśćie szukanie pointerów należy stosować, jeżeli chcemy zrobić uniwersalny i porządny trainer. Lub możliwą do późniejszego stosowania przez innych cheat table w pliku *.ct, a nie wytwór "zwidów" kogoś bez pojęcia o podstawach.
- Rejestracja: dni
- Ostatnio: dni
olesio jak widziałeś podałem ci linka do tego czytania adresów i tam pisze że w głównym var należy dać coś takiego :
var
ADDR_BASE: Pointer;
ADDR_HP: Integer = $941000;
ADDR_XOR: Integer = $7ABF8C;
czyli wkazuje na to że automatycznie szuka pointerów
dobra zaraz znów popróbuję może coś się uda.. :x
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
- Postów: 4191
Zaden z kodów podanym w wątku na tamtym forum nic nie "szuka automatycznie". Ta wartośc xor jest używana za pewne po to aby przekształcić odczytaną liczbę z pamięci na jakąś konkretniejszą, w której podane jest to HP. Po raz kolejny Ci powtarzam, najpierw ustal co jest widoczne pod Cheat Engine i czy idzie to zmienić. Jeżeli adresy się będą pokrywać, to będziesz wiedział, że zapisujesz lub odczytujesz wartości z prawidlowego miejsca.
- Rejestracja: dni
- Ostatnio: dni
zrobiłem tak :
function MemReadString(PHandle: THandle; Address: Integer): Integer;
var
X, Buffer: Cardinal;
NB : LongWord;
Temp : ARRAY [1..255] OF Byte;
I : Byte;
IDProcess, proc_ID : Cardinal;
begin
GetWindowThreadProcessID(FindWindow('TibiaClient', nil), @proc_ID);
IDProcess := OpenProcess(PROCESS_ALL_ACCESS, false, proc_ID);
ReadProcessMemory(PHandle, Pointer(Integer(ADDR_BASE) - $400000 + Integer(Address)), Addr(Buffer), 4, X);
for I := 1 to 255 do
begin
if ((Temp[i] = 0) or (Temp[i] = $0F)) then
Break;
Result := Buffer;
end;
funkcja base adresu bez zmian i czytanie zrobiłem tak :
var
WHandle: HWND;
ProcessID : Cardinal;
PHandle: THandle;
exp: integer;
hp: integer;
begin
WHandle := FindWindow('TibiaClient', nil);
GetWindowThreadProcessId(WHandle, @ProcessID);
ADDR_BASE := GetModuleBaseAddress(ProcessID, 'Tibia.exe');
PHandle := OpenProcess(PROCESS_VM_READ, False, ProcessID);
hp := MemReadString(PHandle, ADDR_HP);
// Here we do the XOR stuff
ShowMessage(inttostr(hp));
Czy to dobre rozwiązanie ?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
- Postów: 4191
To TY masz to wiedzieć nie ja/nie my. Cały czas coś piszesz o bazowym adresie. A tutaj tylko go odczytujesz do zmiennej - sam string pobierasz z pod adresu zawartego w zmiennej ADDR_HP. Ostatni raz powtarzam. Pomóż sobie Cheat Engine i zobacz co pod jakim adresem siedzi. Dalsze odpisywanie Tobie uważam za bezcelowe, bo myślisz, że programowanie nie wymaga myślenia i że chyba polega tylko na zgadywaniu. Tak oczywiśćie nie jest.
- Rejestracja: dni
- Ostatnio: dni
mam wszystkie potrzebne mi adresy sprawdzone wczesniej w cheat engine i takie są jakie być powinny :)
- Rejestracja: dni
- Ostatnio: dni
znalazłem funkcje która prawdopodobnie działa lecz jest problem kiedy wklejam ją pod implementation wyskakuje błąd przy tych liniach po begin
function ReadInteger(Address: Integer): Integer;
var
value: Integer;
ler: DWORD;
ADDR_BASE: Pointer;
begin
HTibia := FindWindow(nil, 'tibia');
ThID := GetWindowThreadProcessId(HTibia, @PID);
PH := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
ReadProcessMemory(PH, Ptr(Address), @value, 4, ler);
ADDR_BASE := GetModuleBaseAddress(ThID, 'Tibia.exe');
Result := (value - $400000) + integer(ADDR_BASE);
end;
między innymi tutaj już jest error przy HTibia.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Łódź
- Postów: 648
Zamknie ktoś ten temat i wrzuci do kosza w końcu?
- Rejestracja: dni
- Ostatnio: dni
nie mógłby ktoś po prostu pokazać użycia base adresu na tekscie w delphi ? ... :(
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2512
Idź lepiej nabijać expa zamiast marnować swój czas i nasz. Wróć jak będziesz mieć poważne podejście do nauki programowania.
- Rejestracja: dni
- Ostatnio: dni
cały czas się próbuję uczyć programowania ale znając podstawy i tak nie ogarnę tego dlatego napisałem na tym forum o pomoc a nie z nudów.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2512
Grałem kiedyś w gry online i długie godziny spędzałem nad tym żeby coś osiągnąć. Nie pomogę Ci w oszukiwaniu innych graczy. Chcesz mieć coś szybciej - kup premium.
- Rejestracja: dni
- Ostatnio: dni
czy ja chce kogoś oszukiwać ? chcę napisać trainer dla siebie do gry ... zresztą nie ważne zapytałem po prostu o pomoc a nie o pomoc w zakupie premium
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2512
No dobrze. Co to jest HTibia? Masz gdzieś to zadeklarowane?
- Rejestracja: dni
- Ostatnio: dni
ten kod wziąłem z tej strony http://tpforums.org/forum/thread-9448-page-2.html podał go "Kush" ten kod miał podobno działać ale jednak nie działa ... jedynie działa kod z pierwszej strony tego tematu do którego podałem link i jak mówię od początku tematu jedyne czego chciałem się tutaj dowiedzieć to jak odczytać string (tekst) funkcją do tego przeznaczą ale żeby używała ona także funkcję base adress.