Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Bom, comecei a pouco a me aprofundar em engenharia reversa de programas/jogos, resolvi fazer esse post pra se alguém com objetivo em comum precisar de um ponto de partida já que existe pouco conteúdo sobre, e os fóruns antigos de reversão voltado para Tibia/OTserv estão mortos.

 

[STATUS]

GamePtr

-->LocalPlayer-->Inventario

-->Creatures

-->Protocolo

 

falta mapa e containers.

 

 

Obs: eu vou focar o tópico no PXG mas essas mesmas informações de estrutura são compatíveis com qualquer OTclient desde que você atualize os offsets.

 

Programas usados:

IDA PRO - conseguir ponteiros dissecar estruturas e funções

Cheat Engine - confirmar offsets

ReClass - criar uma classe para o ponteiro das criaturas na Battle List

 

Se alguém tiver alguma duvida sobre como conseguir os OFFSETS ou de como usar os programas citados acima pode perguntar no tópico que eu responderei assim que possível.

 

image.png.db63eaba5d2f696efccf095fc2c2dc60.png

 

PXG DIRECTX9 23/09/2019

OFFSETS/OFFSETS:

// Created with ReClass.NET by KN4CK3R

class CreaturePtr
{
public:
	char pad_0000[12]; //0x0000
	uint16_t m_pos_x; //0x000C
	char pad_000E[2]; //0x000E
	uint16_t m_pos_y; //0x0010
	char pad_0012[2]; //0x0012
	uint8_t m_pos_z; //0x0014
	char pad_0015[7]; //0x0015
	uint32_t m_id; //0x001C
	char pad_0020[4]; //0x0020
	uint8_t m_name_lenght; //0x0024
	char pad_0025[3]; //0x0025
	char m_name[16]; //0x0028
	uint8_t m_healthPercent; //0x0038
	char pad_0039[3]; //0x0039
	uint8_t m_direction; //0x003C
	char pad_003D[3]; //0x003D
	uint8_t m_outfit_visible; //0x0040
	char pad_0041[3]; //0x0041
	uint8_t m_outfit_looktype; //0x0044
	char pad_0045[7]; //0x0045
	uint8_t m_outfit_head; //0x004C
	char pad_004D[3]; //0x004D
	uint8_t m_outfit_body; //0x0050
	char pad_0051[3]; //0x0051
	uint8_t m_outfit_legs; //0x0054
	char pad_0055[3]; //0x0055
	uint8_t m_outfit_feet; //0x0058
	char pad_0059[3]; //0x0059
	uint8_t m_outfit_addon; //0x005C
	char pad_005D[83]; //0x005D
	uint16_t m_light; //0x00B0
	char pad_00B2[2]; //0x00B2
	int32_t m_speed; //0x00B4
	uint8_t m_skull; //0x00B8
	uint8_t m_shield; //0x00B9
	uint8_t m_emblem; //0x00BA
	uint8_t m_type; //0x00BB
	uint8_t m_icon; //0x00BC
	char pad_00BD[363]; //0x00BD
	bool m_walking; //0x0228
	char pad_0229[123]; //0x0229
	uint16_t m_autoWalkDestination_x; //0x02A4
	char pad_02A6[2]; //0x02A6
	uint16_t m_autoWalkDestination_y; //0x02A8
	char pad_02AA[2]; //0x02AA
	uint8_t m_autoWalkDestination_z; //0x02AC
}; //Size: 0x02AD

class ItemPtr
{
public:
	char pad_0000[16]; //0x0000
	uint8_t m_slotid; //0x0010
	char pad_0011[21]; //0x0011
	uint16_t m_clientId; //0x0026
	char pad_0028[2]; //0x0028
	uint16_t m_serverId; //0x002A
	char pad_002C[2]; //0x002C
	uint8_t m_countOrSubType; //0x002E
}; //Size: 0x002F

