Overwatch Crashes on ReadProcessMemory menu

User Tag List

Results 1 to 11 of 11
  1. #1
    Torpedoes's Avatar ★ Elder ★ Doomsayer
    Authenticator enabled
    Reputation
    1147
    Join Date
    Sep 2013
    Posts
    956
    Thanks G/R
    148/415
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Overwatch Crashes on ReadProcessMemory

    This information pertains to Overwatch 1.0.4.29372, the version shipped on release after the open beta. Tested while sitting on the login screen.

    I have observed that performing ReadProcessMemory on a particular region of memory causes the client to crash. I don't know how many of these regions are there but there seems to always be at least one. I have also observed that the region in question is always Commited, Readable, Writable, not Executable, Private and Not Guarded (RPM on guard pages has no effect). In all instances, RPM causes Overwatch to crash, regardless of whether it came from an application running in administrator mode or normal mode. I have yet to find an explanation but I urge everybody reversing the client to exercise caution. I will continue my investigation but would appreciate any information the community has regarding this phenomenon.

    Overwatch Crashes on ReadProcessMemory
  2. #2
    Torpedoes's Avatar ★ Elder ★ Doomsayer
    Authenticator enabled
    Reputation
    1147
    Join Date
    Sep 2013
    Posts
    956
    Thanks G/R
    148/415
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Okay so I came across this article which seemed promising but I'm not entirely sure this is what they're using. I wrote a small application to dump the debug register values of all threads running in the game but came up with nothing. So they're probably doing something else. The search continues I guess.

  3. #3
    Torpedoes's Avatar ★ Elder ★ Doomsayer
    Authenticator enabled
    Reputation
    1147
    Join Date
    Sep 2013
    Posts
    956
    Thanks G/R
    148/415
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I tried injecting a DLL that would read the memory byte-by-byte directly, without using any system calls. About 4161 bytes in, the game client crashed. The region I was scanning was 4 pages long (16384 bytes) with the same protections as mentioned above. There were no additional page flags that I could find. So we can conclude that it has nothing to do with RPM but with the way the memory was protected itself, as I suspected before. Furthermore, the memory is protected in such a way that RPM also triggers an exception. Very strange.

  4. #4
    aeo's Avatar Contributor
    Reputation
    127
    Join Date
    Apr 2007
    Posts
    270
    Thanks G/R
    84/62
    Trade Feedback
    7 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    I think I read somewhere something about them having their own veh. Possibly you are reading memory and getting into that veh somehow?

  5. #5
    maper's Avatar Elite User __readgsqword(0x188); CoreCoins Purchaser
    Reputation
    496
    Join Date
    Nov 2013
    Posts
    356
    Thanks G/R
    26/353
    Trade Feedback
    0 (0%)
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    As mentioned above, the likely cause is they have the game install its own vectored exception handler, and then set hardware breakpoints either on specific locations in memory, or on randomized locations in memory intermittently. If an exception is raised from within the process address space, they continue. Otherwise, they pass the exception through and it causes a crash.

    At least, this would be my assumption, having not looked at it myself.

  6. #6
    Torpedoes's Avatar ★ Elder ★ Doomsayer
    Authenticator enabled
    Reputation
    1147
    Join Date
    Sep 2013
    Posts
    956
    Thanks G/R
    148/415
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    So I've been poking around a bit more and wanted to give everybody an update on my findings so far. To start, I have to mention that the security in Overwatch continues to astound me, now more than ever. Blizzard is really doing a good job keeping people like me away from their game. Well done. With that said, I have conducted a few more tests on this mysterious memory reading protection that I want share with you.

    To recap, we already know that there's a region that, when read, causes the game to throw an exception and crash. This crash happens regardless of how the memory is read, whether it be direct access via injected DLL or ReadProcessMemory. What I want to know is if there is some way of reading the memory without having it be detected by the game. In this post, I will discuss my experience with using kernel-mode drivers to try and sidestep the issue.

    Now the problem with kernel-mode drivers is that they're a pain in the ass to write and set up. But luckily, I was able to use BlackBone to do most of the heavily lifting. I wrote a quick test application which used the BlackBone driver to read the memory of the game but no matter how many times I read it, the game refused to crash. I thought all my problems were solved, but no, it turned out that all my custom (RPM) tools worked, regardless of how many times I used them to scan the memory. The only thing that caused the game to crash was CheatEngine, and even then, it wasn't all the time.

    It's worth mentioning that I'm running Windows in Test Mode and using version 1.0.4.29666 of the game (the latest, as of this post). So compared to the time when the game was crashing all the time, I think there's a pretty good chance that Blizzard changed something. Either way, I had to downgrade my copy of the game but the problem is that none of my earlier versions of Overwatch.exe worked with the current data files. So I had to use 1.0.4.29567 which was the only version I could get working (I made a copy of the data files now in case something like this happens again).

    Anyways, 29567 behaves similarly to what we've seen before. I launched it and gave my driver another shot. Sadly, the game crashed. So what conclusions could we draw from this? If this post is any indication then both the BlackBone method of using MmCopyMemory and the posts' method of using RtlCopyMemory won't actually solve the problem. In fact, it might be even more dangerous now since they might be hiding this trigger from us or even toggling it randomly. So go ahead and grab an older version of the game if you want a consistent test environment before it's too late.

  7. Thanks Saridormi, ayadew, Sychotix (3 members gave Thanks to Torpedoes for this useful post)
  8. #7
    hazedoff's Avatar Private
    Reputation
    7
    Join Date
    Jun 2016
    Posts
    8
    Thanks G/R
    1/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Torpedoes View Post
    I tried injecting a DLL that would read the memory byte-by-byte directly, without using any system calls. About 4161 bytes in, the game client crashed. The region I was scanning was 4 pages long (16384 bytes) with the same protections as mentioned above. There were no additional page flags that I could find. So we can conclude that it has nothing to do with RPM but with the way the memory was protected itself, as I suspected before. Furthermore, the memory is protected in such a way that RPM also triggers an exception. Very strange.
    Careful with injecting DLLs, you tend to get banned for that on overwatch.

  9. #8
    Sychotix's Avatar Moderator Authenticator enabled
    Reputation
    1421
    Join Date
    Apr 2006
    Posts
    3,943
    Thanks G/R
    285/572
    Trade Feedback
    1 (100%)
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by hazedoff View Post
    Careful with injecting DLLs, you tend to get banned for that on overwatch.
    I'm sure there are ways around that. Is there any information as to what Blizzard uses for the screenshots? Like... is it a directx call? Does warden have its own method? Wondering if anyone has looked into preventing the screenshot detection
    Last edited by Sychotix; 06-22-2016 at 03:39 PM.

  10. #9
    Torpedoes's Avatar ★ Elder ★ Doomsayer
    Authenticator enabled
    Reputation
    1147
    Join Date
    Sep 2013
    Posts
    956
    Thanks G/R
    148/415
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Sychotix View Post
    Is there any information as to what Blizzard uses for the screenshots? Like... is it a directx call? Does warden have its own method?
    My money would be on BitBlt but I have no idea.

  11. #10
    hazedoff's Avatar Private
    Reputation
    7
    Join Date
    Jun 2016
    Posts
    8
    Thanks G/R
    1/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Sychotix View Post
    I'm sure there are ways around that. Is there any information as to what Blizzard uses for the screenshots? Like... is it a directx call? Does warden have its own method? Wondering if anyone has looked into preventing the screenshot detection
    I have a family member who use to work for blizzard, granted he was only a GM in WoW a few years ago but I can ask if he knows anything regarding it, very doubtful though.

  12. #11
    Torpedoes's Avatar ★ Elder ★ Doomsayer
    Authenticator enabled
    Reputation
    1147
    Join Date
    Sep 2013
    Posts
    956
    Thanks G/R
    148/415
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by hazedoff View Post
    I have a family member who use to work for blizzard, granted he was only a GM in WoW a few years ago but I can ask if he knows anything regarding it, very doubtful though.
    So actually, we already know what they're doing but I was just too lazy to do another write up, but not anymore.

    Basically, as DarthTon explained, they allocate some pages with no physical backing until the page is accessed. This means that any access whatsoever (even in kernel mode) will validate the page, thus allowing Blizzard to see that it's validated and promptly crash the game. To avoid this, you can use QueryWorkingSetEx or NtQueryVirtualMemory and if the "valid" property of the returned structure is zero, then you probably shouldn't be reading that page. A small note, however, if you're using the Nt flavor of this function, know that you'll have to pass it undocumented parameters, specifically: MemoryWorkingSetExList. Although many of these pages can be found, the only ones I found to crash the game are the ones where the entire region of pages come up as invalid.

    See this thread for more information.

    P.S. This information is based purely on my tests, I don't actually know if this is what they're doing. But what I do know is that the above method worked 100% of the time to detect and prevent the crashing of the client as a result of a memory scan.

Similar Threads

  1. [Release] Overwatch Crash hacks update offests
    By OverwatchKicker in forum Overwatch Exploits|Hacks
    Replies: 9
    Last Post: 12-12-2016, 07:31 AM
  2. [Release] Bypass Crash Overwatch
    By OverwatchKicker in forum Overwatch Exploits|Hacks
    Replies: 3
    Last Post: 09-17-2016, 03:03 PM
  3. Crash Peoples Computer
    By codycondame in forum World of Warcraft Exploits
    Replies: 9
    Last Post: 10-07-2006, 03:27 PM
  4. DBC Edits crashing my wow?
    By dela in forum WoW ME Questions and Requests
    Replies: 2
    Last Post: 10-01-2006, 04:56 AM
  5. Top of Hyjal: Mountain Climb crashed plane
    By Cloud in forum World of Warcraft Exploits
    Replies: 17
    Last Post: 09-18-2006, 09:09 AM
All times are GMT -5. The time now is 05:30 PM. 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