PES 2013 Private Server

izcarti

Non-League
Joined
24 July 2026
Bringing PES 2013 back online

I've spent the last while writing a replacement server from
scratch, and as of this week two clients have played a full Ranked match against
each other. Figured it was time to post something.

Where it's at

Working end to end: gate handshake, login, EULA, online menu, NAT discovery,
Quick Match 1v1 matchmaking, P2P connection between the two players, team select,
kickoff, and a full match. Last test ran 7 and a half minutes of actual gameplay
with about 26,500 P2P packets going back and forth. Pause and sync both fine.

Match results just went in but haven't been tested on a clean full-time finish
yet, so I'm not going to claim that one works until I've seen it.


What's left

Post match reporting (stats, ratings, playtime) is next - those commands only
fire on a normal full time finish so I've not seen them arrive yet. After that
it's persistence, so ratings and division actually stick between sessions, and
then friend lists and community stuff.

No public server yet. It's running on a box for testing and I want results and
persistence done before anyone else touches it.

 
What are the chances we get master league online for pes 2013 ? is ir even possible ?
Yes, got the rooms and friendly match working today, and I'm working on master league currently.
Good job!!! From what you're telling you're on a very early stage to release :) I think people will enjoy it even if it doesn't store any stat
its playable but i want to release like a stable release so everyone is happy, with multiple region servers and stuff and i may go open source who knows.
 
Is it possible to setup server on our own instead of joining another private server? 'Cause we'd like to setup our personal server just for ourselves and not like all the other multiplayer mods do including PES6 private servers.
 
sure, its going to be open source.
Very well, because everyone wants to host on their own for themselves since it only requires a basic setup and without needing to make account, something that other private servers won't let others host their own and instead they want everyone to signup on their servers and to give credentials for themselves (looking at you PES6.es requiring a valid serial key to join) as well as they can shut down their private servers or banned your account at anytime without warning.
 
Yes, got the rooms and friendly match working today, and I'm working on master league currently.

its playable but i want to release like a stable release so everyone is happy, with multiple region servers and stuff and i may go open source who knows.
MASTER LEAGUE ONLINE TOP😍😍😍😍😍😍
 
Very well, because everyone wants to host on their own for themselves since it only requires a basic setup and without needing to make account, something that other private servers won't let others host their own and instead they want everyone to signup on their servers and to give credentials for themselves (looking at you PES6.es requiring a valid serial key to join) as well as they can shut down their private servers or banned your account at anytime without warning.

For pes5 and 6 you can setup your own server, the idea of wanting a LAN based is unreal for this game because it's not provided by the game itself, unless you manage to write the whole scene for that, the hardest part of it is the stun server
 
So Ronaldo and Messi prime will take the place of Adriano pes 6 as the favorite player to play with online ?
 
Bringing PES 2013 back online

I've spent the last while writing a replacement server from
scratch, and as of this week two clients have played a full Ranked match against
each other. Figured it was time to post something.

Where it's at

Working end to end: gate handshake, login, EULA, online menu, NAT discovery,
Quick Match 1v1 matchmaking, P2P connection between the two players, team select,
kickoff, and a full match. Last test ran 7 and a half minutes of actual gameplay
with about 26,500 P2P packets going back and forth. Pause and sync both fine.

Match results just went in but haven't been tested on a clean full-time finish
yet, so I'm not going to claim that one works until I've seen it.


What's left

Post match reporting (stats, ratings, playtime) is next - those commands only
fire on a normal full time finish so I've not seen them arrive yet. After that
it's persistence, so ratings and division actually stick between sessions, and
then friend lists and community stuff.

No public server yet. It's running on a box for testing and I want results and
persistence done before anyone else touches it.



Bringing PES 2013 back online

I've spent the last while writing a replacement server from
scratch, and as of this week two clients have played a full Ranked match against
each other. Figured it was time to post something.

Where it's at

Working end to end: gate handshake, login, EULA, online menu, NAT discovery,
Quick Match 1v1 matchmaking, P2P connection between the two players, team select,
kickoff, and a full match. Last test ran 7 and a half minutes of actual gameplay
with about 26,500 P2P packets going back and forth. Pause and sync both fine.

Match results just went in but haven't been tested on a clean full-time finish
yet, so I'm not going to claim that one works until I've seen it.


What's left

Post match reporting (stats, ratings, playtime) is next - those commands only
fire on a normal full time finish so I've not seen them arrive yet. After that
it's persistence, so ratings and division actually stick between sessions, and
then friend lists and community stuff.

No public server yet. It's running on a box for testing and I want results and
persistence done before anyone else touches it.


Hi izcarti.

First off, congrats on getting PES 2013 online working end-to-end — that's an incredible achievement, and I imagine it took a huge amount of work.

I'm working on my own attempt at reviving PES 2013's online mode, mainly as a learning project. I've made solid progress on the network side: mapped all 4 domains (gate, info.service, ntl, STUN), confirmed the plaintext HTTP endpoints (info_mx.txt and GateInfo.php work fine with a simple stub server), and traced the gate connection on port 15010 down to a custom Blowfish implementation — found the P-array signature in the .exe, confirmed via hardware breakpoints in x64dbg that it initializes with the standard constants, and ruled out Windows CryptoAPI (confirmed via Frida hooks — CryptGenRandom gets called but never CryptImportKey/CryptHashData, so the network encryption isn't going through CryptoAPI).

