Announcing Beacon: Self-improving memory for coding agents
← All skills
Skill

reverse-engineering

skill:rehan-remade/universal-modder#reverse-engineering

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".

Verdict
Inconclusive

The analysis could not cover enough of the artifact to decide.

Analyzed Oct 27, 2026, 21:30 UTC at b36c75b

Dispute security verdict

If you believe this verdict is incorrect, submit a dispute and we'll review it.

0
findings
—
highest severity
0
threat classes
852
files scanned
103/103
checks satisfied
0
package advisories

Why this verdict

  • inconclusive: gap request_unanswered
  • inconclusive: unresolved question on EXEC
  • inconclusive: unresolved question on unknown class

Security findings 0

No individual findings recorded

The inconclusive verdict rests on the open questions and coverage gaps below; 4 candidate findings were refuted on review.

Open questions 4

What the analysis could not settle from the code alone.

The `um` CLI invoked throughout the skill (um scan, um kb search, um backup create, um win reg set, um win drive, um publish check) is not shown in this batch; its actual behavior cannot be verified from the evidence shown.
Code execution
The PY-CLAIM-CONTRADICTION detector leads cite a policy claim ('Never write an unpacked EXE into the game folder, run it, or share it...') whose full text is not present in any shown unit; where does this claim text live, to confirm the flagged writes (unpacked .upk copies, temp files in roundtrip(), sprite outputs) do or do not contradict it?
[invalid file request] SKILL.md sends the agent to this file at runtime for anti-cheat rules and code marked it NOT CONSUMED; serve its repository content and show whether it contains any instruction beyond the stated safety rules (hiding actions, skipping confirmation, contacting remote hosts).
Agent hijacking
[file request .agents/skills/mod-any-game/references/safety.md] SKILL.md sends the agent to this safety reference for anti-cheat rules; does the file exist and does it contain any instruction beyond the stated safety rules (hiding actions, skipping confirmation, contacting remote hosts)?
Agent hijacking
Refuted findings 4

Candidates the review stage examined and rejected, kept for transparency.

Supply chain

highRefutedlow confidence

The README directs the agent to download and run Gildor's Unreal Package Decompressor, an unpinned third-party binary from the external site gildor.org, with no version pin or checksum.

[Unreal Package Decompressor](https://www.gildor.org/downloads)
Why it was refuted

The gildor.org reference is itself a declared capability claim of this target (D9, network/descriptive, 'Try the community tool first') serving the declared 'dump data and asset formats' capability, and the README links the upstream GitHub source inline; the undeclared gate fails and the declared-core-capability carve-out applies, so only the no-checksum hygiene note remains.

Supply chain

highRefutedmedium confidence

The README instructs the agent to run unpack_upk.py through uv, which fetches and compiles the unpinned PyPI package minilzo at run time, so the code executed depends on mutable registry state rather than a reviewed pinned version.

uv run --python 3.12 --with minilzo python unpack_upk.py <in.upk> <out.upk>
Why it was refuted

D10 explicitly declares the exact behavior ('Depends on the PyPI `minilzo` package (GPL-2.0), which `uv` fetches at run time') as the dependency of the skill's shipped unpacker for its declared dump-data capability, so the undeclared gate fails and the declared-core-capability carve-out applies; the unpinned fetch is disclosed hygiene, not concealed supply harm.

Supply chain

highRefutedlow confidence

SKILL.md instructs the agent to install an unpinned .NET global tool (ilspycmd) from NuGet as a prerequisite for decompiling game assemblies.

dotnet tool install -g ilspycmd
Why it was refuted

The instruction installs ILSpy's own canonical CLI (ilspycmd) from the official NuGet registry as the setup step of the declared core capability ('Decompile .NET/Mono (ILSpy)' in the declared description), openly and with no concealment; the harm carve-out for the declared core capability applies and the undeclared gate fails, leaving only an unpinned-version hygiene note.

Supply chain

highRefutedlow confidence

The skill instructs installing the ILSpy decompiler as a global dotnet tool without a version pin, pulling the latest NuGet package at install time instead of a pinned release; this is the declared decompilation capability, so it is only an unpinned-dependency concern.

dotnet tool install -g ilspycmd
Why it was refuted

Same instruction and evidence as F1: the unpinned NuGet install of ilspycmd is the declared ILSpy decompilation capability itself, disclosed inline in the skill body, so the harm carve-out applies and the behavior is not undeclared; the missing pin is disclosed hygiene, not harmful undeclared behavior.

Coverage gaps 67

Parts of the artifact the static analysis could not fully examine.

context:unanalyzable_binary binary content is only byte-scanned
examples/aoe2-de-civ/assets/gen/drone.glb
context:unanalyzable_binary binary content is only byte-scanned
examples/aoe2-de-civ/assets/gen/robotaxi.glb
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineArgumentException.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineOption.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$AfterOptions.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$KnownOptionParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$MissingOptionArgState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$OptionAwareParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$OptionParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$OptionString.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$ParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$UnknownOptionParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/ParsedCommandLine.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/ParsedCommandLineOption.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/internal/file/PathTraversalChecker.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/internal/file/locking/ExclusiveFileAccessManager.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/util/internal/WrapperCredentials.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/BootstrapMainStarter$1.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Download$DefaultDownloadProgressListener.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Download$ProxyAuthenticator.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Download.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/GradleUserHomeLookup.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/GradleWrapperMain$Action.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/GradleWrapperMain.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/IDownload.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Install$InstallCheck.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Install.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Logger.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/PathAssembler.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/PropertiesFileHandler.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/WrapperConfiguration.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-gta5-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/WrapperExecutor.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineArgumentException.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineOption.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$AfterOptions.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$KnownOptionParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$MissingOptionArgState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$OptionAwareParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$OptionParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$OptionString.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$ParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser$UnknownOptionParserState.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/CommandLineParser.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/ParsedCommandLine.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/cli/ParsedCommandLineOption.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/internal/file/PathTraversalChecker.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/internal/file/locking/ExclusiveFileAccessManager.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/util/internal/WrapperCredentials.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/BootstrapMainStarter$1.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Download$DefaultDownloadProgressListener.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Download$ProxyAuthenticator.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Download.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/GradleUserHomeLookup.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/GradleWrapperMain$Action.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/GradleWrapperMain.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/IDownload.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Install$InstallCheck.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Install.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/Logger.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/PathAssembler.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/PropertiesFileHandler.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/WrapperConfiguration.class
context:unanalyzable_binary java_class content is only byte-scanned
examples/minecraft-outerwilds-passthrough/mc/gradle/wrapper/gradle-wrapper.jar!/org/gradle/wrapper/WrapperExecutor.class
request_unanswered request.0: invalid file request (evidence_ids not shown in the asking request)