[4.0.0 12025] Opcode ID changed ? menu

User Tag List

Page 10 of 11 FirstFirst ... 67891011 LastLast
Results 136 to 150 of 151
  1. #136
    doityourself's Avatar ★ Elder ★
    Reputation
    1424
    Join Date
    Nov 2008
    Posts
    843
    Thanks G/R
    35/448
    Trade Feedback
    0 (0%)
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)
    opcodes not changed since 12539. but I stuck on the world loading screen.

    [4.0.0 12025] Opcode ID changed ?
  2. #137
    andy012345's Avatar Active Member
    Reputation
    59
    Join Date
    Oct 2007
    Posts
    124
    Thanks G/R
    0/7
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Looks like the redirection system from bnet is now also used for game servers. When connected you now do.

    Connect to bnet, auth
    Connect to grunt, get realmlist,
    Connect to realm
    Disconnect from grunt

    That brings you to char list.

    Entering world then makes a new connection to the game server.
    Switching servers (for example to instances) now creates a new game server connection and disconnects the old one (theres some challenge and proof that happens with this)

  3. #138
    XTZGZoReX's Avatar Active Member
    Reputation
    32
    Join Date
    Apr 2008
    Posts
    173
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Connect to grunt, get realmlist,
    Uh.. Grunt is not even used in 3.3.5a. Why would they use it in 4.x?

  4. #139
    doityourself's Avatar ★ Elder ★
    Reputation
    1424
    Join Date
    Nov 2008
    Posts
    843
    Thanks G/R
    35/448
    Trade Feedback
    0 (0%)
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)
    nothing to do with a new connection I think. it's any other thing but don't know which

  5. #140
    andy012345's Avatar Active Member
    Reputation
    59
    Join Date
    Oct 2007
    Posts
    124
    Thanks G/R
    0/7
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Sorry Zor is right, the connection that connects and disconnects is realm connection (auth session, char enum, etc), no idea wtf the other one is, maybe used for redirection.

  6. #141
    XTZGZoReX's Avatar Active Member
    Reputation
    32
    Join Date
    Apr 2008
    Posts
    173
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    To clarify: Since around 3.2.x or so (I forgot, to be honest), all authentication goes through Battle.net which uses auth modules to do the actual authentication. I'm not sure either why Andy's getting a connection on the old Grunt port, but I highly doubt that it's actually being used.

    See this blog post for a 3.3.5a-compatible description of the redirection going on since 3.3.x: WoW 3.3.3a: New Battle.net Redirection « Zor's Blog - Note that it, apparently, behaves differently in 4.x, though.

  7. #142
    doityourself's Avatar ★ Elder ★
    Reputation
    1424
    Join Date
    Nov 2008
    Posts
    843
    Thanks G/R
    35/448
    Trade Feedback
    0 (0%)
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)
    but connect works fine only stuck on the end of the world loading screen

    12479 world login work
    126xx world login work not

  8. #143
    andy012345's Avatar Active Member
    Reputation
    59
    Join Date
    Oct 2007
    Posts
    124
    Thanks G/R
    0/7
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Zor: the reason I'm thinking it's grunt is because some of the servers are on 3724 now. They also appear on 4000 and 6112.

    And yeh some structures of the redirections have changed. They look the same though.

    Maybe I should shout at hiperzone to make a post here on what's changed so far, but he's still busy trying to figure out which sockets handle which packets now.

  9. #144
    XTZGZoReX's Avatar Active Member
    Reputation
    32
    Join Date
    Apr 2008
    Posts
    173
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Zor: the reason I'm thinking it's grunt is because some of the servers are on 3724 now. They also appear on 4000 and 6112.
    Who knows, it's Blizzard... ****-ups and laziness are both common. Maybe they were just too lazy to reconfigure ports...

    Do you have a packet dump from that connection? I can quickly tell if it's Battle.net traffic or not.

    Maybe I should shout at hiperzone to make a post here on what's changed so far, but he's still busy trying to figure out which sockets handle which packets now.
    Hook WinSock functions and you're golden (socket, connect, recv, send, ...).
    Last edited by XTZGZoReX; 08-13-2010 at 07:01 PM.

  10. #145
    andy012345's Avatar Active Member
    Reputation
    59
    Join Date
    Oct 2007
    Posts
    124
    Thanks G/R
    0/7
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    No I mean which sockets handle which packets because of the redirection stuff, not because of bnet.

    Example:

    {SERVER} Packet: (0x998C) SMSG_LFG_UPDATE_PLAYER PacketSize = 2 Socket ID 9292
    {SERVER} Packet: (0x924C) SMSG_AURA_UPDATE PacketSize = 10 Socket ID 10284
    Last edited by andy012345; 08-13-2010 at 07:33 PM. Reason: Probly shouldn't post that link it gives away some of hiperzones beta chars.

  11. #146
    Cromon's Avatar Legendary


    Reputation
    840
    Join Date
    Mar 2008
    Posts
    714
    Thanks G/R
    0/7
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    For Client 12759 you can find the address of the function that handles a certain opcode like that:
    Code:
    public static uint CalcOff(uint opcode)
    {
         uint a = (opcode >> 1) & 0x7000;
         uint b = opcode & 0x800;
         a |= b;
         a >>= 1;
         b = opcode & 0x3C0;
         a |= b;
         a >>= 1;
         b = opcode & 0x10;
         a |= b;
         a >>= 1;
         b = opcode & 0x06;
         a |= b;
         a >>= 1;
         uint off = a * 4 + 0x538;
         return off;
    }
    
    
    uint offset = CalcOff(myOpcode);
    IntPtr funcAddr = Read<IntPtr>(0xCF55B4 + offset);

  12. #147
    TOM_RUS's Avatar Legendary
    Reputation
    914
    Join Date
    May 2008
    Posts
    699
    Thanks G/R
    0/52
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    That code prints whole SMSG opcode handlers table as:
    condensedId - handlerOffset - UnkOffset

    Some opcodes still missing in this table as they have special handling...

    You can convert opcodeId to it's condensedId using this code:
    Code:
    uint condensedId = (opcode & 6 | ((opcode & 0x10 | ((opcode & 0x3C0 | ((opcode & 0x800 | (opcode >> 1) & 0x7000) >> 1)) >> 1)) >> 1)) >> 1;
    You have to be in world to dump opcode handlers table (client initializes it only after you enter world).

    Code:
    [StructLayout(LayoutKind.Sequential)]
    struct ClientConnection
    {
        public int vTable;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1280)]
        public byte[] unk1; // some crap, may be account name
        public int unk2;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
        public byte[] SessionKey;   // session key or pointer to session key...
        public int unk3;
        public int State;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2048)]
        public int[] Handlers;         // stores handler pointer
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2048)]
        public int[] HandlersState;  // stores some pointer
    }
    
    using (var pm = new ProcessMemory(GetProcess("Wow")))
    {
        // offset for 4.0.0.12759
        var conn = pm.Read<ClientConnection>(pm.Read<uint>(0x00CF55B4));
    
        for (var i = 0; i < conn.Handlers.Length; ++i)
        {
            if (conn.Handlers[i] != 0 || conn.HandlersState[i] != 0)
                Console.WriteLine("{0:X4} - {1:X8} - {2:X8}", i, conn.Handlers[i], conn.HandlersState[i]);
        }
    }
    Handlers (build 12759) before world login:
    http://paste2.org/p/951555
    after entering world:
    http://paste2.org/p/951556
    Last edited by TOM_RUS; 08-15-2010 at 02:06 PM.

  13. #148
    Hiperzone's Avatar Member
    Reputation
    10
    Join Date
    Nov 2009
    Posts
    19
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    alright i will contribute with my research so far.
    this is what the server does after connecting the the character list server.
    It will create 2 connections, one for the realm server aka for example "Grim Batol" server
    and second one will be created once entering world to handle most of world opcodes.
    Packets are split between the realm and world servers, i cant tell wich ones atm but a quick IDA search leads to over 20 or so opcodes wich are handled in a special switch.

    this is the actual struct of the redirection protocol but im stuck atm after proof.

    SMSG_REDIRECT_CLIENT
    uint8 connection index //-> connection 1 -> 0x00, connection 2: 0x01
    uint32 token // -> 0x0B is used on all the logs i got
    uint32 Ip;
    HMACSHA1 digest[20];
    uint16 port;


    theres the digest calculation:
    HMACSHA1 sha(40, K.AsByteArray());
    sha.UpdateData((uint8 *)&token, 4);
    sha.UpdateData((uint8 *)&Ip, 4);
    sha.UpdateData((uint8 *)&_acct->redirectionindex, 1);
    sha.UpdateData((uint8 *)&port, 2);
    sha.Finalize();

    after this opcode CHALLENGE is requested and client replies with CMSG_REDIRECTION_AUTH_PROOF

    CMSG_REDIRECTION_AUTH_PROOF
    uint64 unk;
    SHA1 DIGEST[20];
    string account;

    digest then can be verified with:
    Sha1Hash sha;
    sha.Initialize();
    sha.UpdateData(accountt);
    sha.UpdateData(K.AsByteArray(),40);
    sha.UpdateData((uint8*)&_seed,4);
    sha.Finalize();

    if (memcmp(sha.GetDigest(), digest, 20)) { failed }

    now the problematic part where im stuck.
    on the first connection.
    server sends SMSG_UNKOP_1295 with uint32 0x0F from the character list connection;
    wich then client replies with another opcode with the same value. opcode 0x8A20

    if i send it like that, client stops accepting any packets i send and will disconnect the main connection once my sandbox sends a pong after a few seconds of wait.
    NOTE: the new connection is still kept alive but its useless since the client dced and didnt do the switch propely.
    once 0x8A20 is sent. SERVER will send SMSG_FORCE_SEND_QUEUED_PACKETS on the new connection made.
    END

    once you enter world a second connection is made
    wich will CHALLENGE AND PROOF like the first one but except now server will only send
    SMSG_FORCE_SEND_QUEUED_PACKETS.

    everything from here should now work as intended.

    NOTE: CHALLENGE uint8 var seems to alternate between 1 and 6, 1 on the first connection and 6 on the second one.

    prolly tom can research this better and find where the problem is, i cant seem to find the reason why it isnt working, i simulate the packet order etc fine.
    It might be a crypt issue, i tried many things but no luck, and i dont have any means atm to check if the packet is really received from the client since the logger doesnt log anything.

    thats all i can help.

    ports used for both connections are 6112.
    atm i cant provide a log with the nwest version since i need to fix some stuff but i got a semi decent log from the previous build if you want, its only missing cmsg opcodes after login.
    GL

    ---------- Post added at 01:49 PM ---------- Previous post was at 01:35 PM ----------

    heres a decent log Paste2: Next Generation Pastebin - Viewing Paste 951540

  14. #149
    Flushie's Avatar Master Sergeant
    Reputation
    -13
    Join Date
    May 2010
    Posts
    72
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Its very interesting, now I have a question did you pull this code out of IDA pro? Or did you do a decompile of it? I am just curious because I have been wondering how exactly you managed to get the exact parameters the function took.

  15. #150
    Hiperzone's Avatar Member
    Reputation
    10
    Join Date
    Nov 2009
    Posts
    19
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    i used packet logs and old research data with the help of IDA also to fill up the missing stuff.
    thx goes to zor and tom for adding/commenting the 3.3.5 stuff.

Page 10 of 11 FirstFirst ... 67891011 LastLast

Similar Threads

  1. How to change models and textures client side only
    By Matt in forum World of Warcraft Guides
    Replies: 9
    Last Post: 11-29-2006, 12:35 AM
  2. Change flight path easily
    By Matt in forum World of Warcraft Exploits
    Replies: 8
    Last Post: 07-27-2006, 04:59 AM
  3. Rep Power change
    By Shanaar in forum Suggestions
    Replies: 25
    Last Post: 05-17-2006, 12:42 PM
  4. Name Change Exploit
    By Matt in forum World of Warcraft Exploits
    Replies: 3
    Last Post: 05-16-2006, 12:50 PM
  5. MMOwned's Server Move + Forum Change
    By Matt in forum OC News
    Replies: 0
    Last Post: 03-25-2006, 04:52 AM
All times are GMT -5. The time now is 05:28 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search