Taking a look at Warden menu

Shout-Out

User Tag List

Results 1 to 5 of 5
  1. #1
    lilteapot's Avatar Banned
    Reputation
    2
    Join Date
    Apr 2016
    Posts
    1
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Taking a look at Warden

    Hi folks,

    First off, wonderful site and thanks so much for all the useful information!

    I thought it would be interesting to get some first hand experience and take a look at Warden, but I'm getting some unexpected results:

    1. Found warden via some magic bytes in WinDBG

    Code:
    s 0 L?7fffffff 56 57 FC 8B 54 24 14
    Taking a look at Warden-warden-copy-jpg

    2. The function is, char *__cdecl copyBytesForScan(char *dest, const char *source, unsigned int len), so I threw in a helpful breakpoint:

    Code:
    bp address_from_search_above ".printf \"copyBytesForScan(0x%x, 0x%x, 0x%x)\\n\", poi(esp+4), poi(esp+8), poi(esp+c); g"
    3. The output is a little weird though. The length is always zero, and it always
    1. scan some heap address, place results on the stack
    2. scan the stack address the was the previous destination


    Here's some output:

    Code:
    copyBytesForScan(0x00edd35c, 0x12a0b740, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x37ed8190, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x37ed82f0, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x37ed8770, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x37ed85d0, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x37ed8930, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x37ed1f30, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x39b107b0, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x39b10790, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x39b10710, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x39b10810, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x39b106f0, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    copyBytesForScan(0x00edd35c, 0x39b10790, 0x00000000)
    copyBytesForScan(0x2944cf28, 0x00edd35c, 0x00000000)
    I used the magic bytes to start off with because I wasn't having much luck setting a break on read based off of "known addresses checked by warden" (the lists I was finding were super old).

    The information for monitoring the warden addresses seems to be really old as well, so maybe the technique / process has changed?

    Anyways, I was hoping to find a good starting place to start looking at Warden and see what it was scanning, any help is much appreciated!

    Thanks!

    Taking a look at Warden
  2. Thanks homer91 (1 members gave Thanks to lilteapot for this useful post)
  3. #2
    verysimplenick's Avatar Member
    Reputation
    4
    Join Date
    Feb 2015
    Posts
    7
    Thanks G/R
    0/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    del stupid answer :)
    Last edited by verysimplenick; 04-18-2016 at 02:29 AM. Reason: del stupid answer :)

  4. #3
    Jadd's Avatar 🐸 Premium Seller
    Reputation
    1515
    Join Date
    May 2008
    Posts
    2,433
    Thanks G/R
    81/336
    Trade Feedback
    1 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    You're hooking Warden's memcpy function. It's not always used by the scan function.

    Look at where s_moduleInterface leads to. It's a really interesting pointer. The "real" copyBytesForScan function (I call it WardenInterface::ReadRelativeAddress) is called like so:

    Code:
    mov ebx, [s_moduleInterface]
    mov ebx, [ebx+00000228h]
    mov edx, [ebx]
    call [edx+0Ch]
    The function prototype looks like so:
    Code:
    int __stdcall WardenInterface::ReadRelativeAddress(char *dest, uintptr_t baseAddr, uintptr_t addr, size_t len)
    It is only ever used when scanning for modified memory. FYI memory scanning is currently disabled (I guess they don't have updated offsets of common hacks yet,) so this function is not currently being called, ever. That's also why you're *only* getting garbage results with your current hook.
    Last edited by Jadd; 04-18-2016 at 12:05 AM.

  5. Thanks Confucius, homer91 (2 members gave Thanks to Jadd for this useful post)
  6. #4
    -Ryuk-'s Avatar Elite User CoreCoins Purchaser Authenticator enabled
    Reputation
    529
    Join Date
    Nov 2009
    Posts
    1,028
    Thanks G/R
    38/51
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Another option would be to hook the function you already have and filter the results to ensure they are within the space they should be.
    That's how I used to do it.
    |Leacher:11/2009|Donor:02/2010|Established Member:09/2010|Contributor:09/2010|Elite:08/2013|

  7. #5
    xiathys's Avatar Member
    Reputation
    3
    Join Date
    Dec 2014
    Posts
    4
    Thanks G/R
    1/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Jadd View Post
    You're hooking Warden's memcpy function. It's not always used by the scan function.

    Look at where s_moduleInterface leads to. It's a really interesting pointer. The "real" copyBytesForScan function (I call it WardenInterface::ReadRelativeAddress) is called like so:

    Code:
    mov ebx, [s_moduleInterface]
    mov ebx, [ebx+00000228h]
    mov edx, [ebx]
    call [edx+0Ch]
    The function prototype looks like so:
    Code:
    int __stdcall WardenInterface::ReadRelativeAddress(char *dest, uintptr_t baseAddr, uintptr_t addr, size_t len)
    It is only ever used when scanning for modified memory. FYI memory scanning is currently disabled (I guess they don't have updated offsets of common hacks yet,) so this function is not currently being called, ever. That's also why you're *only* getting garbage results with your current hook.
    Ah, thanks so much! I don't have your version of the ReadRelativeAddress function, but trying all the possible registers gave me a similar function:

    Taking a look at Warden-capture5-png

    It isn't being executed at all though. I see it's part of a *massive* switch statement, and case 53 has to be taken to hit it. With the occasional exception, case 9 is the main one getting hit for me.

    However, it's a few days later now and I'm seeing the previous function get hit with more interesting addresses:

    Code:
    ...
    [wow+0x002cbf53] size: 10 count:  9
    [wow+0x00956bc6] size:  9 count:  9
    [wow+0x002afdcb] size:  8 count:  9
    [wow+0x001e202e] size:  8 count: 10
    [wow+0x002ccc4c] size:  7 count: 10
    [wow+0x005ade51] size:  8 count: 10
    [wow+0x0010d9af] size:  9 count: 10
    [wow+0x002c89c2] size:  5 count: 10
    [wow+0x002d94fa] size: 13 count: 10
    [wow+0x003b707c] size: 15 count: 11
    [wow+0x002afd50] size:  5 count: 11
    [wow+0x000c057b] size:  5 count: 11
    [wow+0x000f0fa9] size:  5 count: 11
    ...
    I've only had it running for 10-15 minutes, but it's already seen 89 unique addresses. Many of which are comparisons to constant or enum values ( 0x1100000 seems to be popular), some jumps, etc. Clearly values and points of interest

    Taking a look at Warden-capture4-png

    So it seems this memcpy function is being hit, but not the ReadRelativeAddress (assuming my slightly different version is in fact yours). And clearly they have offsets they are interested in based on the "memcpy" results above. Is it odd not to hit that switch statement, and then hit the ReadRelativeAddress if they have valid addresses being memcpy'd?

    And I'm looking into s_moduleInterface, I'm seeing 5 xrefs so I'll check those out

    Thanks!

    -- edit, pictures weren't showing up, had to try again
    Last edited by xiathys; 04-21-2016 at 10:24 PM.

  8. Thanks homer91 (1 members gave Thanks to xiathys for this useful post)

Similar Threads

  1. Can someone good with graphics take a look at this?
    By Dhorak in forum Art & Graphic Design
    Replies: 3
    Last Post: 07-09-2007, 05:04 PM
  2. LOL this i found funny(seph take a look)
    By Phase228 in forum Art & Graphic Design
    Replies: 4
    Last Post: 06-17-2007, 05:42 AM
  3. Take a look at this!
    By Jecille in forum Community Chat
    Replies: 8
    Last Post: 06-01-2007, 09:49 PM
  4. Dwarf male-> ..... take a look please
    By shdw in forum WoW ME Questions and Requests
    Replies: 0
    Last Post: 04-14-2007, 03:28 AM
  5. Lol Take a look! ---------------->
    By Mike3667 in forum Community Chat
    Replies: 12
    Last Post: 01-27-2007, 07:12 AM
All times are GMT -5. The time now is 11:33 AM. 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