<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LulLaS</title>
    <description>The latest articles on DEV Community by LulLaS (@rolanfreeman6png).</description>
    <link>https://dev.to/rolanfreeman6png</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4018557%2F88d64be5-89e4-41a4-ad56-0af90066a98a.png</url>
      <title>DEV Community: LulLaS</title>
      <link>https://dev.to/rolanfreeman6png</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rolanfreeman6png"/>
    <language>en</language>
    <item>
      <title>A formally-verified OCaml tool to recover RPG Maker assets — one binary, zero deps</title>
      <dc:creator>LulLaS</dc:creator>
      <pubDate>Sun, 02 Aug 2026 14:23:46 +0000</pubDate>
      <link>https://dev.to/rolanfreeman6png/a-formally-verified-ocaml-tool-to-recover-rpg-maker-assets-one-binary-zero-deps-54cg</link>
      <guid>https://dev.to/rolanfreeman6png/a-formally-verified-ocaml-tool-to-recover-rpg-maker-assets-one-binary-zero-deps-54cg</guid>
      <description>&lt;p&gt;RPG Maker games ship their assets encrypted. If you need to get them back&lt;br&gt;
  legitimately — recovering &lt;em&gt;your own&lt;/em&gt; project, a lost encryption key, an&lt;br&gt;
  authorized translation, or game preservation — you usually end up juggling&lt;br&gt;
  several format-specific scripts. I wanted one tool that just works, and can't&lt;br&gt;
  misbehave on hostile input.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;rpgm-decrypt&lt;/strong&gt; in OCaml.&lt;/p&gt;

&lt;p&gt;## What it does&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All five engine generations&lt;/strong&gt; — XP / VX / VX Ace (&lt;code&gt;.rgssad&lt;/code&gt;, &lt;code&gt;.rgss2a&lt;/code&gt;,
&lt;code&gt;.rgss3a&lt;/code&gt;) and MV / MZ (&lt;code&gt;.png_&lt;/code&gt;, &lt;code&gt;.ogg_&lt;/code&gt;, &lt;code&gt;.rpgmvp&lt;/code&gt;, &lt;code&gt;.pak&lt;/code&gt;) — one command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finds the key for you&lt;/strong&gt; — reads &lt;code&gt;System.json&lt;/code&gt; / scans &lt;code&gt;rpg_core.js&lt;/code&gt;
automatically, no manual key hunting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One self-contained binary&lt;/strong&gt; — no Python, .NET, or Node. Copy it, run it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON / NDJSON output&lt;/strong&gt; — pipes straight into &lt;code&gt;jq&lt;/code&gt; for scripting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;## The part I actually care about: it can't misbehave&lt;br&gt;
  This is a parser eating untrusted binary input, so correctness and safety were&lt;br&gt;
  the whole point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fuzzed 21M+ iterations, zero crashes.&lt;/strong&gt; Corrupt/hostile input degrades
gracefully instead of blowing up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zip-Slip blocked by construction&lt;/strong&gt; — extracted paths can never escape your
output folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formally verified core&lt;/strong&gt; — key functions carry Gospel contracts, and core
safety properties are machine-checked with Why3 / Z3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mutation-tested&lt;/strong&gt; — 7/7 mutants killed.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
console
  $ rpgm-decrypt ./MyGame ./decrypted
  [key]  found encryptionKey in www/js/System.json
    &amp;gt;  Title.png_  -&amp;gt;  decrypted/www/img/Title.png  [MV]
  === summary ===  scanned: 1873  decrypted: 1869  failed: 0

  ▎ Use it on content you're allowed to touch — your own work, a lost key, an
  ▎ authorized translation, or preservation. That responsibility is yours.

  GitHub: https://github.com/rolanfreeman6-png/rpgm-decrypt

  Curious what other RPG Maker archive formats people still need supported.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ocaml</category>
      <category>showdev</category>
      <category>reverseengineering</category>
      <category>formalverification</category>
    </item>
    <item>
      <title>I built a zero-dependency Go CLI to package RPG Maker games</title>
      <dc:creator>LulLaS</dc:creator>
      <pubDate>Sun, 02 Aug 2026 14:14:33 +0000</pubDate>
      <link>https://dev.to/rolanfreeman6png/i-built-a-zero-dependency-go-cli-to-package-rpg-maker-games-1ad1</link>
      <guid>https://dev.to/rolanfreeman6png/i-built-a-zero-dependency-go-cli-to-package-rpg-maker-games-1ad1</guid>
      <description>&lt;p&gt;Releasing an RPG Maker game means a lot of manual, error-prone steps: check the&lt;br&gt;
  project, strip debug/save files, build per-platform archives, and ship them to&lt;br&gt;
  itch.io or Steam. I built &lt;strong&gt;RPG Maker Release Forge&lt;/strong&gt; to make it one command.&lt;/p&gt;

