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!

Structured way to add features into ZoneServer.exe

Joined
Jun 10, 2009
Messages
658
Reaction score
140
Ever wondered how some private servers have disabled PK in a particular map? Look no further!

I have made a structured way to add features into ZoneServer.exe using C++ DLL injection. As an example, disabling PK in Quanato has been implemented. If you inject that DLL into your ZoneServer.exe then Quanato is only for peace lovers :eek:tt1:

Question: I am newbie and I want to add features into ZoneServer. How do I do?
Answer: It is not that simple but also not as hard as it was before if you are willing to learn and experiment :w00t:

I will write in brief how I managed to code disabling PK in a map:
Tools required -
  • Brain
  • IDA Pro
  • ZoneServer.exe and ZoneServer.pdb files
I followed these steps
  1. Opened IDA Pro
  2. Dragged and dropped ZoneServe.exe and waited for it to finish it's initial analysis.
  3. Clicked on File -> Load File -> PDB file.. and chose ZoneServer.pdb file. This file has lot of info on ZoneServer including original function names.
  4. As I wanted to to find function realtion to PK I click on functions window in IDA Pro and pressed Ctrl + F to searched. I searched for "PK" and found many functions. Interesting one was IsEnabled2PK and it's name suggested it was doing can PK check. I double clicked on the function and IDA showed me it's assembly code. I pressed F5 which shows C-like pseudo code. I saw that the function had 3 params. First param was pointer to current instance of that class, 2nd was level and 3rd I assumed it was map ID. But my assumptions were wrong. Luckily IsEnabled2PK called another function named IsNeviaValley which expected map ID. So from that I understood how to access map ID in this function.
  5. I did some research on how to hook a function and came across Microsoft Detours library. I understood how to write hooks using the library in C++ and built a small project for it.

I will try to write more such simple mods which can used to modify ZoneServer behaviour.

Looking forward for queries as well suggestions on improving the project. Even code contributions are welcome in Github!

If you feel this project is interesting or helpful in anyway please do star it in Github.

Project link:

Thanks to all my reverse engineering mentors as well as online guides :):

Happy modding :thumbup1:
 
Last edited:
Junior Spellweaver
Joined
Nov 16, 2012
Messages
101
Reaction score
21
Awesome...
Configurable way of implementing new things in server..
Best part is you know what it does and how it does from code itself..

Thanks for the share...
 
Newbie Spellweaver
Joined
Apr 5, 2008
Messages
55
Reaction score
0
Ever wondered how some private servers have disabled PK in a particular map? Look no further!

I have made a structured way to add features into ZoneServer.exe using C++ DLL injection. As an example, disabling PK in Quanato has been implemented. If you inject that DLL into your ZoneServer.exe then Quanato is only for peace lovers :eek:tt1:

Question: I am newbie and I want to add features into ZoneServer. How do I do?
Answer: It is not that simple but also not as hard as it was before if you are willing to learn and experiment :w00t:

I will write in brief how I managed to code disabling PK in a map:
Tools required -
  • Brain
  • IDA Pro
  • ZoneServer.exe and ZoneServer.pdb files
I followed these steps
  1. Opened IDA Pro
  2. Dragged and dropped ZoneServe.exe and waited for it to finish it's initial analysis.
  3. Clicked on File -> Load File -> PDB file.. and chose ZoneServer.pdb file. This file has lot of info on ZoneServer including original function names.
  4. As I wanted to to find function realtion to PK I click on functions window in IDA Pro and pressed Ctrl + F to searched. I searched for "PK" and found many functions. Interesting one was IsEnabled2PK and it's name suggested it was doing can PK check. I double clicked on the function and IDA showed me it's assembly code. I pressed F5 which shows C-like pseudo code. I saw that the function had 3 params. First param was pointer to current instance of that class, 2nd was level and 3rd I assumed it was map ID. But my assumptions were wrong. Luckily IsEnabled2PK called another function named IsNeviaValley which expected map ID. So from that I understood how to access map ID in this function.
  5. I did some research on how to hook a function and came across Microsoft Detours library. I understood how to write hooks using the library in C++ and built a small project for it.

I will try to write more such simple mods which can used to modify ZoneServer behaviour.

Looking forward for queries as well suggestions on improving the project. Even code contributions are welcome in Github!

If you feel this project is interesting or helpful in anyway please do star it in Github.

Project link:

Thanks to all my reverse engineering mentors as well as online guides :):

Happy modding :thumbup1:
great guide karthik !!much needed information for modding zoneserver !or how to do reverse engineering.
great one ! cheers
 
Newbie Spellweaver
Joined
Apr 5, 2008
Messages
55
Reaction score
0
When i loaded the zoneserver.exe in IDA pro it asked for load file as with 3 options
1.portable execution
2.ms-dos
3.Binary
which one to select? thankyou in advance

Ever wondered how some private servers have disabled PK in a particular map? Look no further!

I have made a structured way to add features into ZoneServer.exe using C++ DLL injection. As an example, disabling PK in Quanato has been implemented. If you inject that DLL into your ZoneServer.exe then Quanato is only for peace lovers :eek:tt1:

Question: I am newbie and I want to add features into ZoneServer. How do I do?
Answer: It is not that simple but also not as hard as it was before if you are willing to learn and experiment :w00t:

I will write in brief how I managed to code disabling PK in a map:
Tools required -
  • Brain
  • IDA Pro
  • ZoneServer.exe and ZoneServer.pdb files
I followed these steps
  1. Opened IDA Pro
  2. Dragged and dropped ZoneServe.exe and waited for it to finish it's initial analysis.
  3. Clicked on File -> Load File -> PDB file.. and chose ZoneServer.pdb file. This file has lot of info on ZoneServer including original function names.
  4. As I wanted to to find function realtion to PK I click on functions window in IDA Pro and pressed Ctrl + F to searched. I searched for "PK" and found many functions. Interesting one was IsEnabled2PK and it's name suggested it was doing can PK check. I double clicked on the function and IDA showed me it's assembly code. I pressed F5 which shows C-like pseudo code. I saw that the function had 3 params. First param was pointer to current instance of that class, 2nd was level and 3rd I assumed it was map ID. But my assumptions were wrong. Luckily IsEnabled2PK called another function named IsNeviaValley which expected map ID. So from that I understood how to access map ID in this function.
  5. I did some research on how to hook a function and came across Microsoft Detours library. I understood how to write hooks using the library in C++ and built a small project for it.

I will try to write more such simple mods which can used to modify ZoneServer behaviour.

Looking forward for queries as well suggestions on improving the project. Even code contributions are welcome in Github!

If you feel this project is interesting or helpful in anyway please do star it in Github.

Project link:

Thanks to all my reverse engineering mentors as well as online guides :):

Happy modding :thumbup1:
 
Back
Top