Jump to content

Chasterx

Members
  • Posts

    12
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

About Chasterx

  • Birthday 01/01/1

Chasterx's Achievements

Member

Member (2/3)

0

Reputation

  1. Thanks i come now to SMSG_CHAR_ENUM but something is wrong. Could you take a look on my code? Here the structure struct CharacterData { uint64 GUID; CString Name; byte Race; byte Class; byte Gender; byte Skin; byte Face; byte HairStyle; byte HairColor; byte FacialHair; byte level; uint32 ZoneId; uint32 MapId; float X; float Y; float Z; uint64 Unk; uint32 CharacterFlags; uint32 CustomizationFlags; byte FirstLogin; uint32 PetDisplayId; uint32 PetLevel; uint32 PetFamily; CharacterItem Items[23]; }; *p_data << uint64(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)); *p_data << fields[1].GetString(); // name *p_data << uint8(pRace); // race *p_data << uint8(pClass); // class *p_data << uint8(fields[4].GetUInt8()); // gender uint32 playerBytes = fields[5].GetUInt32(); *p_data << uint8(playerBytes); // skin *p_data << uint8(playerBytes >> 8); // face *p_data << uint8(playerBytes >> 16); // hair style *p_data << uint8(playerBytes >> 24); // hair color uint32 playerBytes2 = fields[6].GetUInt32(); *p_data << uint8(playerBytes2 & 0xFF); // facial hair *p_data << uint8(fields[7].GetUInt8()); // level *p_data << uint32(fields[8].GetUInt32()); // zone *p_data << uint32(fields[9].GetUInt32()); // map *p_data << fields[10].GetFloat(); // x *p_data << fields[11].GetFloat(); // y *p_data << fields[12].GetFloat(); // z *p_data << uint64(0); //*p_data << uint32(fields[13].GetUInt32()); // guild id uint32 char_flags = 0; uint32 playerFlags = fields[13].GetUInt32(); uint32 atLoginFlags = fields[14].GetUInt32(); if (playerFlags & PLAYER_FLAGS_HIDE_HELM) char_flags |= CHARACTER_FLAG_HIDE_HELM; if (playerFlags & PLAYER_FLAGS_HIDE_CLOAK) char_flags |= CHARACTER_FLAG_HIDE_CLOAK; if (playerFlags & PLAYER_FLAGS_GHOST) char_flags |= CHARACTER_FLAG_GHOST; if (atLoginFlags & AT_LOGIN_RENAME) char_flags |= CHARACTER_FLAG_RENAME; if (fields[19].GetUInt32()) char_flags |= CHARACTER_FLAG_LOCKED_BY_BILLING; if (sWorld.getBoolConfig(CONFIG_DECLINED_NAMES_USED)) { if (!fields[20].GetString().empty()) char_flags |= CHARACTER_FLAG_DECLINED; } else char_flags |= CHARACTER_FLAG_DECLINED; *p_data << uint32(char_flags); // character flags // character customize flags if (atLoginFlags & AT_LOGIN_CUSTOMIZE) *p_data << uint32(CHAR_CUSTOMIZE_FLAG_CUSTOMIZE); else if (atLoginFlags & AT_LOGIN_CHANGE_FACTION) *p_data << uint32(CHAR_CUSTOMIZE_FLAG_FACTION); else if (atLoginFlags & AT_LOGIN_CHANGE_RACE) *p_data << uint32(CHAR_CUSTOMIZE_FLAG_RACE); else *p_data << uint32(CHAR_CUSTOMIZE_FLAG_NONE); // First login *p_data << uint8(atLoginFlags & AT_LOGIN_FIRST ? 1 : 0); // Pets info { uint32 petDisplayId = 0; uint32 petLevel = 0; uint32 petFamily = 0; // show pet at selection character in character list only for non-ghost character if (result && !(playerFlags & PLAYER_FLAGS_GHOST) && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT)) { uint32 entry = fields[15].GetUInt32(); CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(entry); if (cInfo) { petDisplayId = fields[16].GetUInt32(); petLevel = fields[17].GetUInt32(); petFamily = cInfo->family; } } *p_data << uint32(petDisplayId); *p_data << uint32(petLevel); *p_data << uint32(petFamily); } Tokens data = StrSplit(fields[18].GetString(), " "); for (uint8 slot = 0; slot < EQUIPMENT_SLOT_END; ++slot) { uint32 visualbase = slot * 2; uint32 item_id = GetUInt32ValueFromArray(data, visualbase); const ItemPrototype * proto = sObjectMgr.GetItemPrototype(item_id); if (!proto) { *p_data << uint32(0); *p_data << uint8(0); *p_data << uint32(0); continue; } SpellItemEnchantmentEntry const *enchant = NULL; uint32 enchants = GetUInt32ValueFromArray(data, visualbase + 1); for (uint8 enchantSlot = PERM_ENCHANTMENT_SLOT; enchantSlot <= TEMP_ENCHANTMENT_SLOT; ++enchantSlot) { // values stored in 2 uint16 uint32 enchantId = 0x0000FFFF & (enchants >> enchantSlot*16); if (!enchantId) continue; enchant = sSpellItemEnchantmentStore.LookupEntry(enchantId); if (enchant) break; } *p_data << uint32(proto->DisplayInfoID); *p_data << uint8(proto->InventoryType); *p_data << uint32(enchant ? enchant->aura_id : 0); } *p_data << uint32(0); // bag 1 display id *p_data << uint8(0); // bag 1 inventory type *p_data << uint32(0); // enchant? *p_data << uint32(0); // bag 2 display id *p_data << uint8(0); // bag 2 inventory type *p_data << uint32(0); // enchant? *p_data << uint32(0); // bag 3 display id *p_data << uint8(0); // bag 3 inventory type *p_data << uint32(0); // enchant? *p_data << uint32(0); // bag 4 display id *p_data << uint8(0); // bag 4 inventory type *p_data << uint32(0); // enchant?
  2. My git Account is ChasterX Email is [email protected] @tyrael your are right but I think the main problem is SMSG_REDIRECT_CLIENT EDIT#1: I updated WorldSocket::HandleAuthSession to 4.0.3a structure but it doesnt work. Could somebody look at my work and tell me my mistakes? uint8 digest[20]; uint8 h[20]; uint8 unk; uint8 unk1; uint64 unk2; uint32 unk3; uint32 unk4; uint32 unk5; uint16 ClientBuild; uint32 unk6; uint32 ClientSeed; uint32 unk7; std::string account; uint32 id, security; LocaleConstant locale; SHA1Hash sha1; BigNumber v, s, g, N, K; WorldPacket packet, SendAddonPacked; uint32 m_addonSize; uint32 m_addonLenCompressed; uint8* m_addonCompressed; recvPacket >> unk >> h[16] >> ClientBuild >> h[6] >> unk1 >> unk2 >> h[14] >> h[11] >> h[2]; recvPacket >> unk3 >> h[13] >> h[5] >> h[19] >> h[9] >> unk4 >> h[12] >> h[10]; recvPacket >> h[3] >> unk5 >> h[7] >> h[17] >> ClientSeed >> unk6 >> h[0]; recvPacket >> h[8] >> h[1] >> h[4] >> h[18] >> h[15]; recvPacket >> account; memcpy(digest, h, 20); uint32 ByteSize = 0, SizeUncompressed; recvPacket >> ByteSize >> SizeUncompressed; m_addonSize = SizeUncompressed; m_addonLenCompressed = ByteSize - 4; m_addonCompressed = new uint8[byteSize - 4]; recvPacket.read(m_addonCompressed, ByteSize - 4);
  3. It's packet << uint32(0); packet << uint32(0); packet << uint32(m_Seed); packet << uint32(0); packet << uint8(1); packet << uint32(0); packet << uint32(0); packet << uint32(0); packet << uint32(0); packet << uint32(0); Yours is 8 Bytes key seed 4 Bytes Key uint8 ConnectionCount 20 Bytes key but it should be 16 byte key seed connectioncount 16byte key packet << uint32(0); packet << uint32(0); packet << uint32(0); packet << uint32(0); packet << uint32(m_Seed); packet << uint8(1); packet << uint32(0); packet << uint32(0); packet << uint32(0); packet << uint32(0); Here a few opcodes for 4.0.3.13329 SMSG_AUTH_CHALLENGE = 0x3400, CMSG_AUTH_SESSION = 0x880A, SMSG_AUTH_RESPONSE = 0x1454, SMSG_ACCOUNT_DATA_TIMES = 0xFD55, SMSG_REALM_SPLIT = 0x3454, SMSG_CHAR_ENUM = 0x775E, CMSG_CHAR_ENUM = 0x6655, CMSG_PLAYER_LOGIN = 0x05A1, SMSG_COMPRESSED_UPDATE_OBJECT = 0x6C7D, SMSG_UPDATE_OBJECT = 0xFC7D, SMSG_COMPRESSED_MOVES = 0x621C, SMSG_TUTORIAL_FLAGS = 0x8657, SMSG_FEATURE_SYSTEM_STATUS = 0x5C74, SMSG_MOTD = 0x077C, SMSG_LOGIN_VERIFY_WORLD = 0xEC7C, SMSG_QUESTUPDATE_ADD_KILL = 0x157F, SMSG_CONTACT_LIST = 0x1675, SMSG_BINDPOINTUPDATE = 0x175D, CMSG_VOICE_SESSION_ENABLE = 0x477C, MSG_QUERY_NEXT_MAIL_TIME = 0x7457, SMSG_INITIALIZE_FACTIONS = 0xE674, SMSG_GMTICKET_GETTICKET = 0xF47F, CMSG_SET_SELECTION = 0x5577, CMSG_CAST_SPELL = 0x4C56, SMSG_SPELL_START = 0x7C75, SMSG_SPELL_GO = 0xE654, SMSG_MONSTER_MOVE = 0xA65D, SMSG_ATTACKERSTATEUPDATE = 0xBF56, CMSG_REALM_SPLIT = 0x477D, CMSG_ZONEUPDATE = 0x5C7D, SMSG_COMBAT_LOG_MULTIPLE = 0x8F75, CMSG_CANCEL_TRADE = 0x0C2A, CMSG_PING = 0x882A, SMSG_PONG = 0xB000, CMSG_TIME_SYNC_RESP = 0x0D57, SMSG_TIME_SYNC_REQ = 0x6F5E, CMSG_CANCEL_AURA = 0x545E, SMSG_AURA_UPDATE = 0xCE7D, SMSG_LOG_XPGAIN = 0x7656, SMSG_THREAT_UPDATE = 0x4E5F, SMSG_HIGHEST_THREAT_UPDATE = 0x3F7E, SMSG_ACTION_BUTTONS = 0x4574, SMSG_INITIAL_SPELLS = 0x565D, CMSG_CREATURE_QUERY = 0x8454, SMSG_CREATURE_QUERY_RESPONSE = 0xE45E, CMSG_GAMEOBJECT_QUERY = 0x0455, SMSG_GAMEOBJECT_QUERY_RESPONSE = 0x0577, CMSG_CHAT_MSG_SAY = 0x5A90, CMSG_CHAT_MSG_YELL = 0x3A10, CMSG_CHAT_MSG_CHANNEL_SAY = 0x3A88, CMSG_CHAT_MSG_GUILD = 0x2A88, CMSG_CHAT_MSG_WISPER = 0x5A80, CMSG_CHAT_MSG_AFK = 0x6A88, CMSG_CHAT_MSG_DND = 0x3A00, SMSG_CHANNEL_NOTIFY = 0xC574, SMSG_MESSAGECHAT = 0x867F, MSG_MOVE_SET_FACING = 0x865D, MSG_MOVE_START_FORWARD = 0xF576, MSG_MOVE_START_BACKWARD = 0xCC7C, MSG_MOVE_STOP = 0x4E76, MSG_MOVE_START_STRAFE_LEFT = 0x5F5C, MSG_MOVE_START_STRAFE_RIGHT = 0x265C, MSG_MOVE_STOP_STRAFE = 0x0D7F, MSG_MOVE_JUMP = 0x7477, MSG_MOVE_FALL_LAND = 0xF474, MSG_MOVE_START_TURN_LEFT = 0x945F, MSG_MOVE_START_TURN_RIGHT = 0x6657, MSG_MOVE_STOP_TURN = 0x6d54, MSG_MOVE_HEARTBEAT = 0x177C, CMSG_SET_ACTION_BUTTON = 0x355C, CMSG_LOGOUT_REQUEST = 0x8E56, SMSG_LOGOUT_RESPONSE = 0x000, CMSG_LOOT = 0xBD77, CMSG_PAGE_TEXT_QUERY = 0x2C75, SMSG_PAGE_TEXT_QUERY_RESPONSE = 0x775F, CMSG_NPC_TEXT_QUERY = 0x5654, SMSG_NPC_TEXT_UPDATE = 0x365E, CMSG_NAME_QUERY = 0xC57E, SMSG_NAME_QUERY_RESPONSE = 0x4D5E, CMSG_JOIN_CHANNEL = 0x3A98, CMSG_EMOTE = 0x7F5C, SMSG_EMOTE = 0x000, CMSG_TEXT_EMOTE = 0x4A90, SMSG_TEXT_EMOTE = 0x000, SMSG_PARTYKILLLOG = 0xE775, MSG_CHANNEL_START = 0x8574, MSG_CHANNEL_UPDATE = 0x000, CMSG_CANCEL_CHANNELLING = 0x957C, CMSG_ITEM_QUERY_SINGLE = 0x0180, SMSG_ITEM_QUERY_SINGLE_RESPONSE = 0x0828, SMSG_SEND_QUEUED_PACKETS = 0x1400, SMSG_REDIRECT_CLIENT = 0x9000, SMSG_NOTIFICATION = 0x620A, SMSG_PLAYED_TIME = 0x4108, SMSG_TRANSFER_PENDING = 0x502B, SMSG_TRANSFER_ABORTED= 0xA2A, SMSG_KICK_REASON= 0x3320, SMSG_NPC_TEXT_RESPONSE= 0x320A, SMSG_GUILD_QUERY_RESPONSE= 0x3208, SMSG_QUEST_QUERY_RESPONSE= 0x720B, SMSG_PET_NAME_QUERY_RESPONSE= 0xE20A, SMSG_PETITION_QUERY_RESPONSE= 0x7301, SMSG_ITEM_TEXT_QUERY_RESPONSE= 0xA929, SMSG_INVALIDATE_PLAYER= 0xFB0A, SMSG_ARENA_TEAM_QUERY_RESPONSE= 0xC02B, SMSG_INVALIDATE_DANCE= 0x9229, SMSG_DANCE_QUERY_RESPONSE= 0x7800, SMSG_WHO= 0xCB28, SMSG_WHOIS= 0x3328, SMSG_RWHOIS= 0x3228, SMSG_FRIEND_STATUS= 0xBB22, SMSG_WARDEN_DATA= 0x212B, SMSG_ITEM_PUSH_RESULT= 0xDB00, SMSG_LEARNED_SPELL= 0x9004, SMSG_TUTORIAL_FLAGS= 0x8203, SMSG_CHAR_DELETE= 0x7F56, SMSG_ADDON_INFO= 0xEE5D, SMSG_CLIENTCACHE_VERSION= 0xCE74, ServerAuthResponse= 0x1454, SMSG_LOGIN_FAILED= 0x2C56, SMSG_COMSAT_CONNECT_FAIL= 0x602A, SMSG_UNK_CHAT_SERVER_RECONNECTED= 0xD928, SMSG_CHANNEL_LIST= 0x7009, SMSG_ZONE_UNDER_ATTACK= 0xE801, SMSG_DEFENSE_MESSAGE= 0x6020, SMSG_SERVER_MESSAGE= 0x2100, SMSG_RAID_INSTANCE_MESSAGE= 0xD929, SMSG_INSTANCE_RESET= 0x1B28, SMSG_INSTANCE_RESET_FAILED= 0xD208, SMSG_UPDATE_LAST_INSTANCE= 0x9B21, SMSG_UPDATE_INSTANCE_OWNERSHIP= 0x8321, SMSG_EXPECTED_SPAM_RECORDS= 0xA108, SMSG_TITLE_EARNED= 0x420B, SMSG_UNK_off_854450= 0xB908, SMSG_GM_MESSAGECHAT= 0x2902, SMSG_LOG_XPGAIN= 0x7202, SMSG_UNK_sub_853DB0= 0xE328, SMSG_CHANNEL_MEMBER_COUNT= 0x823, SMSG_COMSAT_RECONNECT_TRY= 0x7A2A, SMSG_COMSAT_DISCONNECT= 0x2A03, SMSG_COMSAT_CONNECTION_FAILED= 0xF202, SMSG_VOICE_CHAT_STATUS= 0x8923, SMSG_USERLIST_ADD= 0xBA20, SMSG_USERLIST_REMOVE= 0x2228, SMSG_USERLIST_UPDATE= 0xE30B, SMSG_COMSAT_VOICE_SESSION_FULL= 0xA002, SMSG_SERVER_FIRST_ACHIEVEMENT= 0xA92A, SMSG_GOSSIP_MESSAGE= 0xD12A, SMSG_GOSSIP_COMPLETE= 0x430B, SMSG_GOSSIP_POI= 0x1002, SMSG_DUEL_REQUESTED= 0x530A, SMSG_DUEL_OUTOFBOUNDS= 0xB829, SMSG_DUEL_INBOUNDS= 0x9B00, SMSG_DUEL_COUNTDOWN= 0x8A21, SMSG_DUEL_COMPLETE= 0xE323, SMSG_DUEL_WINNER= 0x2329, SMSG_MINIGAME_SETUP= 0x1824, SMSG_MINIGAME_STATE= 0x482B, SMSG_OFFER_PETITION_ERROR= 0xBB2A, SMSG_GUILD_BANK_LIST= 0xB822, MSG_GUILD_BANK_LOG_QUERY= 0x6308, MSG_GUILD_BANK_MONEY_WITHDRAWN= 0x302A, MSG_QUERY_GUILD_BANK_TEXT = 0x2322, SMSG_PLAY_DANCE= 0xC203, SMSG_STOP_DANCE= 0x4002, SMSG_NOTIFY_DANCE= 0xE308, SMSG_LEARNED_DANCE_MOVES= 0xF209, SMSG_ARENA_TEAM_ROSTER= 0xA80A, SMSG_ARENA_TEAM_STATS= 0x9B0B, SMSG_PET_SPELLS= 0x5928, SMSG_PET_MODE= 0xFA0B, SMSG_PET_ACTION_FEEDBACK= 0xA800, SMSG_PET_BROKEN= 0xE92B, SMSG_PET_RENAMEABLE= 0x520A, SMSG_PET_UPDATE_COMBO_POINTS= 0xD20B, SMSG_PET_GUIDS= 0xFA08, SMSG_UNK_MSG_INSPECT_ARENA_TEAMS= 0x6108, SMSG_UNK_MSG_AUCTION_HELLO= 0xD120, SMSG_AUCTION_COMMAND_RESULT= 0xEB22, SMSG_AUCTION_BIDDER_LIST_RESULT= 0xEA0A, SMSG_AUCTION_OWNER_LIST_RESULT= 0xDA22, SMSG_AUCTION_LIST_RESULT= 0xAB03, SMSG_AUCTION_BIDDER_NOTIFICATION= 0x3021, SMSG_AUCTION_OWNER_NOTIFICATION= 0xC009, SMSG_AUCTION_REMOVED_NOTIFICATION= 0xA0A, SMSG_AUCTION_LIST_PENDING_SALES= 0xDB29, SMSG_SEND_MAIL_RESULT= 0x8B23, SMSG_MAIL_LIST_RESULT= 0x3804, SMSG_UNK_MSG_QUERY_NEXT_MAIL_TIME= 0x7003, SMSG_RECEIVED_MAIL= 0x2122, SMSG_UNK_MSG_LIST_STABLED_PETS= 0x5A09, SMSG_STABLE_RESULT= 0xE300, SMSG_ARENA_OPPONENT_UPDATE= 0x5B29, SMSG_UNK_MSG_GUILD_PERMISSIONS= 0x2A00, SMSG_UNK_MSG_GUILD_EVENT_LOG_QUERY= 0xF90A, SMSG_UNK_MSG_RAID_TARGET_UPDATE= 0x380B, SMSG_UNK_MSG_RAID_READY_CHECK= 0x8B22, SMSG_UNK_MSG_RAID_READY_CHECK_CONFIRM= 0xB123, SMSG_RAID_READY_CHECK_FINISHED= 0xF821, SMSG_RAID_READY_CHECK_ERROR= 0x502A, SMSG_UNK_MSG_NOTIFY_PARTY_SQUELCH= 0xE120, SMSG_ECHO_PARTY_SQUELCH= 0x1303, SMSG_UNK_EVENT_UPDATE_INSTANCE_INFO= 0x90B,
  4. SMSG_AUTH_CHALLENGE = 0x3400 //4.0.3.13329 16 bytes key uint8 connectionCount uint32 serverSeed 16 bytes key
  5. I havent look at the 4.0.3 client so i cant tell you something about this
  6. This is for HandleAuthSession uint8 digest[20]; uint8 h[20]; uint8 unkb; uint32 unkd; uint64 unkq; uint32 unk2; uint32 unk4; uint8 unk5; uint16 ClientBuild; uint32 unk6; uint32 ClientSeed; uint32 unk7; std::string account; uint32 id, security; LocaleConstant locale; SHA1Hash sha1; BigNumber v, s, g, N, K; WorldPacket packet, SendAddonPacked; uint32 m_addonSize; uint32 m_addonLenCompressed; uint8* m_addonCompressed; recvPacket >> h[4] >> h[8] >> h[14] >> h[17] >> unkb >> h[3] >> unkd >> h[5]; recvPacket >> unkb >> h[0] >> h[10] >> unkd >> h[12] >> h[6] >> unkd >> ClientBuild; recvPacket >> h[7] >> h[11] >> h[16] >> h[18] >> h[13] >> unkq >> h[15]; recvPacket >> ClientSeed >> h[9] >> unkd >> h[1] >> h[2] >> h[19]; memcpy(digest, h, 20); uint32 ByteSize = 0, SizeUncompressed; recvPacket >> ByteSize >> SizeUncompressed; m_addonSize = SizeUncompressed; m_addonLenCompressed = ByteSize - 4; m_addonCompressed = new uint8[byteSize - 4]; recvPacket.read(m_addonCompressed, ByteSize - 4); recvPacket >> account; This is for SMSG_AUTH_CHALLENGE BigNumber key1, key2; key1.SetRand(64); key2.SetRand(64); uint32* k1 = (uint32*)key1.AsByteArray(); uint32* k2 = (uint32*)key2.AsByteArray(); uint8 ConnectionCount = 1; packet << k2[2] << k1[0]; packet << ConnectionCount; packet << m_Seed; packet << k1[2] << k1[1]; packet << k2[0] << k2[1]; packet << k1[3] << k2[3]; This is for SMSG_AUTH_RESPONSE void WorldSession::SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos) { WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4 + 1 + (shortForm ? 0 : (4 + 1))); packet << uint8(code); packet << uint32(0); // BillingTimeRemaining packet << uint8(0); // BillingPlanFlags packet << uint32(0); // BillingTimeRested packet << uint16(Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, 3 - Cataclysm must be set in database manually for each account if (!shortForm) { packet << uint32(queuePos); // Queue position packet << uint8(0); // Unk 3.3.0 } SendPacket(&packet); } After this was changed you come to packet SMSG_CHAR_ENUM This is the structure of the character datas.... the function for this you can find in CharacterHandler with reference to player.cpp uint64 GUID; CString Name; byte Race; byte Class; byte Gender; byte Skin; byte Face; byte HairStyle; byte HairColor; byte FacialHair; byte level; uint32 ZoneId; uint32 MapId; float X; float Y; float Z; uint64 Unk; uint32 CharacterFlags; uint32 CustomizationFlags; byte FirstLogin; uint32 PetDisplayId; uint32 PetLevel; uint32 PetFamily; CharacterItem Items[23]; After this 4 things are done you can enter the characterlist. Now you only have to change the opcodes opcodes.h to enter the world. Btw here are new opcodes from cromon: PH_Handle_SMSG_NOTIFICATION 0x1380 PH_Handle_SMSG_PLAYED_TIME 0x1470 PH_Handle_SMSG_TRANSFER_PENDING 0x1560 PH_Handle_SMSG_TRANSFER_ABORTED 0x34a0 PH_Handle_SMSG_LOGIN_VERIFY_WORLD 0x3960 PH_Handle_SMSG_NEW_WORLD 0x39f0 PH_Handle_SMSG_DESTROY_OBJECT 0x966f0 PH_Handle_SMSG_CREATURE_QUERY_RESPONSE 0x9ec00 PH_Handle_SMSG_GAMEOBJECT_QUERY_RESPONSE 0x9ec20 PH_Handle_SMSG_NPC_TEXT_UPDATE 0x9ec40 PH_Handle_SMSG_QUEST_QUERY_RESPONSE 0x9ec60 PH_Handle_SMSG_PAGE_TEXT_QUERY_RESPONSE 0x9ecd0 PH_Handle_SMSG_PET_NAME_QUERY_RESPONSE 0x9ecf0 PH_Handle_SMSG_PETITION_QUERY_RESPONSE 0x9edc0 PH_Handle_SMSG_INVALIDATE_PLAYER 0x9ee30 PH_Handle_SMSG_ARENA_TEAM_QUERY_RESPONSE 0x9eeb0 PH_Handle_SMSG_INVALIDATE_DANCE 0x9ef00 PH_Handle_SMSG_NAME_QUERY_RESPONSE 0x9f120 PH_Handle_SMSG_GUILD_QUERY_RESPONSE 0x9f350 PH_Handle_SMSG_ITEM_TEXT_QUERY_RESPONSE 0x9f3b0 PH_Handle_SMSG_DANCE_QUERY_RESPONSE 0x9f420 PH_Handle_SMSG_WHOIS 0xd5740 PH_Handle_SMSG_RWHOIS 0xd5780 PH_Handle_SMSG_FRIEND_STATUS 0xda890 PH_Handle_SMSG_CONTACT_LIST 0xda8e0 PH_Handle_SMSG_WHO 0xda900 PH_Handle_SMSG_UPDATE_ACCOUNT_DATA_COMPLETE 0xdb210 PH_Handle_SMSG_ACCOUNT_DATA_TIMES 0xdb690 PH_Handle_SMSG_CHECK_FOR_BOTS 0xdb830 PH_Handle_SMSG_UPDATE_ACCOUNT_DATA 0xdb8f0 PH_Handle_SMSG_GAMESPEED_SET 0xdc9b0 PH_Handle_SMSG_LOGIN_SETTIMESPEED 0xdca50 PH_Handle_SMSG_GAMETIME_UPDATE 0xdcb30 PH_Handle_SMSG_SERVERTIME 0xdcbc0 PH_Handle_SMSG_GAMETIME_SET 0xdccb0 PH_Handle_SMSG_GROUP_ACTION_THROTTLED 0x15bb00 PH_Handle_SMSG_GUILD_COMMAND_RESULT 0x15c4a0 PH_Handle_SMSG_GUILD_INVITE 0x15c4f0 PH_Handle_SMSG_VOICE_SESSION_ROSTER 0x15c5e0 PH_Handle_SMSG_VOID_SESSION_LEAVE 0x15c8c0 PH_Handle_SMSG_CALENDAR_INVITE_RESULT 0x15ca90 PH_Handle_SMSG_ARENA_TEAM_COMMAND_RESULT 0x15fc00 PH_Handle_VoiceSessionParentalSomething 0x160080 PH_Handle_DamageRelated 0x163aa0 PH_Handle_SMSG_TRAINER_BUY_SPELL_FAILED 0x167fc0 PH_Handle_SMSG_TIME_SYNC_REQ 0x16a4f0 PH_Handle_SMSG_GUILD_EVENT 0x16def0 PH_Handle_SMSG_CROSSED_INEBRIATION_THRESHOLD 0x1757c0 PH_Handle_SMSG_LOOT_LIST 0x1b4de0 PH_Handle_SMSG_FLIGHT_SPLINE_SYNC 0x1b4e40 PH_Handle_SMSG_COMPRESSED_MOVES 0x1b4ea0 PH_Handle_SMSG_AI_REACTION 0x1b4f60 PH_Handle_SMSG_PET_ACTION_SOUND 0x1b4fe0 PH_Handle_SMSG_PET_DISMISS_SOUND 0x1b5050 PH_Handle_SMSG_FORCE_DISPLAY_UPDATE 0x1b5160 PH_Handle_SMSG_HEALTH_UPDATE 0x1b51b0 PH_Handle_SMSG_MOUNTSPECIAL_ANIM 0x1bc2f0 PH_Handle_SMSG_POWER_UPDATE 0x1c2f90 PH_Handle_SMSG_CLIENT_CONTROL_UPDATE 0x1cea40 PH_Handle_SMSG_CANCEL_AUTO_REPEAT 0x1ceac0 PH_Handle_SMSG_AURA_UPDATE__ALL 0x1d1c70 PH_Handle_SMSG_MIRRORIMAGE_DATA 0x1d3f60 PH_Handle_SMSG_STANDSTATE_UPDATE 0x1e3440 PH_Handle_SMSG_DISMOUNT 0x1e5e00 PH_Handle_SMSG___HIGHEST___THREAT_UPDATE 0x1e6060 PH_Handle_SMSG_PARTYKILLLOG 0x1fc5a0 PH_Handle_SMSG_PROCRESIST 0x1fc610 PH_Handle_SMSG_DISPEL_FAILED 0x1fc710 PH_Handle_SMSG_ENCHANTMENTLOG 0x1fc850 PH_Handle_SMSG_PERIODICAURALOG 0x1fe780 PH_Handle_SMSG_DESTRUCTIBLE_BUILDING_DAMAGE 0x1fe7a0 PH_Handle_SMSG_FACTION_CHANGE 0x35bfc0 PH_Handle_SMSG_KICK_REASON 0x35c1f0 PH_Handle_SMSG_SET_PLAYER_DECLINED_NAMES_RESULT 0x35de00 PH_Handle_SMSG_GAMEOBJECT_RESET_STATE 0x3fd240 PH_Handle_SMSG_FEIGN_DEATH_RESISTED 0x3fd290 PH_Handle_SMSG_FLAT_AND_PCT_SPELL_MODIFIER 0x3fd300 PH_Handle_SMSG_SPELL_DELAYED 0x3fe7d0 PH_Handle__MAYBE_MSG_CHANNEL_START 0x3fe8c0 PH_Handle_MSG_CHANNEL_UPDATE 0x3fea10 PH_Handle_SMSG_SPELL_UPDATE_CHAIN_TARGETS 0x3fefe0 PH_Handle_SMSG_CONTROL_VECHICLE 0x3ff080 PH_Handle_SMSG_UNKNOWN_1215 0x3ff0c0 PH_Handle_SMSG_PLAY_SPELL_VISUAL 0x3ff140 PH_Handle_SMSG_PLAY_SPELL_IMPACT 0x3ff1f0 PH_Handle_SMSG_DAMAGE_TAKEN_OBSOLETE 0x3ff2a0 PH_Handle_SMSG_PET_TAME_FAILURE 0x401c00 PH_Handle_SMSG_SPELL_MISC_COOLDOWN 0x403820 PH_Handle_SMSG_COOLDOWN_CHEAT 0x403920 PH_Handle_SMSG_SPELL_FAILED_OTHER 0x405d80 PH_Handle_SMSG_PET_CAST_FAILED 0x405e70 PH_Handle_SMSG_ITEM_COOLDOWN 0x405fe0 PH_Handle_SMSG_MEETINGSTONE_IN_PROGRESS 0x406140 PH_Handle_SMSG_CAST_FAILED 0x409da0 PH_Handle_SMSG_SPELL_FAILURE 0x409ef0 PH_Handle_SMSG_SPELL_COOLDOWN 0x40a050 PH_Handle_SMSG_SPELL_START_AND_GO 0x411820 PH_Handle_SMSG_NOTIFY_DEST_LOC_SPELL_CAST 0x411910 PH_Handle_Mirror_Times 0x41fd50 PH_Handle_SMSG_CHANNEL_MEMBER_COUNT 0x439900 PH_Handle_SMSG_COMSAT_RECONNECT_TRY 0x4399e0 PH_Handle_SMSG_COMSAT_DISCONNECT 0x439a00 PH_Handle_SMSG_COMSAT_CONNECTION_FAILED 0x439a20 PH_Handle_SMSG_COMSAT_VOICE_SESSION_FULL 0x439a40 PH_Handle_SMSG_UPDATE_INSTANCE_OWNERSHIP 0x439d50 PH_Handle_SMSG_UPDATE_LAST_INSTANCE 0x43c680 PH_Handle_SMSG_VOICE_CHAT_STATUS 0x43f510 PH_Handle_SMSG_USERLIST_UPDATE 0x43f650 PH_Handle_SMSG_EXCPECTED_SPAM_RECORDS 0x440c90 PH_Handle_SMSG_TEXT_EMOTE 0x443370 PH_Handle_SMSG_USERLIST_ADD 0x443430 PH_Handle_SMSG_USERLIST_REMOVE 0x443600 PH_Handle_SMSG_CHANNEL_LIST 0x445190 PH_Handle_SMSG_SERVER_FIRST_ACHIEVEMENT 0x44a680 PH_Handle_SMSG_ZONE_UNDER_ATTACK 0x44bbc0 PH_Handle_SMSG_TITLE_EARNED 0x44bd20 PH_Handle_SMSG_XP_GAIN 0x44bf80 PH_Handle_SMSG_DURABILITY_DAMAGE_DEATH 0x44c070 PH_Handle_SMSG_DEFENSE_MESSAGE 0x44c0a0 PH_Handle_SMSG_SERVER_MESSAGE 0x44c200 PH_Handle_SMSG_RAID_INSTANCE_MESSAGE 0x44c300 PH_Handle_SMSG_INSTANCE_RESET 0x44c500 PH_Handle_SMSG_INSTANCE_RESET_FAILED 0x44c5d0 PH_Handle_SMSG_CHANNEL_NOTIFY 0x44d6b0 PH_Handle_SMSG_MESSAGECHAT 0x44e5e0 PH_Handle_SMSG_GM_MESSAGECHAT 0x44e600 PH_Handle_SMSG_UPDATE_LAST_INSTANCE_CREATED 0x44ef10 PH_Handle_SMSG_POWERGAINLOG_OBSOLETE 0x44f900 PH_Handle_SMSG_BARBER_SHOP_RESULT 0x4519c0 PH_Handle_SMSG_ENABLE_BARBER_SHOP 0x452e10 PH_Handle_SMSG_TUTORIAL_FLAGS 0x4540a0 PH_Handle_SMSG_COMMENTATOR_UNK2 0x4762f0 PH_Handle_SMSG_COMMENTATOR_PLAYER_INFO 0x479340 PH_Handle_SMSG_COMMENTATOR_STATE_CHANGED 0x4799a0 PH_Handle_SMSG_COMMENTATOR_UNK1 0x479c70 PH_Handle_SMSG_COMMENTATOR_MAP_INFO 0x47a0a0 PH_Handle_MSG_RAID_READY_CHECK_FINISHED 0x47a490 PH_Handle_SMSG_RAID_READY_CHECK_ERROR 0x47a4d0 PH_Handle_MSG_NOTIFY_PART_SQUELCH 0x47a4f0 PH_Handle_SMSG_ECHO_PARTY_SQUELCH 0x47a540 PH_Handle_MSG_RAID_TARGET_UPDATE 0x47cc30 PH_Handle_MSG_RAID_READY_CHECK_CONFIRM 0x47cd70 PH_Handle_MSG_RAID_READY_CHECK 0x47da90 PH_Handle_SMSG_GROUP_JOINED_BATTLEGROUND 0x48b610 PH_Handle_MSG_BATTLEGROUND_PLAYER_POSITIONS 0x48b780 PH_Handle_SMSG_BATTLEGROUND_PLAYER_JOINED 0x48b8a0 PH_Handle_SMSG_BATTLEGROUND_PLAYER_LEFT 0x48b900 PH_Handle_SMSG_VICTIMSTATEUPDATE_OBSOLETE 0x48d6b0 PH_Handle_SMSG_PET_BROKEN 0x493440 PH_Handle_SMSG_PET_RENAMEABLE 0x493460 PH_Handle_SMSG_PET_UN_LEARNED_SPELL 0x493980 PH_Handle_SMSG_PET_MODE 0x493b10 PH_Handle_SMSG_PET_ACTION_FEEDBACK 0x493b80 PH_Handle_SMSG_PET_UPDATE_COMBO_POINTS 0x493c90 PH_Handle_SMSG_PET_GUIDS 0x496b30 PH_Handle_SMSG_PET_SPELLS 0x497190 PH_Handle_MSG_QUERY_NEXT_MAIL_TIME 0x4affa0 PH_Handle_SMSG_MEETINGSTONE_COMPLETE 0x4b0080 PH_Handle_SMSG_MAIL_SEND_RESULT 0x4b2830 PH_Handle_SMSG_RECEIVED_MAIL 0x4b2a90 PH_Handle_SMSG_MAIL_LIST_RESULT 0x4b2d80 PH_Handle_MSG_AUCTION_HELLO 0x4b7ad0 PH_Handle_SMSG_AUCTION_COMMAND_RESULT 0x4b7b40 PH_Handle_SMSG_AUCTION_BIDDER_NOTIFICATION 0x4b86e0 PH_Handle_SMSG_AUCTION_OWNER_NOTIFICATION 0x4b8a20 PH_Handle_SMSG_AUCTION_REMOVED_NOTIFICATION 0x4b8d80 PH_Handle_SMSG_AUCTION_LIST_RESULT 0x4b9e40 PH_Handle_SMSG_AUCTION_OWNER_LIST_RESULT 0x4ba160 PH_Handle_SMSG_AUCTION_LIST_PENDING_SALES 0x4ba570 PH_Handle_SMSG_AUCTION_BIDDER_LIST_RESULT 0x4ba9f0 PH_Handle_SMSG_EQUIPMENT_SET_LIST 0x4dfc40 PH_Handle_SMSG_EQUIPMENT_SET_SAVED 0x4dfe70 PH_Handle_SMSG_EQUIPMENT_SET_USE_RESULT 0x4dfec0 PH_Handle_SMSG_CURRENCY_GAINED 0x4e3590 PH_Handle_SMSG_RESPOND_INSPECT_ACHIEVEMENTS 0x4e6120 PH_Handle_SMSG_CRITERIA_UPDATE 0x4e8270 PH_Handle_SMSG_INITIALIZE_FACTIONS 0x4eeb10 PH_Handle_SMSG_ARENA_TEAM_STATS 0x4ef210 PH_Handle_SMSG_ARENA_TEAM_ROSTER 0x4f0280 PH_Handle_SMSG_STOP_DANCE 0x4fd870 PH_Handle_SMSG_LEARNED_DANCE_MOVES 0x4fd8c0 PH_Handle_SMSG_PLAY_DANCE 0x4fdad0 PH_Handle_SMSG_NOTIFY_DANCE 0x4fe840 PH_Handle_MSG_GUILD_BANK_MONEY_WITHDRAWN 0x5046d0 PH_Handle_MSG_QUERY_GUILD_BANK_TEXT 0x504700 PH_Handle_SMSG_GUILD_BANK_LIST 0x506080 PH_Handle_MSG_GUILD_BANK_LOG_QUERY 0x507640 PH_Handle_SMSG_OFFER_PETITION_ERROR 0x519fd0 PH_Handle_SMSG_GOSSIP_COMPLETE 0x51b130 PH_Handle_SMSG_GOSSIP_POI 0x51b160 PH_Handle_SMSG_GOSSIP_MESSAGE 0x51bc70 PH_Handle_SMSG_DUEL_OUTOFBOUNDS 0x521390 PH_Handle_SMSG_DUEL_INBOUNDS 0x5213b0 PH_Handle_SMSG_DUEL_COUNTDOWN 0x521560 PH_Handle_SMSG_DUEL_COMPLETE 0x5215a0 PH_Handle_SMSG_DUEL_REQUESTED 0x5217c0 PH_Handle_SMSG_MINIGAME_STATE 0x537ad0 PH_Handle_SMSG_MINIGAME_SETUP 0x537cc0
  7. This little program tells the client that SMSG_REDIRECT_CLIENT is already done and the connection is correct. You have to run this program while you are in the character list... This code is not written by me but by Cromon... Big Thanks class Program { private const uint gNetClient = 0x8A5C34; static void Main(string[] args) { try { Memory mem = new Memory("WoW"); uint netClient = gNetClient + mem.Base; uint basePtr = mem.Read<uint>(netClient); uint ofs1 = basePtr + 0x464C; // bool QueuePacketsForConnection1; uint ofs2 = basePtr + 0x464D; // bool QueuePacketsForConnection2; uint ofs3 = basePtr + 0x461C; // ServerConnection* pConnection1; uint ofs4 = basePtr + 0x4620; // ServerConnection* pConnection2; byte val1 = mem.Read<byte>(ofs1); uint ptr1 = mem.Read<uint>(ofs3); mem.Write(ofs2, val1); // QueuePacketsForConnection2 = QueuePacketsForConnection1; mem.Write(ofs4, ptr1); // pConnection2 = pConnection1; Console.WriteLine("WoW patched! You may now enter the world!"); Console.WriteLine("When disconnected from the server press enter and run the program again when back in character list!"); Console.WriteLine("When you wanna close WoW press enter to make changes undone!"); Console.ReadKey(); mem.Write(ofs2, (byte)1); mem.Write(ofs4, (uint)0); Console.WriteLine("WoW patched back! You can now login again or close wow without error! Press any key to close program!"); Console.ReadKey(); return; } catch (ArgumentException) { Console.WriteLine("Could not open WoW! Please start WoW first, enter the character list and run the program!"); Console.ReadKey(); return; } } } And here the memory class public class Memory { IntPtr m_hProcess; uint m_modBase; public Memory(string processName) { Process[] matches = Process.GetProcessesByName(processName); if (matches == null || matches.Length == 0) throw new ArgumentException("No process exists with that name!", "processName"); m_hProcess = matches[0].Handle; m_modBase = (uint)matches[0].MainModule.BaseAddress.ToInt32(); } public uint Base { get { return m_modBase; } } public T Read<T>(IntPtr address) where T : struct { return Read<T>((uint)address.ToInt32()); } public unsafe T Read<T>(uint address) where T : struct { int size = Marshal.SizeOf(typeof(T)); byte[] buffer = new byte[size]; int ret = ReadProcessMemory(m_hProcess, address, buffer, size); if (ret == 0) throw new ArgumentException("address is not valid!", "address"); fixed(byte* ptr = buffer) { IntPtr pMem = new IntPtr(ptr); return (T)Marshal.PtrToStructure(pMem, typeof(T)); } } public void Write<T>(IntPtr addr, T value) where T : struct { Write((uint)addr.ToInt32(), value); } public void Write<T>(uint addr, T value) where T : struct { int size = Marshal.SizeOf(value); IntPtr ptr = Marshal.AllocCoTaskMem(size); Marshal.StructureToPtr(value, ptr, false); int ret = WriteProcessMemory(m_hProcess, addr, ptr, size); Marshal.FreeCoTaskMem(ptr); if (ret == 0) throw new ArgumentException("address is not valid!", "address"); } [DllImport("Kernel32.dll")] private static extern int ReadProcessMemory(IntPtr proc, uint addr, [in, Out]byte[] buffer, int len, uint ret = 0); [DllImport("Kernel32.dll")] private static extern int WriteProcessMemory(IntPtr proc, uint addr, IntPtr buffer, int len, uint ret = 0); }
  8. Thank you, btw SMSG_AUTH_CHALLENGE is: struct SMSG_AUTH_CHALLENGE // Opcode: 0x8500 { uint32 ClientKey_part3; uint32 ServerKey_part1; uint8 unk; uint32 Seed; uint32 ServerKey_part3; uint32 ServerKey_part2; uint32 ClientKey_part1; uint32 ClientKey_part2; uint32 ServerKey_part4; uint32 ClientKey_part4; } struct SMSG_AUTH_CHALLENGE // Opcode: 0x8500 { uint32 unk1[2]; byte connectionIndex; uint32 ServerSeed; uint32 unk2[5]; }; works fine for me... I can enter the character list and i can enter the world
  9. Hi Mangos Community, I have a few informations for patch 4.0.1 I hope this helps the community to support 4.0.1 soon. (ClientBuild 13205) struct SMSG_AUTH_CHALLENGE // Opcode: 0x8500 { uint32 unk1[2]; byte connectionIndex; uint32 ServerSeed; uint32 unk2[5]; }; struct CMSG_AUTH_SESSION // Opcode: 0x3000 { byte hash4; byte hash8; byte hash14; byte hash17 byte unk1; byte hash3; uint32 unk2; byte hash5; byte unk3; byte hash0; byte hash10; uint32 unk4; byte hash12; byte hash6; uint unk5; uint16 ClientBuild; byte hash7; byte hash11; byte hash16; byte hash18; byte hash13; uint32 unk6; byte hash15; uint32 ClientSeed; byte hash9; uint32 unk7; byte hash1; byte hash2; byte hash19; uint32 AddonSize; uint32 AddonSizeUncompressed; byte AddonDataCompressed[AddonSize - 4]; CString AccountName; }; struct SMSG_AUTH_RESPONSE // Opcode: 0xEB58 { byte ErrorCode; uint32 unk1; byte unk2; uint32 unk3; uint16 ClientId; // 3 -> Cata, 2 -> Wotlk, 1 -> BC, 0 -> Classic }; struct CMSG_CHAR_ENUM // Opcode: 0x3F8 { }; struct SMSG_CHAR_ENUM // Opcode: 0x429C { byte NumCharacters; CharacterData Characters[NumCharacters]; }; struct CharacterData { uint64 GUID; CString Name; byte Race; byte Class; byte Gender; byte Skin; byte Face; byte HairStyle; byte HairColor; byte FacialHair; byte level; uint32 ZoneId; uint32 MapId; float X; float Y; float Z; uint64 Unk; uint32 CharacterFlags; uint32 CustomizationFlags; byte FirstLogin; uint32 PetDisplayId; uint32 PetLevel; uint32 PetFamily; CharacterItem Items[23]; }; struct CharacterItem { uint32 DisplayId; byte InventorySlot; uint32 EnchantId; }; CMSG_CHAR_CREATE => 0x2BF0 CMSG_CHAR_DELETE => 0x8A78 SMSG_CHAR_CREATE => 0xC211 SMSG_CHAR_DELETE => 0x278 SMSG_NEW_WORLD = 0x4A5D SMSG_CREATURE_QUERY_RESPONSE = 0x83B8 SMSG_TRIGGER_CINEMATIC = 0x6310 SMSG_SET_PROFICIENCY = 0x22D4 SMSG_BINDPOINTUPDATE = 0xA255 SMSG_EXPLORATION_EXPERIENCE = 0x8B58 SMSG_CALENDAR_EVENT_INVITE = 0xE2FC SMSG_UPDATE_OBJECT = 0x8BF0 SMSG_REALM_SPLIT 0x4270 CMSG_REALM_SPLIT 0xAB58 CMSG_CHAR_CUSTOMIZE 0x250 SMSG_CHAR_CUSTOMIZE 0xE2B5 CMSG_READY_FOR_ACCOUNT_DATA_TIMES 0x6A99 CMSG_PING 0x1001 SMSG_ACCOUNT_DATA_TIMES 0x82B5 CMSG_CHAR_RENAME 0xAB38 SMSG_CHAR_RENAME 0xA33C And here is the algorithm in C for the dynamic opcodes. You can get it in ResetOpcodeHandler unsigned int __cdecl ResetOpcodeHandler(unsigned int opcode) { unsigned int result; int v2; v2 = gNetClient; result = opcode & 1 | ((opcode & 0xC | ((opcode & 0x1E0 | ((opcode & 0x800 | (opcode >> 1) & 0x7000) >> 2)) >> 1)) >> 1); *(_DWORD *)(gNetClient + 4 * result + 0x560) = 0; *(_DWORD *)(v2 + 4 * result + 0x2560) = 0; return result; }
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use