&lt;p&gt;## What it does&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every engine&lt;/strong&gt; — MV, MZ, XP, VX, VX Ace, and 2000/2003.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit before build&lt;/strong&gt; — finds missing engine files, broken asset references,
invalid JSON, and shipped save/debug/backup files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproducible builds&lt;/strong&gt; — identical inputs produce byte-identical zips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delta patches&lt;/strong&gt; — ship only what changed between two releases, with SHA-256
verification on apply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store adapters&lt;/strong&gt; — itch.io (&lt;code&gt;butler&lt;/code&gt;) and Steam (&lt;code&gt;steamcmd&lt;/code&gt;), dry-run first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;## Why it's interesting technically&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero third-party Go modules&lt;/strong&gt; — the whole CLI is standard library only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supply-chain safe&lt;/strong&gt; — &lt;code&gt;runtime fetch&lt;/code&gt; verifies the NW.js archive SHA-256
against the official SHASUMS256.txt before extracting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detection never runs project code&lt;/strong&gt; — engine detection is file-marker based.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
  go build ./cmd/rm-release
  rm-release audit ./MyGame --target web
  rm-release build ./MyGame --platform web
  rm-release patch ./dist/v1.0 ./dist/v1.1

  GitHub: https://github.com/rolanfreeman6-png/RPG-Maker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>go</category>
      <category>gamedev</category>
      <category>showdev</category>
      <category>cli</category>
    </item>
    <item>
      <title>How to hide strings in C++ binaries with consteval</title>
      <dc:creator>LulLaS</dc:creator>
      <pubDate>Tue, 07 Jul 2026 02:06:48 +0000</pubDate>
      <link>https://dev.to/rolanfreeman6png/how-to-hide-strings-in-c-binaries-with-consteval-1bkh</link>
      <guid>https://dev.to/rolanfreeman6png/how-to-hide-strings-in-c-binaries-with-consteval-1bkh</guid>
      <description>&lt;h1&gt;
  
  
  How to hide strings in C++ binaries with consteval — and why it beats xorstr
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Every C++ binary has strings. &lt;code&gt;strings.exe&lt;/code&gt; reads them. Competitors see your API keys. Reverse engineers find your logic. Anti-cheat detects your function names.&lt;/p&gt;

&lt;h2&gt;
  
  
  The old way — xorstr (constexpr XOR)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
cpp
auto key = xorstr_("my_api_key");

Problem: constexpr depends on the optimizer. MSVC doesn't fold it — plaintext leaks to .rodata. Also: dangling pointer in xorstr_() macro (returns char* from temporary).

StealthLib — consteval (compiler-independent)
auto key = S("my_api_key");
consteval forces compile-time evaluation on every compiler. Plaintext is consumed during translation — never emitted. Verified by binary_scan_test on MSVC + GCC + Clang.

Differential testing
Same strings, same compiler, same platform:

StealthLib: 7/7 PASS
xorstr:     3/7 FAIL (dangling pointer)
What else is inside
Hash-based API resolution (no API names in binary)
4-channel anti-debug (PEB + NtQuery + rdtsc + DR registers)
IAT/EAT integrity checks
VM detection (CPUID + DMI + disk)
FIPS-180-4 SHA-256
Per-build key rotation (16 variants)
RAII auto re-encrypt guards
Quality
6 SAST tools clean: PVS-Studio (0 findings), SonarCloud (A ratings), CodeQL, Coverity (0.17 density), Semgrep, Codacy.

4.5 billion fuzz executions, 0 crashes. 40 mutation tests, 100% killed. 94.6% coverage.

GitHub
https://github.com/rolanfreeman6-png/stealthlib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>cpp</category>
      <category>security</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
