Research for reviving and server emulation of the game KrazyRain
The project is intended for educational purpose only, we strongly discourage operating a public server. This repository does not distribute any game related assets or copyrighted material, pull requests containing such material will not be accepted. All files have been created from scratch, and are subject to the copyright notice of this project. If a part of this repository violates any copyright or license, please state which files and why, including proof and it will be removed.
The Files folder contains a collection of ready to use files. If you are here for a offline patch, you can just grab it from here: https://github.com/sebastian-heinz/Arrowgene.KrazyRain/tree/master/Files
Asset acces is managed by VDISK.DLL
.
The main assets are *.SNP
files which is a zip like archive format.
Header (24bytes)
bytes | type | description |
---|---|---|
8bytes | string | magic bytes format: VDISK1.0 |
2bytes | uint16 | unknown |
1byte | byte | unknown |
4byte | uint32 | file count |
4byte | uint32 | folder count |
4byte | uint32 | total bytes of file - 145 (entry headere) |
Entry Header (145 bytes) - repeated until end of file
bytes | type | description |
---|---|---|
1byte | byte | type (0=file, 1=folder) |
128bytes | string | entry name |
4byte | uint32 | data length uncompressed |
4byte | uint32 | data length compressed |
4byte | uint32 | parent folder offset |
4byte | uint32 | end of entry offset |
Xbyte | byte[] | file data |
Each file data
binary blob starts with 0x78 0x01
which indicates a zlib compression (https://tools.ietf.org/html/rfc1950).
After decompressing you are left with the original file.
It is also possible to recreate the same file structure and remove the original *.SNP
archives, the game will be able to read the original uncompressed files from disk.
The main executable of the game.
Game.exe fromlauncher run [Account] [Hash] [Byte]
: used to run the main game
- Account: maximum length of 16bytes
- Hash: maximum length of 32bytes
- Byte: a byte value (0-255)
Example run:
Game.exe fromlauncher run Account Hash 1
Game.exe fromlauncher version #32770
: called by KRPATCHER.exe to receive version number of Game.exe
Game.exe fromlauncher test
: unknown purpose
<$game.396824>
xor eax, eax
ret
<$game.396AB2>
xor eax, eax
ret
Launcher of the Game.
The launcher tries to connect to the following hosts:
127.0.0.1 patch.krazyrain.com
127.0.0.1 krazyrain.com
127.0.0.1 launcher.krazyrain.com
in order to redirect the requests, modify your hosts
file accordingly.
KRAZYRAIN.exe fromlauncher version #32770
KRAZYRAIN.exe hiderun
The launcher will request various .ini
files.
some of them contain the FileVersion
:
0x01020304 = 1.2.3.4
Contains FileVersion
of KRAZYRAIN.EXE
0x01000015
Contains FileVersion
of KRPATCHER.EXE
0x1000109
Not sure what it contains yet
-0x1
Contains a generic versioning of Game.exe
in x.x.x
format.
3.15.0
HTML file to displat while checking
HTML file to displat after check completed
Game Patcher that delivers updates.
Summary of projects
Main entry point to run individual parts.
Extract specific .SNP
file:
vdisk-extract D:\Games\KrazyRain\Data\DATA.SNP D:\Games\KrazyRain\DATA_OUT
Note: ensure DATA_OUT
exists.
Extract all .SNP
files in folder:
vdisk-extract-all D:\Games\KrazyRain\Data D:\Games\KrazyRain\DATA_OUT
Note: ensure DATA_OUT
exists.
Repack a folder into an .SNP
archive:
vdisk-archive D:\Games\KrazyRain\DATA_OUT DATA D:\Games\KrazyRain\DATA_OUT_SNP\DATA.SNP
Note: ensure DATA_OUT_SNP
exists.
Note: This has only been tested with the DATA.SNP
file, the implementation for creating a archive requires more work.
Server emulator to answer the Game.exe
network requests
PatchServer emulator, to answer the KRPATCHER.exe
http requests.
Implementation of the VDISK.DLL
methods, to pack and unpack .SNP
files.
c++ DLL that is registered in the import table of Arrowgene.Game.exe
. The DLL is able to patch the game on the fly, to disable Hackschield, enable offline mode or log VDisk access.