https://github.com/hax0r31337/denpk2
Unpacks the NXPK files from games with NetEase NeoX 2 Engine
https://github.com/hax0r31337/denpk2
identityv neox netease npk
Last synced: 7 months ago
JSON representation
Unpacks the NXPK files from games with NetEase NeoX 2 Engine
- Host: GitHub
- URL: https://github.com/hax0r31337/denpk2
- Owner: hax0r31337
- Created: 2024-05-21T12:30:15.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-13T13:18:47.000Z (almost 2 years ago)
- Last Synced: 2024-08-13T16:10:01.854Z (almost 2 years ago)
- Topics: identityv, neox, netease, npk
- Language: Rust
- Homepage:
- Size: 19.5 KB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# denpk2
Unpacks the NXPK files from games with NeoX 2 Engine.
## Information
The reverse engineering is done on the limited beta version of the Identity V game.
> https://h55.gdl.netease.com/dwrg_nx2_gongyan_release_20240509.apk
> backup: https://drive.google.com/drive/folders/1JpQCiteHn-nknXqlSE1wzAwMilZ2xSf3
## Engine changes
The engine has updated it's embedded python from 2.7.3 to 3.11.6.
And changes the rotor encryption in `redirect.nxs` to a `RSA` and `XOR` based custom encryption,
the `redirect.nxs` is removed, and the script loading seems to be handled by the native code.
The `marshal` format of the Python language stays untouched,
so the `marshal` module can be used to load the unpacked code objects.
The opcodes has been shuffled as well, so the `dis` module can't be used to disassemble the code objects.
## Usage
Extract the python scripts and generate file list
```bash
cargo run ./dat/script.npk
# make sure to use the same python version as the one used in the game
# to be able to load the code objects
python3.11 ./scripts/generate_filelist.py
```
Or else you can hook the hash function in the game and dump the file list.
Then you can pass the file list to the tool to unpack assets
```bash
cargo run ./dat/wwise.mini.npk ./dat/ui.mini.npk ./dat/strings.list
```