Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Release] Documentation on fixing W8/w10 compatibility for v9x~12x

Newbie Spellweaver
Joined
Sep 30, 2016
Messages
22
Reaction score
30
[h=1]Fixing Windows 8/10 compatibility[/h]AOB: 68 ?? ?? ?? ?? 68 0 08 00 00 53 FF 15 ?? ?? ?? ?? 50 E8 ?? ?? ?? ?? 3B C3
Function Name: -NA-

[h=2]Ways to find it:[/h]
  1. Set breakpoint at __CxxThrowException@8
  2. Run the client
  3. Wait for error
  4. Trace it back 2 function and you’ll see it.

If a force jmp were to be made, you need to call kernel32.sleep

PUSH 2000
CALL DWORD PTR DS:[0xC0507C] // kernel32.Sleep

This might have been a threading issue on nexon’s end.


8UvQD4i - [Release] Documentation on fixing W8/w10 compatibility for v9x~12x - RaGEZONE Forums




9C0u0BJ - [Release] Documentation on fixing W8/w10 compatibility for v9x~12x - RaGEZONE Forums


[h=2][/h][h=2]To patch/fix it:[/h]
If the jmp is not taken [JGE SHORT MapleSto.00594F8E]. Call kernel32.Sleep for 2 seconds, and jmp back to the original location.

6IN8w6e - [Release] Documentation on fixing W8/w10 compatibility for v9x~12x - RaGEZONE Forums




sF09r4 - [Release] Documentation on fixing W8/w10 compatibility for v9x~12x - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Custom Title Activated
Loyal Member
Joined
Jan 18, 2010
Messages
3,109
Reaction score
1,139
For anyone interested, the actual function name is CInputSystem::Init. That AoB will not work on clients before big bang (< 93), so you'll need to fix the AoB for client versions like v83 and v90. One of the best releases lately though! :)
 
Junior Spellweaver
Joined
Sep 9, 2015
Messages
132
Reaction score
10
Lol, today a friend of mine wanted to make a v117 server but everybody said its impossible to open for windows 10/8, he will be happy to see this xD
 
Banned
Banned
Joined
Aug 31, 2016
Messages
193
Reaction score
1
For anyone interested, the actual function name is CInputSystem::Init. That AoB will not work on clients before big bang (< 93), so you'll need to fix the AoB for client versions like v83 and v90. One of the best releases lately though! :)
if i have windos 10 i can open v117 :O?
 
Skilled Illusionist
Joined
Apr 26, 2015
Messages
302
Reaction score
77
Implement a proxy DLL that hooks DirectInput8Create and then before calling the original function, add a sleep of 1 second. It works for v90! :)


extern "C" __declspec(dllexport) HRESULT DirectInput8Create(
HINSTANCE hinst,
DWORD dwVersion,
REFIID riidltf,
LPVOID * ppvOut,
LPUNKNOWN punkOuter
){
if(originalFunction == NULL){
HMODULE hHandle = LoadLibraryA("dinput8.dll");
FARPROC proc = GetProcAddress(hHandle, "DirectInput8Create");
originalFunction = (originalDirectInput8Create)(proc);
printf("Initialized DirectInput8Create hook");
}

Sleep(1000);
return originalFunction(hinst, dwVersion, riidltf, ppvOut, punkOuter);
}
.

Proxy DLL example:
http://forum.ragezone.com/f922/injecting-code-inside-maplestory-using-1111732/#post8680165

But in this case you would have to hook the dinput8.dll.

You will also need to hack a bit with a hex editor to change the name of the dinput8.dll to load another DLL, otherwise you will get an error.
 
Last edited:
Banned
Banned
Joined
Aug 31, 2016
Messages
193
Reaction score
1
Implement a proxy DLL that hooks DirectInput8Create and then before calling the original function, add a sleep of 1 second. It works for v90! :)


.

Proxy DLL example:
http://forum.ragezone.com/f922/injecting-code-inside-maplestory-using-1111732/#post8680165

But in this case you would have to hook the dinput8.dll.

You will also need to hack a bit with a hex editor to change the name of the dinput8.dll to load another DLL, otherwise you will get an error.
you know how i edit? and what i need edit..i need guide
 
Skilled Illusionist
Joined
Apr 26, 2015
Messages
302
Reaction score
77
Im not sure if this will work for all versions, i tested with v90.
You still can get the error, but it will happen less often.

1-) Hex edit your localhost using any hexeditor and search for the string 'dinput8.dll'
3-) Replace the string dinput8.dll with 'neoms90.dll' or your dll name in case you want to rename the dll provided, but remember that the name must have the exactly length of 7 characters.
5-) Put the neoms90.dll in your maplestory folder.

 
Last edited:
Banned
Banned
Joined
Aug 31, 2016
Messages
193
Reaction score
1
Im not sure if this will work for all versions, i tested with v90.
You still can get the error, but it will happen less often.

1-) Hex edit your localhost using any hexeditor and search for the string 'dinput8.dll'
3-) Replace the string dinput8.dll with 'neoms90.dll' or your dll name in case you want to rename the dll provided, but remember that the name must have the exactly length of 7 characters.
5-) Put the neoms90.dll in your maplestory folder.

if i have v117.2?
 
Skilled Illusionist
Joined
Apr 26, 2015
Messages
302
Reaction score
77
To find this in Ida, look at the imports and look for the function DirectInput8Create
Press ctrl + x to find the reference and keep going until you find all the references.
For v83 it will be only one.
 
Banned
Banned
Joined
Aug 31, 2016
Messages
193
Reaction score
1
To find this in Ida, look at the imports and look for the function DirectInput8Create
Press ctrl + x to find the reference and keep going until you find all the references.
For v83 it will be only one.
and for v117.2?
 
Newbie Spellweaver
Joined
Apr 18, 2015
Messages
10
Reaction score
1
Thank you so much for sharing this info! I'd been trying to make v111 run on Windows 10 for a while.

Out of curiosity from someone with a limited asm experience, though, why are the jumps to and from the snippet that calls kernel32.Sleep necessary? I assumed they were there just to shave some processor cycles and I tried to place the call where the first couple of NOPs were supposed to go but I can't get it to work (no error, client just opens and closes silently after a short moment).

Here's what it looks like:

satoshinakamoto - [Release] Documentation on fixing W8/w10 compatibility for v9x~12x - RaGEZONE Forums


Thanks!
 
Newbie Spellweaver
Joined
Sep 30, 2016
Messages
22
Reaction score
30
Thank you so much for sharing this info! I'd been trying to make v111 run on Windows 10 for a while.

Out of curiosity from someone with a limited asm experience, though, why are the jumps to and from the snippet that calls kernel32.Sleep necessary? I assumed they were there just to shave some processor cycles and I tried to place the call where the first couple of NOPs were supposed to go but I can't get it to work (no error, client just opens and closes silently after a short moment).

Here's what it looks like:



Thanks!

You can put it at the original location too, but I'd prefer jmping so I can keep track of all changes I've made in one place :)
 
Newbie Spellweaver
Joined
Apr 18, 2015
Messages
10
Reaction score
1
You can put it at the original location too, but I'd prefer jmping so I can keep track of all changes I've made in one place :)

Makes perfect sense and looks like the best practice, too!
Still haven't figured out why it didn't work for me, though. I'll investigate some more, will try again with a clean install and report back.
Thanks!
 
Back
Top