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] Lineage2 I Szukanie Wzkaznika Do Hp


Rekomendowane odpowiedzi

Opublikowano

Witam

Napisalem sobie malego bota do lineage ktory bierze fiolke z energia jesli ta spadnie ponizej 80% , problem polega na tym ze za kazdym razem musze w cheat engine znalesc i mu wpisac adres do HP , przydalo by sie znalesc wzkaznik na ten adres , niestety w momencie jak daje find out what wite to this address , (czy jakos tak to szlo) to gra sie wylancza i niemoge nic znalesc , myslalem o jakims innym programie , prubowalem na innych wersjach bo uzywam gracji ale tez nic , ktos by pomogl jak znalesc ten wzkaznik. ?

Bo przeciez jakos sie to napewno da zrobic sa programy l2sniffer l2control i jakos tam to zrobili.

Pozdr

Opublikowano

w CE spróbuj włączyć kernelmode debugger, jeśli używasz MHS to spróbuj z AAC, potem użyj find out what accesses/writes to this address. Jeśli nadal wyłącza gre, spróbuj z pointerscanerem, to prostsza metoda.

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

  • 3 tygodnie później...
Opublikowano

Faktycznie przestalo wylanczac program ale cuz , niemoge sobie z tym poradzic , poprostu za kadym uruchomieniem mam inna wartosc i niemoge znalesc zielonego pointera, moze ktos by pomogl jak to zrobic bo juz wymiekam chyba z miesiac juz przy tym siedze i nic .

Opublikowano

w CE masz przykłady wyszukiwania pointów wyzszych lvl , od 3 przynajmniej masz pewnośc ze po restarcie wartośc z pamięci się nie zmieni i będzie zawsze właściwa

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

Zaluzmy ze znalazlem i jest to napszyklad

Pointer: 00816794

Offset: 4a0

ja pisze w delphi a prodedura odczytujaca to

ReadProcessMemory(ProcessHandle, Ptr($00816794), @buffer, 4, rw);

jak tam dodac ten offset ? , bo chyba do konca dobrze tego niewykonalem .

Opublikowano

skoro 00816794 to adres statyczny, odczytujesz z niego wartość tak jak to robisz potem do odczytanej wartości dodajesz 0x4A0 i masz adres ;)

  • 3 tygodnie później...
Opublikowano

No tak

Znalazlem poiter mam offset ale ten pointer za kazdym uruchomieniem gry wskazuje na ten sam adres , po restarcie komputera to samo ten sam adres , ale przeciez po uruchomierniu gry HP jest w pod innym adresem , czyzby nie o ten pointer chodzilo , a moze robie cos zle.

Opublikowano

Wskaźnik statyczny (czyli taki który należy do modułu gry i jest w postacie Moduł + Offset) nie ulega zmianie i zawsze wskazuje na adres z życiem, nie ważne że adres z ilością HP za każdym razem się zmienia, bo wskaźnik wskazuje po prostu jego lokalizacje w pamięci ;)

 

Jeśli w takim razie wskaźnik już nie wskazuje na ten adres po restarcie gry, to znaczy że nie jest statyczny, często w grach występuje zjawisko że wskaźnik wskazuje na wskaźnik. Być może to czego szukasz to tzw. multilevel pointer (jeśli przechodziłeś Cheat Engine Tutorial od autora to wiesz co to)

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

Adres ktory znajduje to adres statyczny zielony , uzywalem rowniez i MHS a , ale za kazdym razem pointer wskazuje na ten sam adres .

Zastanawiam sie czy dobrze robie ze po znalezieniu dodaje Pointer + Offset np

Pointer = $11223344

offset = $4

linia ktorej uzywam w programie to

ReadProcessMemory(ProcessHandle, pointer($11223348), @buffer, 4, rw)

po tej lini program podaje mi adres w ktorym faktycznie jest energia

ale po restarcie gry program podaje ten sam adress ale wartosc energii siedzi juz pod innym .

Moze zle robie ze dodaje pointer + offet juz sam niewiem .

Sprubuje jeszcze szukac pointera ktory wskazuje na pointer .

moze Lineage posiada jakis dobrze przemyslany antycheat , tu niemam niestety doswiadczenia z takimi przypadakami a juz brak mi pomyslow powoli .

