Postado Setembro 21, 2019 5 anos 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. 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 Setembro 29, 2019 5 anos por vyctor17 Update 23/09 (veja o histórico de edições)
Postado Setembro 19, 2023 1 ano Mano tenho muita dúvida em como encontrar os offsets poderia nos ajudar com uns tutos?
Postado Novembro 16, 2023 1 ano Administrador Em 19/09/2023 em 14: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. Contato : https://www.linkedin.com/in/rafhael-oliveira/ Servidores : https://www.pokemmorpg.com Projetos : https://github.com/thetibiaking
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.