Kod:public static readonly uint XOR = 0x7C42D0 - 0x400000 + baseAdress; // 10.36
public static readonly uint Player_Health = 0x959000 - 0x400000 + baseAdress; // 10.36
Wersja do druku
Kod:public static readonly uint XOR = 0x7C42D0 - 0x400000 + baseAdress; // 10.36
public static readonly uint Player_Health = 0x959000 - 0x400000 + baseAdress; // 10.36
No i potem hp = readint(player_hp) xor readint(xor) i masz hp
(zakładam, ze otwartą pamięć tibii trzymasz w $pamiec)
Jakby ktoś chciał się bawić, to dla ułatwienia sobie można użyć tych funkji :
Kod PHP:func xor($xxx) $drugi = _MemoryRead(0x7C42D0 - 0x400000 + $BaseAdress, $pamiec) $aa1 = BitXOR($xxx, $drugi) return $aa1 EndFunc
adres() - zamiast co kawałek pisać xxx - 0x400000 + base, robisz adres(xxx) ,Kod PHP:func adres($add) $ile = $add - 0x400000 + $BaseAdress return $ile EndFunc
np. pobieranie hp (ofc jeszcze to trza xornąć)
xor() - xorowanie, zamiast co kawałek obliczać adres, robisz xor(xxx),Kod:$hp = _MemoryRead(adres(0x959000), $pamiec)
np pobieranie ilości hp :
lub w dłuższej wersji :Kod:$HP = xor(_MemoryRead(adres(0x959000), $pamiec))
; )Kod:$hp1 = 0x959000 - 0x400000 + $BaseAdress
$hp2 = _MemoryRead($hp1, $pamiec)
$xor = _MemoryRead(0x7C42D0 - 0x400000 + $BaseAdress, $pamiec)
$HP = BitXOR($hp2, $xor)
anyway, pomóżcie wyciągnąć z pamięci =D :
nick postaci
serwer
profesja
Może zna ktoś z was adresy? ;]
@LordCompi ;
Po co oni dodali to xorowanie? xD
żeby było trudniej boty pisać zapewne, tak samo jak zmienne adresy czy cotam
@BBsrv http://tpforums.org/forum/forums/89-Client-Updates
Robisz pętle po całej bl jeśli aktualnie przeszukiwany obiekt (potwor, gracz,npc) ma ID = twojemu wyciągasz Nick
Ew pobierasz nazwę okna i wywalasz "Tibia - " xd można też z CharList struct
Czy tylko u mnie timery są zjebane...? co bym nie zrobił to appka po chwili robi sie brak odpowiedzi... no kurwica mnie weźmie zara...
/edit
nie ważne, już wiem.. trzeba w funcję wsadzić jakiekolwiek 4 zmienne...
dla potomnych,
func xxx($1, $2, $3, $4)
blablabla
endfunc
Nick postaci jest bardzo łatwo znaleźć. Najprostszy sposób to pobranie ID gracza (0x957034) i zeskanowanie battlelisty.Cytuj:
nick postaci
serwer
profesja
Robimy to tak
(pseudokod)
Profesje robi się chyba tak samo, ale nie jestem w 100% pewien bo nigdy nie potrzebowałem tego.Kod:bl_start=0x9AC558
bl_step=0xc0
for( i=0; i<1299; i++) {
id=readint(bl_start+(i*bl_step));
if id=readint(player_id) { nick=readstring(bl_start+(i*bl_step)+4); }
}
A serwer to juz inna bajka, o wiele bardziej złożona niż nick.
Adresy chyba z 10.35
Odkopuje...
Wie ktos jak rozwiazac ten problem z zerowym baseaddressem? Kod z #6 postu nic nie zmienia
Ja z tego ostatnio korzystalem i dzialalo:
A tutaj include:Kod:#include <Pointer2.au3>
Local $prozessname = "JakasGra.exe"
$PID = ProcessExists($prozessname)
If $PID > 0 Then
$Handle = _MemoryOpen($PID)
$Address = _MemoryModuleGetBaseAddress("" & $PID & "", "" & $prozessname & "")
$Address = "0x" & Hex($Address + Dec("01ECBE54"))
Dim $Offset[3]
$Offset[0] = 0x0
$Offset[1] = 0x5C
$Offset[2] = 0x260
EndIf
$Read = _MemoryPointerRead($Address, $Handle, $Offset, "dword")
_MemoryClose($Handle)
MsgBox(0, "", "VALUE IS : " & $Read[1])
http://speedy.sh/wKqv6/Pointer2.au3
wyłącz ASLR -> olej base adres -> profit.
możesz wyłączyć albo emetem albo zmodyfikować klienta (opcja 2 szybsza)
RADA SUPER TRU: zacznij pisać w prawdziwym języku == profit