- Dołączył
- Listopad 8, 2009
- Posty
- 1125
- Liczba reakcji
- 31
- Wiek
- 36
Witam.
Tibia Development Series w za?o?eniu b?dzie zbiorem artyku??w, kt?re pomog? pocz?tkuj?cym programistom zacz?? swoj? przygod? z pisaniem cheat?w.
Aby m?c w pe?ni zrozumie? przes?anie kursu potrzebna b?dzie podstawowa wiedza z zakresu programowania oraz obs?ugi kompilator?w.
Wszystkie dzieci, kt?rym wydaje si?, ?e po przeczytaniu takiego poradnika stworz? drugiego ElfBota mog? ju? opu?ci? ten temat. Kraina bajek jest kilka dzia??w ni?ej.
Wi?kszo?? przyk?ad?w b?d? podawa? w Delphi oraz by? mo?e w C++. Dodatkowo nie zaszkodzi?yby r?wnie? podstawy asemblera, co jednak na etapie tego kursu nie b?dzie wymagane.
Modyfikacja pami?ci za pomoc? WinApi.
1. Cel zadania
Ka?dy program uruchomiony pod systemem windows, dostaje pewn? cz??? pami?ci wirtualnej (Na systemach 32 bitowych s? to 4 GB).
To w?a?nie do tej pami?ci programi?ci maj? dost?p z poziomu systemowego API (WinApi).
Program to nic innego jak wielka tablica bajt?w zawieraj?ca si? w?a?nie w tej przestrzeni wirtualnej, kt?ra p??niej znajduje swoje odzwierciedlenie w pami?ci RAM.
Naszym celem b?dzie uzyskanie dost?pu do pami?ci wirtualnej, oraz modyfikacja pewnych warto?ci. Dok?adniej to zmienimy aktualny stan HP naszej postaci. B?dzie to jednak akcja widziana tylko po stronie naszego klienta.
2. Narz?dzia
Narz?dzia z jakich b?dziemy korzysta? to kompilator Delphi 7 (wystarczy w wersji Personal) oraz Cheat Engine 5.5
Cheat Engine - Download
3. Teoria
Dost?p do pami?ci wirtualnej wymaga skorzystania przez programist? z kilku funkcji. Na pocz?tku musimy znale?? PID (Process ID). Je?eli w??czymy Mened?er zada? (ctrl+alt+delete), przejdziemy do menu Widok->Wybierz kolumny... i zaznaczymy checkboxa PID, b?dziemy mogli podgl?dn?? ID ka?dego uruchomionego procesu, w tym Tibii ;]
Aby uzyska? PID mo?emy skorzysta? z kilku opcji, ja jednak zaprezentuje tutaj najprostsz? ale skuteczn? metod? polegaj?c? na znalezieniu uchwytu do okna.
Dlatego pierwsz? funkcj? z jakiej b?dziemy korzysta? to FindWindow
(dokumentacj? ka?dej funkcji znajdziecie na msdn wpisuj?c w googlach jej dok?adn? nazw?).
Za jej pomoc? uzyskamy uchwyt okna, kt?ry b?dzie nam niezb?dny do wykorzystania w funkcji GetWindowThreadProcessID, kt?ra zwr?ci PID.
Maj?c ID procesu mo?emy go sobie "otworzy?" za pomoc? funkcji OpenProcess i uzyska? do niego odpowiedni uchwyt.
Teraz ?mia?o b?dziemy mogli korzysta? z WriteProcessMemory/ReadProcessMemory.
Funkcje, mamy ju? pokr?tce om?wione. Teraz wypada?oby zastanowi? si? co chcemy edytowa?. Jako przyk?adem pos?u?? si? warto?ci? HP naszej postaci.
W kliencie Tibii przechowywane s? 2 informacje odnosz?ce si? do poziomu ?ycia. Pierwsza z nich to aktualna ilo?? HP a druga to maksymalna ilo?? HP.
My zajmiemy si? tylko aktualn? ilo?ci?.
Aby odszuka? adres naszego poziomu ?ycia pos?u?ymy si? cheat enginem.
W odpowiednich okienkach wpisujemy warto?ci:
Value - 295 (stan naszego HP)
Scan Type - Exact Value (szukamy dok?adnie warto?ci 295)
Value Type - 4 byte (ilo?? naszego HP w pami?ci zajmuje 4 bajty, jest to typ integer).
Naciskamy "First Scan" i naszym oczom ukazuje si? d?uga lista adres?w.
Teraz udajemy si? na pobliski resp rat?w. Tracimy kilka HP. Wpisujemy w okienko Value nasz aktualny poziom ?ycia i klikamy "Next Scan".
Liczba adres?w powinna si? zmniejszy?. Akcj? powtarzamy do czasu otrzymania jednego wyniku.
Adres, kt?ry szukamy prawdopodobnie b?dzie zielony (sta?y).
Dla Tibii 8.54 jest to 00635F0C
W Delphi warto?ci w systemie hexadecymalnym zapisujemy tak:
$635F0C
W C++ natomiast ten sam zapis wygl?da tak:
0x635F0C
4. Implementacja
Tworzymy nowy projekt aplikacji konsolowej. Oboj?tnie czy to w Delphi czy C++ i zapisujemy gdzie? na dysku. Nasz programik b?dzie bardzo prymitywny poniewa? zmieni on tylko aktualny stan naszego HP na ustalon? przez nas wcze?niej warto??.
W Delphi do sekcji uses musimy doda? modu? Windows w c/c++ natomiast include "windows.h", dzi?ki temu b?dziemy mogli korzysta? z systemowego API.
Ja bardzo s?abo programuj? w C/C++ dlatego je?eli w przyk?adach znajd? si? jakie? b??dy typu "mo?na to zrobi? lepiej, bardziej optymalnie" wcale nie b?d? zdziwiony
Kod Delphi z komentarzami:
Teraz przyk?ad w C++ ale ju? bez komentarzy:
Ten przyk?ad by? pisany ca?kowicie z pami?ci wi?c co? mo?e nie dzia?a?. Licz? jednak, ?e ka?dy kto chocia? troch? pisz? w c zrozumie o co chodzi.
5. Podsumowanie
Pierwsza cz??? kursu Tibia Development Series w?a?nie dobieg?a ko?ca.
Mam nadziej?, ?e te kilka s??w da wam jaki? podstawowy zarys sytuacji.
Korzystaj?c z wymienionych wy?ej funkcji mo?ecie ca?kiem ?mia?o napisa? prostego light hacka czy outfit changera.
Je?eli jednak nie czujecie si? na si?ach poczekajcie do kolejnego odcinak, w kt?rym zaprezentuje jak napisa? bardzo proste ale funkcjonalne macro do Tibii.
Tibia Development Series nie mo?e by? kopiowane i rozpowszechniane na stronach innych ni? Tibia.net.pl bez mojej zgody.
Tibia Development Series w za?o?eniu b?dzie zbiorem artyku??w, kt?re pomog? pocz?tkuj?cym programistom zacz?? swoj? przygod? z pisaniem cheat?w.
Aby m?c w pe?ni zrozumie? przes?anie kursu potrzebna b?dzie podstawowa wiedza z zakresu programowania oraz obs?ugi kompilator?w.
Wszystkie dzieci, kt?rym wydaje si?, ?e po przeczytaniu takiego poradnika stworz? drugiego ElfBota mog? ju? opu?ci? ten temat. Kraina bajek jest kilka dzia??w ni?ej.
Wi?kszo?? przyk?ad?w b?d? podawa? w Delphi oraz by? mo?e w C++. Dodatkowo nie zaszkodzi?yby r?wnie? podstawy asemblera, co jednak na etapie tego kursu nie b?dzie wymagane.
Modyfikacja pami?ci za pomoc? WinApi.
1. Cel zadania
Ka?dy program uruchomiony pod systemem windows, dostaje pewn? cz??? pami?ci wirtualnej (Na systemach 32 bitowych s? to 4 GB).
To w?a?nie do tej pami?ci programi?ci maj? dost?p z poziomu systemowego API (WinApi).
Program to nic innego jak wielka tablica bajt?w zawieraj?ca si? w?a?nie w tej przestrzeni wirtualnej, kt?ra p??niej znajduje swoje odzwierciedlenie w pami?ci RAM.
Naszym celem b?dzie uzyskanie dost?pu do pami?ci wirtualnej, oraz modyfikacja pewnych warto?ci. Dok?adniej to zmienimy aktualny stan HP naszej postaci. B?dzie to jednak akcja widziana tylko po stronie naszego klienta.
2. Narz?dzia
Narz?dzia z jakich b?dziemy korzysta? to kompilator Delphi 7 (wystarczy w wersji Personal) oraz Cheat Engine 5.5
Cheat Engine - Download
3. Teoria
Dost?p do pami?ci wirtualnej wymaga skorzystania przez programist? z kilku funkcji. Na pocz?tku musimy znale?? PID (Process ID). Je?eli w??czymy Mened?er zada? (ctrl+alt+delete), przejdziemy do menu Widok->Wybierz kolumny... i zaznaczymy checkboxa PID, b?dziemy mogli podgl?dn?? ID ka?dego uruchomionego procesu, w tym Tibii ;]
Aby uzyska? PID mo?emy skorzysta? z kilku opcji, ja jednak zaprezentuje tutaj najprostsz? ale skuteczn? metod? polegaj?c? na znalezieniu uchwytu do okna.
Dlatego pierwsz? funkcj? z jakiej b?dziemy korzysta? to FindWindow
(dokumentacj? ka?dej funkcji znajdziecie na msdn wpisuj?c w googlach jej dok?adn? nazw?).
Za jej pomoc? uzyskamy uchwyt okna, kt?ry b?dzie nam niezb?dny do wykorzystania w funkcji GetWindowThreadProcessID, kt?ra zwr?ci PID.
Maj?c ID procesu mo?emy go sobie "otworzy?" za pomoc? funkcji OpenProcess i uzyska? do niego odpowiedni uchwyt.
Teraz ?mia?o b?dziemy mogli korzysta? z WriteProcessMemory/ReadProcessMemory.
Funkcje, mamy ju? pokr?tce om?wione. Teraz wypada?oby zastanowi? si? co chcemy edytowa?. Jako przyk?adem pos?u?? si? warto?ci? HP naszej postaci.
W kliencie Tibii przechowywane s? 2 informacje odnosz?ce si? do poziomu ?ycia. Pierwsza z nich to aktualna ilo?? HP a druga to maksymalna ilo?? HP.
My zajmiemy si? tylko aktualn? ilo?ci?.
Aby odszuka? adres naszego poziomu ?ycia pos?u?ymy si? cheat enginem.
W odpowiednich okienkach wpisujemy warto?ci:
Value - 295 (stan naszego HP)
Scan Type - Exact Value (szukamy dok?adnie warto?ci 295)
Value Type - 4 byte (ilo?? naszego HP w pami?ci zajmuje 4 bajty, jest to typ integer).
Naciskamy "First Scan" i naszym oczom ukazuje si? d?uga lista adres?w.
Teraz udajemy si? na pobliski resp rat?w. Tracimy kilka HP. Wpisujemy w okienko Value nasz aktualny poziom ?ycia i klikamy "Next Scan".
Liczba adres?w powinna si? zmniejszy?. Akcj? powtarzamy do czasu otrzymania jednego wyniku.
Adres, kt?ry szukamy prawdopodobnie b?dzie zielony (sta?y).
Dla Tibii 8.54 jest to 00635F0C
W Delphi warto?ci w systemie hexadecymalnym zapisujemy tak:
$635F0C
W C++ natomiast ten sam zapis wygl?da tak:
0x635F0C
4. Implementacja
Tworzymy nowy projekt aplikacji konsolowej. Oboj?tnie czy to w Delphi czy C++ i zapisujemy gdzie? na dysku. Nasz programik b?dzie bardzo prymitywny poniewa? zmieni on tylko aktualny stan naszego HP na ustalon? przez nas wcze?niej warto??.
W Delphi do sekcji uses musimy doda? modu? Windows w c/c++ natomiast include "windows.h", dzi?ki temu b?dziemy mogli korzysta? z systemowego API.
Ja bardzo s?abo programuj? w C/C++ dlatego je?eli w przyk?adach znajd? si? jakie? b??dy typu "mo?na to zrobi? lepiej, bardziej optymalnie" wcale nie b?d? zdziwiony

