Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Welcome to our site

Take a moment to join our board


Popular Content

Showing content with the highest reputation since 09/15/2019 in all areas

  1. 1 point
    Hi people, here I am on this board to introduce myself, say hi and hope to discuss with some (if not all) of you. I am currently working as a Junior Network Consultant after graduating from a Master's Degree in the field of Systems, Networks and Virtualization of both. I used to play Conquer Online when I was way younger, and like most of the players, I was disgusted by the difference of level between standard players and the ones who were purchasing CPs with real money. I then started to play alternately on both private and public servers. This is when I have learnt about proxy bots and private server sources. I wanted to dig more into the programming and networking, and that's how I got to study computer sciences and landed where I am now. As of today, programming is not the skill that I should develop professionnaly, but this is something that I have always liked doing for University works, or for fun. I'd also really like to accomplish two projects of mine since forever. Write my own proxy bot for conquer online (on a local private server instance would suit me fine). Write my own private server source. The hows and whys I got here are really simple. I've had the opportunity to read a lot about CO2 programming, in particular from EPvPers board, where I saw lots of posts from Spirited there. By following some of his works, I found the CO2 wiki page that I consider a gold mine, and this board that looks attractive and seems to gather what I am looking for : nice people who I can ask help to or discuss with. I'm also seeking for people who have great interest into CO2 programming/knowledge in order to get as much information from as possible. Thanks for reading, and see you hopefully on this board.
  2. 1 point
    Introduction Conquer Online's older clients do not support higher resolution by default so in this guide I will be explaining how to edit the client's resolution to support higher resolutions, There will be no coding an I will try to explain the assembly instructions as I go, I will be using a 5095 client for this guide but the process should remain the same. Note that this is simply a guide to how it can be accomplished and I recommended doing through coding a dll instead of directly editing the executable to be able to configure it to any resolution without the need of multiple executables. All the numbers shown in the pictures are in hexadecimal (base16). Finding Window Resolution By doing a simple search in the client's executable (Conquer.exe) for the constant values 1024 or 768, we find two occurrences which are being stored in a global variable. In the first image we have the value of ecx register being set to 2 and being compared to the value of eax , if they aren't equal it jumps to the other image where the value is being compared against 3 by doing some backtracking we realize that the value of ScreenMode in GameSetUp.ini is being checked with 2 in the first and the 3 in the second image which represent 1024x768 window and full screen modes respectively, now by simply editing those values (400h and 300h) we can change the window resolution to any value we want which will only take effect if the client is in 1024x768 resolution mode, I.e. only if the ScreenMode value is set to 2 or 3. Having accomplished that we are faced with a few problems one being the client doesn't render the map edges properly if the resolution exceeds a certain value, to fix this we look for another two constants, which after doing some research and debugging ourselves we notice that aren't 1024 or 768 so by trying to identify/link any values to the ScreenMode value we find that there is no such value meaning that there is no actual correlation between the ScreenMode and the rendering resolution so by then trying the other default resolution to the client 800x600 we find the following. In that instruction block we find that there is some calculation being made and loop being executed just after that, by changing those values to our desired resolution values we fix the rendering problem , our next problem to fix is the alignment of the UI elements. Changing UI Alignment Since we aren't doing any coding, we will have to change the positions in the GUI.ini but we quickly find that some UI elements do not use the GUI.ini values but rather are hard-coded one of which is the player's heath/action bar/panel,(Skip this part if you don't want to center the player's panel) to find it we use the value we find to be the actual size or position of the panel by doing some searching in the GUI.ini and using the mouse position at the topmost pixel of the panel and the bottommost pixel and subtracting we find that the panel height is 141 ,we obtained the height specifically because we realize that the panel is being correctly positioned on the Y-Axis regardless of the resolution which means that the client uses it's height to determine the y value (being Screen Height - Panel Height) and after looking for that value we find the following. we see at the bottom a call to the function CWnd::MoveWindow which takes x,y,width,height and a repaint Boolean as parameters now depending on the function's calling convention the parameters are pushed to the stack in a specific order, since this is a _thiscall function we push the parameters in reverse order repaint>height>width>y>x which storing the class instance in ECX (being CWnd in this case), and so by looking at the instructions we see a call to GetWindowRect which we will ignore as the return value isn't being used then we see a 1 being pushed to the stack which represent a true value as the repaint parameter and then a 8Dh(141) which represent the height and so on. and as we look down we see a call to GetScreenHeight after which 141 is subtracted from the return value stored in EAX(being height) and later on pushing EAX to the stack as the Y parameter, we also see 0 being pushed as the x parameter which we need to change to center the panel but we notice that there is only a space enough for signed byte which can only take up to 0x7f or (127) as a positive number to fix this we will have to rewrite/change the instructions to push a constant Y value and skip the calculation. ("db 0" represent an empty byte) As seen above, we can edit the to push the y value directly so we have enough space to push a bigger x value as well. Other elements like the help window button follow similar principles but it's redrawn in a block of code than the original drawing so you will need to patch it twice and the arrow's quiver is a bit trickier but can be done (hint:It's being drawn constantly in a loop, and has several parts that are drawn a few bytes away from each other). IDA is used to disassemble the executable.
  3. 1 point
    But people has done it before like on 5165 Server.dat. I think it NOP the Server.dat decrypt part only so the Conquer.exe only extracts and read the outenserver.xml
  4. 1 point
    So, I've never done this before and maybe this is a super naive approach, but you could try debugging the client at OpenSSL's RSA_public_decrypt method and see what the public key is. I can see server.dat's XML reader use that function, so maybe that'd be a good start? Hopefully someone more knowledgeable can answer this better. I guess if you simply wanted to remove the decryption, you could overload the method using a hook to just return the input argument. It looks like that configuration manager for handling RSA decryption is used by multiple client files though.
  5. 1 point
    Hello @Smallxmac, thank you for the warm welcome. I have indeed noticed that many people had a story close to mine, it means as many people interested in this topic. I really look forward sharing questions, ideas or codes with all the community, within the limited spare time I can dedicate to this. Thanks again!
  6. 1 point
    Introduction The Conquer Online private server development wiki is hosted on GitLab, a free and open git repository hosting website. All articles are written in Markdown. To make an edit to an article or write a new page, simply clone the Git repository, make your edit, and create a pull request to merge your changes to the wiki. I try to check for pull requests at least once per day. If you're a regular contributor, I will promote you so you can approve requests on your own. Alternatively, I can add content on your behalf if it's a small change. Enjoy, and please contribute. Link Wiki Home

Important Information

By using this site, you agree to our Terms of Use.