Ah i zaptam jeszcze jak umiescic taki wynik z MHS w mojej procedurze odczytu. bo pododawac tego pokolei zdaje sie niemoge .

[[[[0x7CF76A40]+0x11c]+0x6c]+0x24]+0x230

Opublikowano

Czyli adres działa w CE, ale w programie nie działa?

Może znajdź inny wskaźnik przez Pointer scannera, najwiarygodniejsze są te ładowane na początku modułu z grą np. 0069B410

 

Z takim wynikiem z MHS musisz przeprowadzić dereferencje wskaźnika. W rzeczywistości te klamry [] wyznaczają adres z którego MHS czyta przez ReadProcessMemory. Np.

 

[0x7CF76A40]+0x230

To inaczej instrukcja:

Pointer = $7CF76A40;
ReadProcessMemory(ProcessHandle, pointer($7CF76A40), @buffer, 4, rw);
Pointer += 0x230; //nie wiem jak w delphi jest dodanie hex'a 0x230 :P

 

Czyli po prostu trzeba odczytywać wartość na wskaźniku, dodać do niej offset, odczytać wartość na wskaźniku, dodać offset itd. najlepiej zrobić sobie funkcje do tego, bo dość nie wygodnie jest np. robić tak:

DWORD energyBase = 0x7CF76A40;
if ( ReadProcessMemory( hProc, reinterpret_cast<LPCVOID>(energyBase), &energyBase, sizeof(energyBase) ) {
   energyBase += 0x11c;
   ReadProcessMemory( hProc, reinterpret_cast<LPCVOID>(energyBase), &energyBase, sizeof(energyBase);
   energyBase += 0x6c;
   ReadProcessMemory( hProc, reinterpret_cast<LPCVOID>(energyBase), &energyBase, sizeof(energyBase);
   energyBase += 0x24;
   ReadProcessMemory( hProc, reinterpret_cast<LPCVOID>(energyBase), &energyBase, sizeof(energyBase);
   energyBase += 0x230;
}
//Teraz energyBase wskazuje na adres z energią

 

Albo można też całkowicie odczytać to w definicji (tylko jeśli wstrzykujemy program do gry) np.

DWORD *BaseAddress = (DWORD*)0x7CF76A40;
DWORD *EnergyAddy = (DWORD*)(*BaseAddress+0x11c);
DWORD *EnergyAddy2 = (DWORD*)(*EnergyAddy+0x6c);
DWORD *EnergyAddy3 = (DWORD*)(*EnergyAddy2+0x24);
DWORD *EnergyAddy4 = (DWORD*)(*EnergyAddy3+0x230); //i tu mamy nasz adres energii z tego wskaźnika

 

Tak to kody w c++, na delphi nie znam się za dobrze, ale jutro poszukam jakiegoś kodu ;)

To powinno się różnić tylko składnią, zasada taka sama, np:

PtrBase = pointer($7CF76A40);
ReadProcessMemory(ProcessHandle, PtrBase, @PtrBase, sizeof(PtrBase));
PtrBase += $11c; //nie wiem jak jest w delphi dodanie 0x11c :P
ReadProcessMemory(ProcessHandle, PtrBase, @PtrBase, sizeof(PtrBase));
PtrBase += $6c;
itd.

 

Podaj może cały kod na odczytanie to ułatwi sprawe.

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

Aha czyli kazdy kolejny offset nalezy dodac do wlasnie otrzymanego adresu itd itd .

Przeprowadzilem kolejne proby i wynik jest troszke dziwny , takie obliczanie dziala rowniez w programie ale wykrylem pewna stala .

 

oto moj kod

 

wskaznik:=strtoint(edit6.Text);

ofset:=$e14;

GetWindowThreadProcessId(FindWindow(nil,'Lineage II'), @ID);

ProcessHandle:= OpenProcess(PROCESS_ALL_ACCESS, False, ID);

 

 

if ProcessHandle <> 0 then ReadProcessMemory(ProcessHandle, pointer(wskaznik), @buffer, 4, rw)

 

else

ShowMessage('niemaaaaaaaaa');

label7.caption:='$'+inttohex(buffer[3],2)+inttohex(buffer[2],2)+inttohex(buffer[1],2)+inttohex(buffer[0],2);

ile:=ofset+strtoint(label7.caption);

label10.caption:='$'+inttohex(ile,4);

Application.ProcessMessages;

wskaznik:=strtoint(label10.Caption);

ofset:=$6c;

ReadProcessMemory(ProcessHandle, pointer(wskaznik), @buffer, 4, rw);

label7.caption:='$'+inttohex(buffer[3],2)+inttohex(buffer[2],2)+inttohex(buffer[1],2)+inttohex(buffer[0],2);

ile:=ofset+strtoint(label7.caption);

label10.caption:='$'+inttohex(ile,4);

Application.ProcessMessages;

wskaznik:=strtoint(label10.Caption);

ofset:=$24;

ReadProcessMemory(ProcessHandle, pointer(wskaznik), @buffer, 4, rw);

label7.caption:='$'+inttohex(buffer[3],2)+inttohex(buffer[2],2)+inttohex(buffer[1],2)+inttohex(buffer[0],2);

ile:=ofset+strtoint(label7.caption);

label10.caption:='$'+inttohex(ile,4);

Application.ProcessMessages;

wskaznik:=strtoint(label10.Caption);

ofset:=$228;

ReadProcessMemory(ProcessHandle, pointer(wskaznik), @buffer, 4, rw);

label7.caption:='$'+inttohex(buffer[3],2)+inttohex(buffer[2],2)+inttohex(buffer[1],2)+inttohex(buffer[0],2);

ile:=ofset+strtoint(label7.caption);

label10.caption:='$'+inttohex(ile,4);

Application.ProcessMessages;

 

 

wszystko fajnie czyta i dochodzi do ostatniego adresu i pokazuje go prawidlowo

ale jest pewna zaleznosc ktora zdaza sie prawie za kazdym razem

mianowicie pierwsze 3 offsety sa zawsze takie same

oto kilka przykladow

[[[0x1130B4D4]+0x6c]+0x24]+0x228

[[[[0x7CF76A40]+0x11c]+0x6c]+0x24]+0x228

[[[[[0x0B95A31C]+0x448]+0xF88]+0x6C]+0x24]+0x228

[[[[[[0x01B03B0C]+0xbe8]+0xc]+0xb4]+0x6C]+0x24]+0x228

[[[[0x01B2079C]+0xe14]+0x6c]+0x24]+0x228

 

jak widac po 3 adresie juz sie gubi .

niestety adres koncowy po restarcie gry z reguly to $0228

Opublikowano

Teraz Ciebie nie rozumiem. Jak Ci wychodzą takie adresy? Przecież ty w kodzie to ustalasz, chyba że chodzi o to, że ten wskaźnik też nie jest statyczny. Delphi mi się ciężko czyta, ale Ty chyba nie dodajesz do odczytanej wartości offseta, bo nie widze żeby do odczytanej wartości czyli @buffer był dodawany offset.

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

dane typu

[[[[0x01B2079C]+0xe14]+0x6c]+0x24]+0x228

to wyciag z MHSa a 0x01B2079C to zielony adres statyczny ktory znalazlem

 

ofset:=$e14; tutaj wpisuje offset do zmiennej ofset

 

ReadProcessMemory(ProcessHandle, pointer(wskaznik), @buffer, 4, rw); tutaj pobiera adres pod ktory prowadzi wskaznik do buffera

 

label7.caption:='$'+inttohex(buffer[3],2)+inttohex(buffer[2],2)+inttohex(buffer[1],2)+inttohex(buffer[0],2); tutaj ustawia ten adres zeby byl w wizualnej postaci hex (tak mi potrzeba zeby go wyswietlic)

 

ile:=ofset+strtoint(label7.caption); tutaj dodaje offset $e14

 

label10.caption:='$'+inttohex(ile,4); a tutaj wswietla mi go wpostaci hex

 

puzniej jeszcze 3 takie procedury ktore prowadza pod adres koncowy w ktorym faktycznie znajduje sie energia w grze

czyli do otrzymanego adresu dodaje kolejno $6C puzniej $24 a puzniej $228

ta procedura dziala bo faktycznie dobrze mi pokazuje

ale jak zrobie rebot gry to pokazuje juz inny czesto ten sam .

 

jest jedna stala zaleznosc czyli odczyty z MHS

[[[0x1130B4D4]+0x6c]+0x24]+0x228

[[[[0x7CF76A40]+0x11c]+0x6c]+0x24]+0x228

[[[[[0x0B95A31C]+0x448]+0xF88]+0x6C]+0x24]+0x228

[[[[[[0x01B03B0C]+0xbe8]+0xc]+0xb4]+0x6C]+0x24]+0x228

[[[[0x01B2079C]+0xe14]+0x6c]+0x24]+0x228

offsety sa takie same do 3 pozycji

puzniej ruznie bywa

Opublikowano

Czyli jak dobrze rozumiem to wskaźnik po restarcie już nie wskazuje tego adresu z energią. Spróbuj może w Cheat Engine poszukać wskaźników Pointer scannerem, potem zrób restart gry, wczytaj CE ponownie do gry i zrób Rescan w skanerze, najlepiej poszukaj przez "value to find", czyli wartość aktualnego stanu energii. Wtedy będziesz miał pewność, że znalazłeś wskaźnik który za każdym razem prawidłowo wskazuje na adres z energią. I to najczęściej ten prawidłowy wskaźnik wygląda (dla przykładu) albo coś w stylu takim:

[[[[Lineage.exe+0x54c]+0x23a]+0x6a]+0x68]+0x24c

Czyli że BaseAddress jest w postaci Moduł+Offset

 

Lub z adresem podstawowym z dwoma zerami na początku np. (wbrew pozorom to też jest statyczny wskaźnik moduł+offset tylko, że gra często ukrywa ten prawdziwy adres)

[[[[0x005944c4]+0x1a]+0x6b]+0x8f]+0x122

 

A jak nie ma ani takiego ani takiego to na pewno trafi się jakiś inny działający. Ogółem to zależy od tego gdzie znajduje się struktura gracza :)

 

Aż sam bym to chętnie sprawdził ale Lineage jest płatne chyba ;]

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

Tak po restarcie wskaznik niewskazuje juz na adres z energia ..

ale niebardzo ruzumie z tym CE

czylli najpierw znalllesc adres pod ktoorym znajduje sie aktuallna wartosc energi a puzniej poointer scan ?

 

PS... Tak lineage jest platny allle ja gram na darmowym serverze ..

Jeslli masz ochote sie pobawic to tu masz link do gry

http://www.fileplay.net/f/5178/mirrors#mirror-top

ze strony http://www.lineage.ro/ pociagniesz patch i juz ..

Jeslli bedzie ci sie chcialllo to dam ci jakies stare konto do prub

Ale uwazaj jak sie zaszczepisz to przepadniesz. ;]

