Index of every page on this site: llms.txt
All skills
Run it yourself

Read how a game actually works so a mod can hook it. Decompile .NET/Mono (ILSpy), IL2CPP (Cpp2IL, Il2CppDumper), Java (Vineflower) and native code (Ghidra, IDA, via MCP servers); dump data and asset formats; reverse-engineer a binary file format and prove it with a round trip; read live memory (Cheat Engine, Frida, x64dbg); find render passes (RenderDoc). Use when a mod needs game internals, e.g. "how does the boss AI work", "find the damage function", "what format is this .sld/.pak/.dat", "where is the player position in memory".

Use this Skill: https://skilld.dev/gh/rehan-remade/universal-modder/reverse-engineering

Nothing lands on disk. Nothing to clean up.

Fork this Skill

Edit a local copy. It keeps the author and licence.

referencesue3-packagesREADME.md

≈821 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Unpacking fully-compressed UE3 .upk packages

Some UE3 games ship fully compressed packages: an uncompressed summary, then the rest of the file in compressed chunks (LZO here). Tools that can't decompress them stop at the header:

  • UELib parses the header but its package decompressor is a stub (CompressedChunkBlock.Decompress just returns the size), so UnrealPackage.Deserialize returns early and you get Exports=0. UE Explorer is built on UELib.
  • UPKUtils DecompressLZO.exe only accepts the XCOM and Batman package versions. Others fail with "Bad package version!" (Dishonored, build 801/30, included).

Try the community tool first: Gildor's Unreal Package Decompressor (decompress, from UE Viewer; source). It handles LZO, zlib and LZX for the games UE Viewer supports, and writes a clean package with the compression table removed. UE Viewer lists Dishonored as supported; the decompressor wasn't tried on it for this reference.

unpack_upk.py is a small Python fallback for LZO packages (CompressionFlags 2; it refuses zlib and LZX), written to get a package UELib can read. The same chunk layout, and what to do when LZO C extensions won't build, are in the field note knowledge/techniques/reading-ue3-gearbox-games-offline.md (um kb search ue3).

Format (verified: Dishonored, build 801/30)

header @0:  tag 0x9E2A83C1 | FileVersion | LicenseeVersion | HeaderSize | ... tables
            CompressionFlags(4) | CompressedChunks count(4) | chunk table[]
chunk table: 16-byte records — (UncompressedOffset, UncompressedSize, CompressedOffset, CompressedSize)
each chunk @CompressedOffset:
    FCompressedChunkHeader { Tag(4)=0x9E2A83C1, ChunkSize(4)=0x20000,
                             summary { CompSize(4), UncompSize(4) },
                             N * { CompSize(4), UncompSize(4) } }
    then N LZO blocks (CompressionFlags 2 = LZO; 1 = ZLIB; 4 = LZX).

The CompressionFlags/chunk-table offset varies per package (it depends on earlier summary fields), so the script auto-detects it by checking that chunks chain correctly.

Use

Work on copies outside the game folder.

uv run --python 3.12 --with minilzo python unpack_upk.py <in.upk> <out.upk>

Then, to read it with UELib, clear only the CompressionFlags dword (leave the chunk count/table in place) so UnrealPackage.Deserialize no longer returns early:

import struct
p = 'DishonoredGame.fixed.upk'; OFF = 0x79   # printed by the script
d = bytearray(open(p, 'rb').read()); struct.pack_into('<I', d, OFF, 0)
open(p, 'wb').write(d)

After that, Exports populates and you can dump classes and functions with UELib or browse them in UE Explorer. The output keeps the original summary and its chunk table, so treat it as input for UELib. For a package other tools can load, use Gildor's decompressor.

Notes

  • Depends on the PyPI minilzo package (GPL-2.0), which uv fetches at run time. It's a C extension published only as source, so uv builds it and needs a C compiler (on Windows, the MSVC Build Tools).
  • Extracted assets/scripts are the user's own game data — do not redistribute.

Source: SKILL.md on GitHub

skilld matched fixed text patterns in SKILL.md and file names. Patterns miss obfuscated code.

skilld run checks every file with the same patterns. It asks for approval before it loads a Skill with a behavior marked Needs approval.

1 warning11d3 checks · Risk SAFE
  • Gen Agent Trust Hub11d

    The skill provides a guide for reverse engineering game binaries and data formats for modding. It uses well-known tools and historical archives. The main security consideration is that the skill processes untrusted game files, which could potentially contain malicious instructions intended for the AI agent (indirect prompt injection).

  • Socket11d

    No alerts

  • Snyk11d

    Risk: MEDIUM · 1 issue

Signed by skilld at c1dff21. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated 2 weeks ago

README badge

README badge for rehan-remade/universal-modder/reverse-engineering