class LocalPlayerPtr
{
public:
	char pad_0000[12]; //0x0000
	uint16_t m_pos_x; //0x000C
	char pad_000E[2]; //0x000E
	uint16_t m_pos_y; //0x0010
	char pad_0012[2]; //0x0012
	uint8_t m_pos_z; //0x0014
	char pad_0015[7]; //0x0015
	uint32_t m_id; //0x001C
	char pad_0020[4]; //0x0020
	uint8_t m_name_lenght; //0x0024
	char pad_0025[3]; //0x0025
	char m_name[16]; //0x0028
	uint8_t m_healthPercent; //0x0038
	char pad_0039[3]; //0x0039
	uint8_t m_direction; //0x003C
	char pad_003D[3]; //0x003D
	uint8_t m_outfit_visible; //0x0040
	char pad_0041[3]; //0x0041
	uint8_t m_outfit_looktype; //0x0044
	char pad_0045[7]; //0x0045
	uint8_t m_outfit_head; //0x004C
	char pad_004D[3]; //0x004D
	uint8_t m_outfit_body; //0x0050
	char pad_0051[3]; //0x0051
	uint8_t m_outfit_legs; //0x0054
	char pad_0055[3]; //0x0055
	uint8_t m_outfit_feet; //0x0058
	char pad_0059[3]; //0x0059
	uint8_t m_outfit_addon; //0x005C
	char pad_005D[83]; //0x005D
	uint16_t m_light; //0x00B0
	char pad_00B2[2]; //0x00B2
	int32_t m_speed; //0x00B4
	uint8_t m_skull; //0x00B8
	uint8_t m_shield; //0x00B9
	uint8_t m_emblem; //0x00BA
	uint8_t m_type; //0x00BB
	uint8_t m_icon; //0x00BC
	char pad_00BD[363]; //0x00BD
	bool m_walking; //0x0228
	char pad_0229[52]; //0x0229
	bool m_premium; //0x025D
	char pad_025E[58]; //0x025E
	uint16_t m_lastPrewalkDestination_x; //0x0298
	char pad_029A[2]; //0x029A
	uint16_t m_lastPrewalkDestination_y; //0x029C
	char pad_029E[2]; //0x029E
	uint8_t m_lastPrewalkDestination_z; //0x02A0
	char pad_02A1[3]; //0x02A1
	uint16_t m_autoWalkDestination_x; //0x02A4
	char pad_02A6[2]; //0x02A6
	uint16_t m_autoWalkDestination_y; //0x02A8
	char pad_02AA[2]; //0x02AA
	uint8_t m_autoWalkDestination_z; //0x02AC
	char pad_02AD[3]; //0x02AD
	uint16_t m_lastAutoWalkPosition_x; //0x02B0
	char pad_02B2[2]; //0x02B2
	uint16_t m_lastAutoWalkPosition_y; //0x02B4
	char pad_02B6[2]; //0x02B6
	uint8_t m_lastAutoWalkPosition_z; //0x02B8
	char pad_02B9[29]; //0x02B9
	uint8_t m_Known; //0x02D6
	char pad_02D7[5]; //0x02D7
	class ItemPtr* m_inventoryItems[10]; //0x02DC
	char pad_0304[136]; //0x0304
	uint8_t m_vocation; //0x038C
	char pad_038D[3]; //0x038D
	double m_health; //0x0390
	double m_maxHealth; //0x0398
	double m_freeCapacity; //0x03A0
	double m_totalCapacity; //0x03A8
	double m_experience; //0x03B0
	double m_level; //0x03B8
	double m_levelPercent; //0x03C0
	double m_mana; //0x03C8
	double m_maxMana; //0x03D0
	double m_magicLevel; //0x03D8
	double m_magicLevelPercent; //0x03E0
	double m_baseMagicLevel; //0x03E8
	double m_soul; //0x03F0
	double m_stamina; //0x03F8
	double m_regenerationTime; //0x0400
	double m_offlineTrainingTime; //0x0408
}; //Size: 0x0410

class ProtocolGamePtr
{
public:
	char pad_0000[68]; //0x0000
}; //Size: 0x0044

class gGame
{
public:
	class LocalPlayerPtr* m_localPlayer; //0x0000
	class CreaturePtr* m_attackingCreature; //0x0004
	class CreaturePtr* m_followingCreature; //0x0008
	class ProtocolGamePtr* m_protocolGame; //0x000C
	char pad_0010[48]; //0x0010
	bool m_online; //0x0040
	char pad_0041[1]; //0x0041
	bool m_dead; //0x0042
	char pad_0043[57]; //0x0043
	uint8_t m_pvpMode; //0x007C
	char pad_007D[7]; //0x007D
	uint8_t m_lastWalkDir; //0x0084
	char pad_0085[23]; //0x0085
	uint8_t m_characterName_lenght; //0x009C
	char pad_009D[3]; //0x009D
	char m_characterName[16]; //0x00A0
	char pad_00B0[4]; //0x00B0
	uint8_t m_worldName_lenght; //0x00B4
	char pad_00B5[3]; //0x00B5
	char m_worldName[16]; //0x00B8
}; //Size: 0x00C8

 

