Can you read player names out of process? menu

User Tag List

Results 1 to 11 of 11
  1. #1
    sweeper18's Avatar Member
    Reputation
    2
    Join Date
    Aug 2006
    Posts
    26
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Can you read player names out of process?

    I have my program looping through and finding all of the objects in the ObjMgr from out of process, Thanks Knyox . I am taking small steps and I have all of the NPC names/pos/level all of that good stuff updating every 200ms. I can't seem to find a way to read the player names from an offset of the player structure. I dumped the memory around the addresses I found using a memory scanner and didn't see much.


    I was curious if anyone had done this quite yet... if not, I have a lot of really annoying work ahead of me

    Can you read player names out of process?
  2. #2
    mrbrdo's Avatar Member
    Reputation
    5
    Join Date
    Jun 2008
    Posts
    30
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Code:
    function TWoWNPC.Name: String;
    var m: Cardinal;
    begin
      m := PWoWMemoryReader(mem).GetDWORD(ptrPlayerBase + 0xDB8);
      m := PWoWMemoryReader(mem).GetDWORD(m + 0x40);
      Result := PWoWMemoryReader(mem).GetString(m, 30); // 30 = length
    end;
    was told many times, not my idea (sry forgot who originally posted it, i know kynox mentioned it a few times).

  3. #3
    Shynd's Avatar Contributor
    Reputation
    97
    Join Date
    May 2008
    Posts
    393
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    He's asking about Player names, not Unit names.

  4. #4
    Bobnovak's Avatar Member
    Reputation
    3
    Join Date
    Jun 2008
    Posts
    10
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I haven't seen anything about player names around, I imagine it's in there somewhere though.

  5. #5
    Cypher's Avatar Kynox's Sister's Pimp
    Reputation
    1356
    Join Date
    Apr 2006
    Posts
    5,368
    Thanks G/R
    0/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    CGObject_C::GetObjectName:
    .text:005D8470 CGObject_C__GetObjectName proc near ; CODE XREF: sub_59D930+108p
    .text:005D8470 ; sub_59D930+182p
    .text:005D8470 ; sub_5A07D0+1Ep ...

    Not sure if that's what you're looking for but thats what I have on hand.

  6. #6
    kynox's Avatar Account not activated by Email
    Reputation
    830
    Join Date
    Dec 2006
    Posts
    888
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Code:
    char *__thiscall sub_5D8470(int this, int a2)
    {
      DWORD v2; // eax@1
      int v3; // esi@1
      char *result; // eax@2
      DWORD v5; // ecx@6
      int v6; // esi@14
      int v7; // eax@9
      int v8; // ecx@9
      int v9; // [sp+4h] [bp-8h]@2
      int v10; // [sp+8h] [bp-4h]@2
    
      v3 = this;
      v2 = *(_DWORD *)(this + 8);
      if ( (*(_DWORD *)(v2 + 8) >> 4) & 1 )                         // if ( (OBJECT_FIELD_TYPE >> 4) & 1) aka IsPlayer
      {
        v9 = *(_DWORD *)v2;
        v10 = *(_DWORD *)(v2 + 4);
        result = (char *)sub_67D400(*(_DWORD *)v2, *(_DWORD *)(v2 + 4), &v9, sub_5D6FB0, 0, 1);
        if ( result )
        {
          if ( a2 )
          {
            if ( *(result + 52) )
              *(_DWORD *)a2 = result + 52;
          }
          return result;
        }
      }
      else
      {
        v5 = *(_DWORD *)(this + 288);
        if ( *(_DWORD *)(v5 + 0x268) )                              // if ( UNIT_FIELD_PET_NUMBER ) aka IsPet
        {
          v9 = *(_DWORD *)v2;
          v10 = *(_DWORD *)(v2 + 4);
          result = (char *)sub_67E8C0(*(_DWORD *)(v5 + 616), &v9, sub_5D6FB0, 0, 1);
          if ( result )
          {
            if ( *((_DWORD *)result + 22) == *(_DWORD *)(*(_DWORD *)(v3 + 288) + 620) )
              return result;
            sub_5F24B0(result);
            sub_67A550(*(_DWORD *)(*(_DWORD *)(v3 + 288) + 616));
            v7 = *(_DWORD *)(v3 + 8);
            v9 = *(_DWORD *)v7;
            v8 = *(_DWORD *)(v3 + 288);
            v10 = *(_DWORD *)(v7 + 4);
            sub_67E8C0(*(_DWORD *)(v8 + 616), &v9, sub_5D6FB0, 0, 1);
          }
        }
        else
        {                                                           // else, Its a Unit
          v6 = *(_DWORD *)(v3 + 0xDB8);
          if ( v6 )
            return *(char **)(v6 + 0x40);
        }
      }
      result = (char *)sub_4C15D0("UNKNOWNOBJECT", -1, 0);
      if ( !result || !*result )
        result = "Unknown Being";
      return result;
    ^ Basically, its reading the name from cache (sub_67D400) Rather than a variable of the class.

    It's going to be quite difficult to read it out from what i can see. Though, you can always try i guess.

    Inprocess FTW!

  7. #7
    sweeper18's Avatar Member
    Reputation
    2
    Join Date
    Aug 2006
    Posts
    26
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    This is gonna suck lol

  8. #8
    kynox's Avatar Account not activated by Email
    Reputation
    830
    Join Date
    Dec 2006
    Posts
    888
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    You could always inject a code cave to call the cache function

  9. #9
    Shynd's Avatar Contributor
    Reputation
    97
    Join Date
    May 2008
    Posts
    393
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Read either Unit or Player name, entirely out of process
    Pretty simple, actually. Names are stored in a linked list. WoW basically iterates through the list until it finds the entry whose GUID matches that of the object whose name it's trying to get. Simply do the same thing for the win.

    As seen in the wild: [ame=http://youtube.com/watch?v=39aAgEjspH8]GetObjectName video[/ame]
    Last edited by Shynd; 07-06-2008 at 11:23 AM. Reason: Linked to code with commenting, easier to understand

  10. #10
    sweeper18's Avatar Member
    Reputation
    2
    Join Date
    Aug 2006
    Posts
    26
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Shynd View Post
    Read either Unit or Player name, entirely out of process
    Pretty simple, actually. Names are stored in a linked list. WoW basically iterates through the list until it finds the entry whose GUID matches that of the object whose name it's trying to get. Simply do the same thing for the win.
    Yay, ty vm, will +rep if I can

  11. #11
    suicidity's Avatar Contributor
    Reputation
    207
    Join Date
    Oct 2006
    Posts
    1,439
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Very nice post Shynd.

    I knew it could be done because that old KMap or whatever that was backed by Merc did it.

    Nice work!


Similar Threads

  1. I can't read player name use python
    By binlaniua in forum WoW Memory Editing
    Replies: 4
    Last Post: 01-07-2013, 01:18 PM
  2. [Help] Reading Player Names
    By nopz in forum WoW Memory Editing
    Replies: 0
    Last Post: 09-15-2009, 05:59 PM
  3. Can you read this crap?
    By Elephant in forum Community Chat
    Replies: 13
    Last Post: 10-08-2007, 12:37 PM
  4. Can you read this
    By Ramez in forum Community Chat
    Replies: 23
    Last Post: 07-10-2007, 10:06 PM
All times are GMT -5. The time now is 09:03 AM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search