Where I'm stuck: finding the actual secret key that gets mixed into the Blowfish key schedule. I'm currently tracing a custom memcpy-like function to find where it copies something other than the known constant tables, but it's slow going.

If you're willing to share anything about how you approached this part — even just confirming whether it's a static hardcoded key vs. something derived — it would save me a lot of time. Totally understand if you'd rather keep implementation details private, no pressure at all. Either way, thanks for inspiring this project.
 
Hi izcarti.

First off, congrats on getting PES 2013 online working end-to-end — that's an incredible achievement, and I imagine it took a huge amount of work.

I'm working on my own attempt at reviving PES 2013's online mode, mainly as a learning project. I've made solid progress on the network side: mapped all 4 domains (gate, info.service, ntl, STUN), confirmed the plaintext HTTP endpoints (info_mx.txt and GateInfo.php work fine with a simple stub server), and traced the gate connection on port 15010 down to a custom Blowfish implementation — found the P-array signature in the .exe, confirmed via hardware breakpoints in x64dbg that it initializes with the standard constants, and ruled out Windows CryptoAPI (confirmed via Frida hooks — CryptGenRandom gets called but never CryptImportKey/CryptHashData, so the network encryption isn't going through CryptoAPI).

Where I'm stuck: finding the actual secret key that gets mixed into the Blowfish key schedule. I'm currently tracing a custom memcpy-like function to find where it copies something other than the known constant tables, but it's slow going.

If you're willing to share anything about how you approached this part — even just confirming whether it's a static hardcoded key vs. something derived — it would save me a lot of time. Totally understand if you'd rather keep implementation details private, no pressure at all. Either way, thanks for inspiring this project.
d8 89 0a f0 66 c9 6b 40 d7 01 ae fc 43 6f f9 fe
c9 89 98 16 7a 74 48 3d 39 14 73 0c 5c 01 c0 3c
e2 8e 86 e5 89 c4 a1 85 f8 54 06 51 d2 ec a3 6b
5c 1a 40 ee c5 e9 da ae
hardcoded in the binary, Schedule pattern: 83 EC 08 53 55 56 BE 10 00 00 00 81 EE ?? ?? ?? ?? 57 8B F9. wire XOR over the whole frame: 5b 9f 2e 64. MD5 is over frame[0:8] + encrypted payload.
 
@Dinamico1023 @izcarti I've been working on my version too and I notice the games from 2010 up to 2013 (no idea from 2014, I believe and I hope its just a different protocol) used the kv protocol and also xor keys, and even better! they share almost all core commands for login, menu, lobby, match. So I have started working on something in C# that could help us get up the servers for the games between 2010 and 2013 pretty easy with a few specific cases for some commands, I will try to publish it between today and tomorrow, yet I couldn't get the room ready working as we talk before @izcarti but anyway, I made the code pretty good structured in a way that we could get this expanded pretty easy and clean code
 
d8 89 0a f0 66 c9 6b 40 d7 01 ae fc 43 6f f9 fe
c9 89 98 16 7a 74 48 3d 39 14 73 0c 5c 01 c0 3c
e2 8e 86 e5 89 c4 a1 85 f8 54 06 51 d2 ec a3 6b
5c 1a 40 ee c5 e9 da ae
hardcoded in the binary, Schedule pattern: 83 EC 08 53 55 56 BE 10 00 00 00 81 EE ?? ?? ?? ?? 57 8B F9. wire XOR over the whole frame: 5b 9f 2e 64. MD5 is over frame[0:8] + encrypted payload.
Quick update — the decryption works perfectly! I confirmed a full round-trip (decrypt then re-encrypt gives back the exact original packet byte-for-byte), and the plaintext for the first gate message decodes cleanly to rqid=1,timeout=20,svrtype="GATE",lang="MX",client="NETCLIENT",msg="CMD_GET_SVRLIST". Your key and the wire XOR are 100% correct.

One thing I couldn't reproduce: the 16-byte value embedded at the start of the decrypted payload (bytes 0-15). I tried MD5(packet[0:8] + ciphertext[16:]) as you described, plus every other 8-byte window of the raw wire bytes, the de-XORed ciphertext, and the plaintext, in both concatenation orders — none of them match the embedded value.

Could you clarify exactly what "frame[0:8]" refers to? Specifically:
  • Is it the first 8 bytes of the raw wire packet (post wire-XOR, as captured on the network), or something else (e.g. a session counter, a fixed protocol constant)?
  • Does "encrypted payload" mean the Blowfish ciphertext, or the plaintext before encryption?
  • Is there any additional data involved (e.g. a client/session ID not present in this specific packet)?
Happy to share my exact captured bytes if that helps you spot the discrepancy. Thanks again for the huge head start.
 
Back
Top Bottom