Editado por vyctor17
Update 23/09 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 3 years later...
  • 1 month later...
  • Moderador
Em 19/09/2023 em 11:58, gilbertosan disse:

Mano tenho muita dúvida em como encontrar os offsets poderia nos ajudar com uns tutos?

Não é tão simples acho que você deveria começar por aqui.
Game Hacking Tutorials - Guided Hacking

Inicialmente você pode começar com cheat engine procurando offsets mais simples como textos ou inteiros, no entanto futuramente pode altera e começar usar o IDA para passar instruções diretamente via HEX.

Não é um processo muito facil, existem DLLS disponiveis que podem facilitar no entanto se você não tem nem um conhecimento sobre Engenharia reversa, dedveria procurar alguns tutorial com cheat engine bem faceis.

Enfim é um longo caminho espero que consiga algum recurso util no link acima.

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Naze
      Bom, estava pesquisando sobre OtClient e acabei achando esse OtClientV8, feito por Kondra -- link em pt-br dizendo sobre ele External Link -- tópico feito pelo próprio criado External Link
       
      Comecei pesquisar sobre, e realmente me parasse um OtClient muito bom, o que mais me interessou e oq venho mostrar é a parte do BOT, ele ja vem com um bot incluso que me interessou muito, pois qualquer um pode criar as funções dele em lua. 
      O tópico falando do bot so vou deixar escrito oque ta la, mas se quiserem ver as imagens o link é esse -- External Link
       
      Quando baixei o OtClient o bot ja vem um com 'example' com bastante comandos ja adicionado, mas vou deixar alguns exemplo aqui para poderem entender:
      Aqui tem todas funções e mais informações sobre o bot -- https://github.com/OTCv8/otclientv8_bot
       
       
       
      Meu objetivo com esse post é só compartilhar, já que não achei nada sobre ele no Tibia King, no momento tenho outros projeto, e não posso estuda as funções do bot, mas acredito que como eu tenha mais pessoas que se interesse.
      Mas logo pretendo estuda pois acho que esse seria o melhor client e bot que pode substituir o tibia.exe elf/magebot q sempre usamos.
       
      @edit
      Não sei se estou na area certa, se estiver errado me desculpe e favor mover.
    • Por Featzen
      Bom, vi por aqui e não achei nenhum autoloot igual o da pxg ou sem bugs, então decidi vir aqui postar o que eu fiz.
      Vamos lá.
       
      1º - Vá na pasta Lib, no arquivo some functions.lua e adicione isso depois do ultimo "end":



       
      2º - Vá em actions/script e crie um arquivo.lua com nome de Autoloot, dentro coloque:



       
      Agora, no actions.xml adicione a tag:
      <action itemid="" event="script" value="Autoloot.lua"/> Dentro de itemid="", coloque o id dos corpses.
       
      Para conseguir o id dos corpses, podemos fazer um pequeno script, que pegará o corpse de cada pokemon capturável.



       
      Clique em: Execute Script e terá todos os corpses de pokemons capturáveis.

      Créditos:
      Mkalo -- Auto Stacking
      Gabriel Sales(eu) -- Resto
    • Por Cicuta Verde
      Alguem teria as sprites de todos hero cards do pxg q cujo alguns foram usados no Defenders de natal?
       
      Eu ja tive uma vez na epoca q dava pra pegar pelo próprio cliente, mas troquei de pc e perdi, agr to precisando pro meu projeto.
       
      *pesquisei por tags aqui no forum e ja pesquisei no google mas nao achei nada.
    • Por lucasmacaca
      OLA MEUS AMIGOS ,GOSTARIA DE SABER COMO EU CONSIGO FAZER UM MINI MAP TIPO ESSE , A MANEIRA MAIS FACIL ,DES DE JA AGRADEÇO  
    • Por olaia
      Eu coloquei o Icon System do PokeCyan num PDA 1.9 Slicer que estou editando, quando eu abro uma box ou pego o pokemon inicial, ele não vem com formato de ícone, queria saber como faço para arrumar isso?
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo