-
Member
Originally Posted by
dclone
Are you sure that you don't have crashes with remapping only? I thought so too but it crashes after a random time of several minutes.
That's the thing. My programming experience is quite limited so I haven't been able to do any remapping.
I'm gonna try DLL injection to see if I can get around the CRC check like that.
-
Member
Originally Posted by
dclone
Are you sure that you don't have crashes with remapping only? I thought so too but it crashes after a random time of several minutes.
To be fair even several minutes is quite an achievement at this point. How did you do that? My process crashes immediately after remapping.
-
Originally Posted by
ex0d
Thanks @
ferib.
Your solution enables memory write access (and seems to be bypassing CRCs based on the output) but unfortunately the game process crashes straight away on 'NtResumeProcess(hProcess);'. I can see memory changes to write while the process is still suspended and I see the offsets @
king48488 mentioned. Changing them doesn't change the outcome though and the process still crashes immediately on NtResumeProcess.
Edit: I forgot to add that even with CRC check section commented out it still crashes on Resume. It doesn't seem to like NtUnmapViewOfSection/ NtMapViewOfSection.
Hook the thread creation WinAPI (or even syscall) and keep an eye on the thread permissions.
There is a sneaky flag that prevents you from suspending threads.
Any fool can write code that a computer can understand. good programmers write code that humans can understand.
-
Post Thanks / Like - 2 Thanks
0x7C,
ex0d (2 members gave Thanks to MrNoble for this useful post)
-
Originally Posted by
ex0d
To be fair even several minutes is quite an achievement at this point. How did you do that? My process crashes immediately after remapping.
it's not, you just get an instant crash when you fuck up the assembly, but when your assembly is fine (but not 100% working) it wont crash, instead, the crc32 checks detects you.
Any fool can write code that a computer can understand. good programmers write code that humans can understand.
-
Member
This is all to patch the game in memory right ? Excuse the noob question but would it be a lot more complicated to make a patched .exe ?
-
Member
Originally Posted by
ferib
Hook the thread creation WinAPI (or even syscall) and keep an eye on the thread permissions.
There is a sneaky flag that prevents you from suspending threads.
You mean thread suspension returns no error code but in reality threads are not suspended?
-
Member
Originally Posted by
ferib
Hook the thread creation WinAPI (or even syscall) and keep an eye on the thread permissions.
There is a sneaky flag that prevents you from suspending threads.
Thanks again @ferib
I tried to find the thread causing the crash and I believe I found it. It's just one. It seems to have the same permissions as the others which resume just fine though. I should add that suspending and resuming the process without remapping (including the thread I am talking about) works fine without crashing the whole process.
After running remapping, I can resume all threads in the process but one:
threadSearch.jpg
Please ignore different TIDs on the right. Screenshots are from different runs but it's the same thread 'Game.exe+0xafde0'.
Since it seems to have the same permissions like the rest, I am not sure what I can do from here. This is the thread that resumed brings the process back to life and I can navigate things in game (unless remapped, then it crashes).
Last edited by ex0d; 04-12-2021 at 05:34 PM.
-
Post Thanks / Like - 1 Thanks
MrNoble (1 members gave Thanks to ex0d for this useful post)
-
Originally Posted by
ex0d
Thanks again @
ferib
I tried to find the thread causing the crash and I believe I found it. It's just one. It seems to have the same permissions as the others which resume just fine though. I should add that suspending and resuming the process (including the thread I am talking about) works fine without crashing the whole process.
After running remapping, I can resume all threads in the process but one:
threadSearch.jpg
Please ignore different TIDs on the right. Screenshots are from different runs but it's the same thread 'Game.exe+0xafde0'.
Since it seems to have the same permissions like the rest, I am not sure what I can do from here. This is the thread that resumed brings the process back to life and I can navigate things in game (unless remapped, then it crashes).
the "120+" thread should be equal to 'MAXIMUM_SUSPEND_COUNT', it's a trap that's probably used to detect suspending of the game.
Any fool can write code that a computer can understand. good programmers write code that humans can understand.
-
Post Thanks / Like - 1 Thanks
ex0d (1 members gave Thanks to MrNoble for this useful post)
-
Member
Originally Posted by
ferib
the "120+" thread should be equal to 'MAXIMUM_SUSPEND_COUNT', it's a trap that's probably used to detect suspending of the game.
Haha nice just found that blog post explaining how thread suspension works and thought of that trick to set suspend count to max.
-
Member
Originally Posted by
ferib
the "120+" thread should be equal to 'MAXIMUM_SUSPEND_COUNT', it's a trap that's probably used to detect suspending of the game.
Thanks @ferib
I had high hopes for this one as sounded quite likely to be the source of the problem. So I suspended all threads but that one (which has a suspend count at 127), ran the remapping (even without crc section) and resumed all threads but that particular one. That way the suspend count never changed and always stayed as 127. Unfortunately the process is still crashing.
-
Member
Since I built a loader I am pretty sure that I do the remap before all but main thread and 2 other threads even exist. Both get suspended with previous suspend count == 0. I.e. I am pretty sure that while I am doing the remapping nobody is watching me. But even though I remap again back to original protection the game will crash after a few mins. So there must be some way how later on the remapping is detected. I have not applied any patches so it can't be that. And it can't be the hooks or such of the loader because when I do not remap at all then it runs forever.
-
Originally Posted by
dclone
Since I built a loader I am pretty sure that I do the remap before all but main thread and 2 other threads even exist. Both get suspended with previous suspend count == 0. I.e. I am pretty sure that while I am doing the remapping nobody is watching me. But even though I remap again back to original protection the game will crash after a few mins. So there must be some way how later on the remapping is detected. I have not applied any patches so it can't be that. And it can't be the hooks or such of the loader because when I do not remap at all then it runs forever.
On wow there are logfiles to indicate if its a 'security' crash or not, im not seeing any useful log files on D2R ;/
Any fool can write code that a computer can understand. good programmers write code that humans can understand.
-
Member
I managed to get the CRC bypass to work, but the game crashes a few seconds after it's launched :/ I'm guessing I'm hitting the same roadblocks as some people here
-
Member
Those delayed randomised crashes are pretty smart by Blizzard - hard to reverse the origin and demoralising at the same time.
-
Can confirm, the crc32 checks are the same as the ones I'm used to.
Big thanks, @king48488 for poking my interests, was a fun challenge to get it working!
Any fool can write code that a computer can understand. good programmers write code that humans can understand.
-
Post Thanks / Like - 4 Thanks