Opublikowano

No tak probowalem tego co pisales ale wychodzi mi na poczatku w CE np

Engine.dll+004C8423

zastanawiam sie jak to zapisac w programie jak to przeliczyc na adres hex ktory moge wprowadzic do programu

Opublikowano

Żeby w programie taki adres obsłużyć musisz użyć jakiejś funkcji która umożliwia wyciągnięcie bazowego adresu z modułu Engine.dll, np taki:

function GetModuleBase(hProcID: Cardinal; lpModName: PChar):Cardinal;
var
 hSnap: Cardinal;
 tm: TModuleEntry32;
begin
 result := 0;
 hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, hProcID);
 if hSnap <> 0 then
 begin
   tm.dwSize := sizeof(TModuleEntry32);
   if Module32First(hSnap, tm) = true then
   begin
     while Module32Next(hSnap, tm) = true do
     begin
       if lstrcmpi(tm.szModule, lpModName) = 0 then
       begin
         result := Cardinal(tm.modBaseAddr);
         break;
       end;
     end;
   end;
   CloseHandle(hSnap);
 end;
end;

 

I w kodzie to będzie coś w stylu:

Base = GetModuleBase(proc_id, "Engine.dll");

Addy1 = (Base+4C8423);

 

Ps. Na PW Ci napisałem nr GG, może coś Ci pomoge.

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...