Kod Delphi z komentarzami:
Kod:
program Tibia;
{$APPTYPE CONSOLE}
uses
Windows;
//Deklaracja wa?ny zmiennych
var
WindowHandle : HWND;
PID : DWORD;
hProcess : DWORD;
Value : DWORD;
NBR : Cardinal;
const
ClassName = 'TibiaClient';
WindowName = 'Tibia';
HP = $635F0C;
begin
// W tej funkcji mo?emy w pierwszym parametrze
//skorzystac z ClassName lub z WindowName w drugim
WindowHandle := FindWindow(ClassName,nil);
//Otrzymalismy w ten sposob uchwyt okna Tibii
//sprawdzamy czy okno zostalo znalezione
if not(WindowHandle=0) then
begin
//Teraz za pomoca funkcji GetWindowThreadProcessID
//uzyskamy PID klienta Tibii
GetWindowThreadProcessID(WindowHandle, @PID);
//Otwieramy Process z odpowiednimi prawami dostepu
//i tym samym uzyskujemy wymagany pozniej uchwyt.
hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, PID);
//Zapisujemy do adresu $635F0C (aktualne HP) wartosc 10
Value:= 295;
WriteProcessMemory(hProcess,ptr(HP),@Value,4,NBR);
//Zamykamy uchwyt do procesu
CloseHandle(hProcess);
end;
end.
Teraz przyk?ad w C++ ale ju? bez komentarzy:
Kod:
#include "stdafx.h"
#include "windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
HWND WindowHandle = 0;
WindowHandle = FindWindow(L"TibiaClient",0);
if (WindowHandle!=0)
{
DWORD PID = 0;
GetWindowThreadProcessId(WindowHandle, &PID);
HANDLE hProcess;
hProcess = OpenProcess(0x0FFF, false, PID);
int LastErr = 0;
LastErr = GetLastError();
int Value = 10;
int HP = 0x635F0C;
WriteProcessMemory(hProcess,&HP,&Value,4,0);
CloseHandle(hProcess);
}
return 0;
}
5. Podsumowanie
Pierwsza cz??? kursu Tibia Development Series w?a?nie dobieg?a ko?ca.
Mam nadziej?, ?e te kilka s??w da wam jaki? podstawowy zarys sytuacji.
Korzystaj?c z wymienionych wy?ej funkcji mo?ecie ca?kiem ?mia?o napisa? prostego light hacka czy outfit changera.
Je?eli jednak nie czujecie si? na si?ach poczekajcie do kolejnego odcinak, w kt?rym zaprezentuje jak napisa? bardzo proste ale funkcjonalne macro do Tibii.
Tibia Development Series nie mo?e by? kopiowane i rozpowszechniane na stronach innych ni? Tibia.net.pl bez mojej zgody.

Jak by? mia? chwilk? i ch?ci mo?esz mi pom?c w zrozumieniu