Log in

View Full Version : [11.00] Blackd Tibia addresses 11.00



blackd
09-17-2016, 18:16
All addresses are now complex paths (read more here (http://www.blackdtools.net/showthread.php?62963-Tibia-11-Dealing-with-the-memory-addresses)) You can test them with Cheat Engine (http://www.cheatengine.org/)
So far I found following addresses:

Shortest paths found so far:
adrXPos="Qt5Core.dll" + 004555C8 > 8 > 134 > 24 > 18
adrYPos="Qt5Core.dll" + 004555C8 > 8 > 134 > 24 > 1C
adrZPos="Qt5Core.dll" + 004555C8 > 8 > 134 > 24 > 20
adrMyHP="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 8
adrMyMaxHP="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > A
adrCapacity="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > C
adrMaxCapacity="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 10
adrExperience="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 18
adrLevel="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 20
adrMyMana="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 50
adrMyMaxMana="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 52
adrMySoul="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 54
adrSpeed_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 56
adrSpeed_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 58
adrStamina_InMinutes="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 5c
adrFood_InSeconds="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 60
adrOfflineTraining_InMinutes="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 68
adrSkills_CollectionStart="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c
adrSkills_AXE_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 14
adrSkills_AXE_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 16
adrSkills_AXE_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 18
adrSkills_CLUB_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 14
adrSkills_CLUB_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 16
adrSkills_CLUB_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 18
adrSkills_SHIELDING_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 14
adrSkills_SHIELDING_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 16
adrSkills_SHIELDING_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 18
adrSkills_MAGICLEVEL_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 0 > 14
adrSkills_MAGICLEVEL_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 0 > 16
adrSkills_MAGICLEVEL_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 0 > 18
adrSkills_FISHING_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 8 > 0 > 14
adrSkills_FISHING_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 8 > 0 > 16
adrSkills_FISHING_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 8 > 0 > 18
adrSkills_FIST_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 8 > 0 > 0 > 14
adrSkills_FIST_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 8 > 0 > 0 > 16
adrSkills_FIST_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 8 > 0 > 0 > 18
adrSkills_SWORD_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 8 > 14
adrSkills_SWORD_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 8 > 16
adrSkills_SWORD_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 8 > 18
adrSkills_DISTANCE_Current="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 8 > 14
adrSkills_DISTANCE_Base="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 8 > 16
adrSkills_DISTANCE_Progress="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 9c > 4 > 0 > 0 > 8 > 18
adrChatLog_tabStruct="Qt5Core.dll" + 4555C8 > 8 > 118



adrServerList_CollectionStart="Qt5Core.dll" + 004555C8 > 8 > 168 > 54 > 18 > 2c
randomServerNameInCollection="Qt5Core.dll" + 004555C8 > 8 > 168 > 54 > 18 > 2c > 0 > 18 > 10
adrSelectedCharName="Qt5Core.dll" + 004555C8 > 8 > C > 4 > 18 > 38 > 28

adrSelectedItem_currentScreenPositionY="Qt5Widgets .dll" + 00401DC4 > 70 > 4 > 68
' adrSelectedItem_currentScreenPositionY points to a 8 bytes DOUBLE, containing the Y position of the selected row.
adrSelectedItem_currentScreenPositionX="Qt5Widgets .dll" + 00401DC4 > 70 > 4 > 60
adrSelectedItem_width="Qt5Widgets.dll" + 00401DC4 > 70 > 4 > a0
adrSelectedItem_height="Qt5Widgets.dll" + 00401DC4 > 70 > 4 > a8

adrSelectedCharName_afterCharList="Qt5Core.dll" + 004555C8 > 8 > 320 > 18 > 60 > 0
adrSelectedServerURL_afterCharList="Qt5Core.dll" + 004555C8 > 8 > 320 > 18 > 60 > 4
adrSelectedServerPORT_afterCharList="Qt5Core.dll" + 004555C8 > 8 > 320 > 18 > 60 > 8
adrSelectedServerNAME_afterCharList="Qt5Core.dll" + 004555C8 > 8 > 320 > 18 > 60 > C

adrConnectionKey="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 2F0 > 7C > B8

adrBattlelist_CollectionStart="Qt5Core.dll" + 004555C8 > 8 > 1D8 > E4 > 8
adrNewBlueSquare="Qt5Core.dll" + 004555C8 > 8 > 1D8 > E4 > 14
adrNewRedSquare="Qt5Core.dll" + 004555C8 > 8 > 1D8 > E4 > 1C
// Your player ID can be obtained near:
adrNum="Qt5Core.dll" + 004555C8 > 8 > 1D8 > E4 > 10
// and it is *usually* the first ID in battlelist (NOT ALWAYS):
adrNum1="Qt5Core.dll" + 004555C8 > 8 > 1D8 > E4 > 8 > 0 > 14 > 10
// battlelist, ID of other creature there:
adrNum2="Qt5Core.dll" + 004555C8 > 8 > 1D8 > E4 > 8 > 8 > 14 > 10

Needs further testing and investigation:
adrSelectedCharIndex="Qt5Gui.dll"+00482EE4 > 20 > C > 58 > 4 > F8 > 418
WARNING: does not work after login into game: "Qt5Gui.dll"+00482EE4 > 20 > C > 58 > 4 > F8 = 0
However, when you are ingame you can read selected char name directly:
adrSelectedCharName="Qt5Core.dll" + 004555C8 > 8 > C > 4 > 18 > 38 > 28
' Note: this is address is set only while game is connected, being a good way to know if you are connected.
' adrSelectedCharName_afterCharList is set much faster, but it is not good as a way to know if you are connected.

adrSelectedCharIndex="Qt5Gui.dll"+00482EE4 > 20 > C > 58 > 4 > 108 > 4 > 28 > 0 > 4 > F8 > 418


adrFirstLocalChat_MsgStruct="Qt5Core.dll" + 004555C8 > 8 > 1D8 > FC > 14 > 18 > 0 > 0
LocalChat_FirstLineText_Unicode="Qt5Core.dll" + 004555C8 > 8 > 1D8 > FC > 14 > 18 > 0 > 8 > 10



SELECTEDCHANNEL_FirstLineText_Unicode="Qt5Gui.dll" + 00482EE4 > 28 > 0 > 118 > 64 > 18 > 0 > 8 > 10
SELECTEDCHANNEL_FirstLineText_Unicode="Qt5Core.dll" + 004555C8 > 8 > 118 > 64 > 18 > 0 > 8 > 10
SELECTEDCHANNEL_ChannelName_Unicode="Qt5Core.dll" + 004555C8 > 8 > 118 > 64 > 10 > 10 > 10
SELECTEDCHANNEL_FirstLineText_Unicode=adrChatLog_t abStruct> 64 > 18 > 0 > 8 > 10
SELECTEDCHANNEL_ChannelName_Unicode=adrChatLog_tab Struct > 64 > 10 > 10 > 8 > 10

maxibaby
09-18-2016, 09:34
Nice, good to know.

Any tip on how you found those address, whenever i tried, i found a bounch of them, everyone decreasing and increasing by the same ammount ( For example, coords ) , so by the end i had a list of 1500 adresses.
Did you know the coords from before?

Also would like to know if you have been able to attach Ollydbg to Tibia11, since it just crashes for me.
So far have only been able to emulate keystrokes to the Tibia client, haven't found any internal function.

Any other website you know has people trying to work with tibia 11? tpforums seems like dead to me, and is so hard to surf, everything crashes.


This is the CT table for the addresses you posted.
8118

BTW is there any way we can talk? Like Skype or something? I speak spanish also :)

blackd
09-18-2016, 10:29
Answering to your questions:
-The procedure to find addresses in Tibia 11:
http://www.blackdtools.net/showthread.php?62970-Tibia-11-The-procedure-to-find-new-memory-addresses-(paths)

-All the current knowledge about Tibia 11:
http://www.blackdtools.net/showthread.php?62969-Tibia-11-All-the-current-knowledge-about-it

-I prefer to avoid any kind of chats. I specially hate Skype. If you need to contact me in private then do it by email, in english or spanish, by email: daniel@blackdtools.com

-Anyways, in order to speed up Tibia 11 investigations, it is better to share every discovery, questions and answers in forums.

-OllyDbg2 barely works with EMET disabled, however it looks hardly usefull for Tibia 11.

maxibaby
09-18-2016, 10:52
Nice, thanks, will give it a try!


Anything about Ollydbg?
Any idea how to get again the battelist ?

blackd
09-18-2016, 10:55
You can download Microsoft EMET, then use it to disable ASRL, restart computer, then run ollydbg as admin and it will work while Tibia is paused. If you run it then it reach an exception and stops, so it looks hardly usefull for Tibia 11.

maxibaby
09-19-2016, 01:30
With these settings I always get blank list on the Rescan, any idea?

8119

blackd
09-19-2016, 02:11
In Tibia 11 you should uncheck "Addresses must be 32-bit aligned"

maxibaby
09-20-2016, 19:06
I know my questions may sound silly but I'm pretty new to reverse engineering, still trying to learn my tools.

How do you deal with such high scan times when you try to get the static paths , since after disabling the alignment, it takes over an hour for each pointer scan and the new paths you have found are length 8!!

Sydek
09-20-2016, 20:10
I have a question and its meant to help me understand if im doing my pointer scans properly , I see maxibabys hp offsets and daniels are different, maxis work fine for me, Im I missing something, was there a silent patch?


daniels : adrMyHP="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 8
maxis : DWORD healthOffset[] = {0x004555C8, 0x8, 0x134, 0x2C, 0x24};

Thanks in advance!

blackd
09-20-2016, 20:33
@maxibaby: Yes, it is nearly impossible to directly find paths longer than 5 using brute force. That only happen with complex structures like this weird structure holding the skills. However you can investigate where the struct starts and then just search paths to that start.
Check this: Tibia 11 - About the structure of the SKILLS in memory (http://www.blackdtools.net/showthread.php?62973-Tibia-11-About-the-structure-of-the-SKILLS-in-memory)

@Sydek: About the hp path: There are really several valid paths. I decided to use a different one because it was more similar to the rest of paths and it helps in future updates. You might be failing to read my new hp path because this new one is only 2 bytes. The old one was 4 bytes or it was stored near zeroes. I think most Tibia 11 values are really stored in only 2 bytes.

https://blackdtools.net/adrMyHP_Tibia11.jpg

Zephirus
10-13-2016, 08:25
blackd hablas español? :o
hace varios años que no hago nada para tibia, pero
solia usar la base mem del tibiaclient, y en base a eso, buscaba los datos, base+XX=mana, etc
vi que como bien mencionas ahora el proceso se llama, Qt5QWindowOwnDCIcon
supongo que la base es 004555C8
pero con lo demas me pierdo :s
ejm
004555C8 > 8 > 134 > 24 > 18
la dir de mem de eso seria?
004555C8+(algo)

ah te referis a los flags del cheat engine, ahi estoy mirando el t11.ct
bueno voy a ver si miro con eso aver si entiendo algo xD
(sorry spanish)

blackd
10-13-2016, 11:39
Hola, si, soy español de España.
Lo primero es obtener la base actual de Qt5Core.dll y luego le sumas 00455C8 y desde ahí empiezas con los saltos.
Lo mejor es que primero compruebes como funciona en cheat engine y luego ya tu desarrolles tu método para evaluar el valor actual de una ruta.

Nota: para obtener la base actual de Qt5Core.dll (y de las demás dll) sólo necesitas analizar las regiones de memoria una sóla vez por cada pid. Hacerlo más veces sería malgastar mucha cpu.
Tienes una función para esto en mi otro post. Lee todo primero.

Zephirus
10-15-2016, 06:30
Hola, si, soy español de España.
Lo primero es obtener la base actual de Qt5Core.dll y luego le sumas 00455C8 y desde ahí empiezas con los saltos.
Lo mejor es que primero compruebes como funciona en cheat engine y luego ya tu desarrolles tu método para evaluar el valor actual de una ruta.

Nota: para obtener la base actual de Qt5Core.dll (y de las demás dll) sólo necesitas analizar las regiones de memoria una sóla vez por cada pid. Hacerlo más veces sería malgastar mucha cpu.
Tienes una función para esto en mi otro post. Lee todo primero.


Hola, bueno, mire con el cheat engine, y vi lo siguiente, cargando la tablita t11.ct,
elijiendo el tibia, veo los valores bien
si copio los valores, en el cheat engine
veo el realadrres , que puedo utilizar bien ,
leo la direccion de memoria y eso perfecto, como hacia antes
pero claro al cerrar y abrir el client,
me cambia la base del qt5core. y ya la proxima no me sirven mas los valores.

con el tibia anterior como no me cambiaba la base nunca, no tenia problema, leia siempre lo mismo,
ahora mi problema es como ver la base actual de qt5core.dll :/ cada una de las veces

con los procesos ando un poco flojo, creo que se ver los id de los exes nomas :s
hay algun api que pueda usarse para ver la base del qt5core.dll ?

nose si habias subido un ejemplo en visual sobre, eso. pero prove de instalar el visual y no logre hacerlo andar,
pero nunca programe nada en visual, ando mas perdido por ese lado :s
nose si lo prove en el visual98 que instala el vb6, que fue un parto porque en w10 no me andaba.

asique de momento copiaba los valores de la tabla , abria un txt desde mi bot y me duraba hasta que lo cierre xD
al menos el autohealing que habia hecho va bien.
pero es una burrada.

si logro hacer andar eso, listo con lo que aprendi a programar, desde el ultimo bot, hago maravillas.
en el viejo , cambiaba skins, veia el battle, hacia tacticas de ataque , segun el battle. curaba tiraba runas detodo xD

me divertia mas haciendo el bot que jugando claro xd ,
incluso habia programado mage bombs, y jugaba con un team de bots, healers etc,
(juego hace 15 años al tibia) con varias idas y venidas, ciertamente quiero resolver un par de quests que por lo que se nadie pudo nunca, es lo unico que me motiva, asique puedo aportar una cantidad de cosas xD,

te cuento que en algun momento , ayude cuando el primer tibia habia salido, que lo hosteaban en una univ de alemania,
despues empesaron a ver $$ y se borraron.
tenia una version de tibia offline, que hice de cero, en venganza
que despues con un amigo brasilero, que armo la base, fue la madre de los Otservers.
incluso si alguna vez viste alguno en ots, con chars multicolores inbaneable xD ya sabes quien era jaja
pero bueno, aca estamos divirtiendonos un poco,
(incluso un par de bots que estuvieron varios años, por no dar publicidad) fueron codigos mios,
pero tipico que ven el negocio y se desaparecen.

tenes alguna rutina que uses en vb , que pueda crearse un dll? (yo programo en purebasic) :S
tiene soporte para dlls, apis etc,

voy a insitir en ver como funciona eso, porque deberia poder usar cualquier api que use el visual,
pero como no lo puedo hacer correr ya estoy jodido,

ahi me fijo que era lo que no me andaba, pero creo que por ejemplo las variables del dll,
si estaban fuera de la sub rutina daban error,

Zephirus
10-15-2016, 06:40
ah mira, aca estaba provando el bot en un ot claro :p
pero solo el aiming, hasta que saque pk sin querer XD
se ve feito porque lo filme con la palm

https://www.youtube.com/watch?v=J52dSh01PSo

blackd
10-15-2016, 15:48
La función para leer las bases de las .dll la tienes en mi segundo post de http://www.blackdtools.net/showthread.php?62963-Tibia-11-How-to-read-things-in-Tibia-11-memory

Está escrito en VB.NET 2010 Express, un lenguaje totalmente gratuito cortesía de Microsoft, incluido en el pack Visual Studio 2010 Express, y disponible en español. Además, en mi opinión, es un compilador tan potente como cualquiera de los compiladores modernos, y permite programar cosas muy complejas en poquísimo tiempo.
La función también la tengo disponible en VB6, pero es mucho más grande y más enrevesada pues VB6 es un lenguaje ya muy antiguo y no dispone de algunos métodos modernos que se necesitan para acceder directamente a las regiones de memoria.

Zephirus
10-22-2016, 01:17
si baje uno el otro dia mm nose si ese viene solo el visual 2010 express y lo descarga de internet, el problema supongo es que lo instale en la netbook, que tiene 32bits, y al compilar me daba error. pero para colmo el tibia11 no levantaba en esa pc por el opengl xD (en realidad queria ver nomas como funcionaba el codigo) para traducirlo. no me va quedar mas opcion que instalarlo aca en mi pc previo al w7 , capas en alguna vm sino :/ , pero nose si me dio algun problema el w10 ah si, aca me da un error , Me dice la aplicacion no se pudo iniciar correctamente (0xc000007b) que es algun dll que se ve no lo toma :/
me dice lo mismo que con algunos juegos, todabia nose cual es la maldita libreria que me da error,
tendria que hacer algo parecido a lo que haces para ver el adres, pero que me muestre todo lo que esta usando, asi se que lib es la que no abre xD
voy a tener que instalar el w7 :( ,
justo hace poco pase el w10x64 al ssd, y no me quedo otra que sacar los otros, me pasaba que como actualize del xp al w7 y al w10 en diferentes discos, el w10 me pedia tener enchufados los otros discos,(ahora tengo 15 teras de espacio) asique los vole los mas chicos,
antes tambien tenia el w10pro, y me andaban :/ . lo raro que instale todas las librerias del c++redist 2005 2008 2015 2010, el framework y lo mismo . hay algo que no le gusta. lo malo que nisiquiera me dice, cual es la dll que no abre,
bueno , de momento voy a crear una vm con w7 aver si corre el tibia 11, si corre, le instalo ahi el visual
tengo un amigo que es medio experto con esos temas, que siempre me salva, pero hasta que no lo agarre con tiempo, ganas y cafe,
lo veo dificil xD

blackd
10-22-2016, 11:05
Tendrás muchos menos errores de compatibilidad si configuras UAC a nivel mínimo. Yo uso Windows 10 asi sin problemas. Por ejemplo, aquí te explican cómo hacerlo: El Control de cuentas de usuario (UAC) de Windows 10 causa problemas (http://www.elgrupoinformatico.com/control-cuentas-usuario-uac-windows-causa-problemas-t25555.html)

Turysta
12-13-2016, 22:34
Sorry for stupid question but how to convert
this: adrMyHP="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 8
to this: healthOffset[] = {0x004555C8, 0x8, 0x134, 0x2C, 0x24};
step by step.

Sydek
12-13-2016, 22:44
Sorry for stupid question but how to convert
this: adrMyHP="Qt5Core.dll" + 004555C8 > 8 > 1D8 > 60 > 8
to this: healthOffset[] = {0x004555C8, 0x8, 0x134, 0x2C, 0x24};
step by step.

Unless theres an advanced algorithm, its pretty much the same as getting the first one in the first place, only that this time you in theory should have more clues about how the final path looks like. In other words, i dont think theres an easy way to convert, you must learn how to find adresses with offsets, theres links about it on the main programming forum.