<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>shadowe1ite - godot</title>
      <link>https://batman.part-of.my.id</link>
      <description>Welcome to my website — this is the place where I share all my work, experiments, notes, and random things I’m building or breaking along the way.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://batman.part-of.my.id/tags/godot/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sat, 22 Aug 2026 20:10:00 +0530</lastBuildDate>
      <item>
          <title>Grand Larceny Auto — Robbing a Vault That Won&#x27;t Give You Six Stars</title>
          <pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate>
          <author>shadowe1ite</author>
          <link>https://batman.part-of.my.id/blog/grand-larceny-auto/</link>
          <guid>https://batman.part-of.my.id/blog/grand-larceny-auto/</guid>
          <description xml:base="https://batman.part-of.my.id/blog/grand-larceny-auto/">&lt;h2 id=&quot;the-setup&quot;&gt;the setup&lt;&#x2F;h2&gt;
&lt;p&gt;This was tagged as a game hacking challenge, so the first thing I did was just play it.&lt;&#x2F;p&gt;
&lt;p&gt;It’s a small GTA parody called &lt;strong&gt;Grand Larceny Auto&lt;&#x2F;strong&gt;. You drive around, steal cars, knock over
traffic cones, and your wanted level goes up. There’s a big &lt;strong&gt;VAULT&lt;&#x2F;strong&gt; sign — walk up, press F, and
it says you need six stars. The catch is the game stops you at five.&lt;&#x2F;p&gt;
&lt;p&gt;So the whole thing is: get six stars when the game won’t let you.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;Untitled.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;poking-at-it-first&quot;&gt;poking at it first&lt;&#x2F;h2&gt;
&lt;p&gt;Unzip it and look around.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;unzip&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; GrandLarcenyAuto-windows-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.zip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; GrandLarcenyAuto-windows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GrandLarcenyAuto.exe                      ~105 MB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GrandLarcenyAuto.pck                      2.3 KB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;data_GrandLarcenyAuto_windows_x86_64&#x2F;     188 files&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A huge exe with a tiny &lt;code&gt;.pck&lt;&#x2F;code&gt; is a Godot export. The &lt;code&gt;data_&#x2F;&lt;&#x2F;code&gt; folder is a bundled .NET runtime
(&lt;code&gt;coreclr.dll&lt;&#x2F;code&gt;, &lt;code&gt;GodotSharp.dll&lt;&#x2F;code&gt;, and so on), so it’s Godot with C#. One file stands out from the
188:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;data_...&#x2F;GrandLarcenyAuto.dll     93 KB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That’s the game. Since it’s a .NET assembly, I decompiled it with &lt;strong&gt;ILSpy&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;export&lt;&#x2F;span&gt;&lt;span&gt; DOTNET_ROOT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&#x2F;.dotnet&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;export&lt;&#x2F;span&gt;&lt;span&gt; PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&#x2F;.dotnet:&lt;&#x2F;span&gt;&lt;span&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&#x2F;.dotnet&#x2F;tools:&lt;&#x2F;span&gt;&lt;span&gt;$PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;export&lt;&#x2F;span&gt;&lt;span&gt; DOTNET_ROLL_FORWARD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;LatestMajor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ilspycmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; .&#x2F;decompiled&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;  &amp;quot;data_GrandLarcenyAuto_windows_x86_64&#x2F;GrandLarcenyAuto.dll&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The class names survived (&lt;code&gt;WantedSystem&lt;&#x2F;code&gt;, &lt;code&gt;SafehouseVault&lt;&#x2F;code&gt;, &lt;code&gt;CryptoUtil&lt;&#x2F;code&gt;, &lt;code&gt;PlayerState&lt;&#x2F;code&gt;), so it
was easy to find the interesting stuff. But the method bodies are &lt;strong&gt;ConfuserEx-obfuscated&lt;&#x2F;strong&gt; —
control-flow flattening, so every method is a &lt;code&gt;while (true) { switch ((num ^ 0x...) % N) }&lt;&#x2F;code&gt; state
machine with a bunch of junk arithmetic. Readable, but annoying. Here’s the raw &lt;code&gt;SafehouseVault&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;public string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; TryOpen&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (player.WantedStars&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; = -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;399529747&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            while&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;                switch&lt;&#x2F;span&gt;&lt;span&gt; ((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;uint&lt;&#x2F;span&gt;&lt;span&gt;)(num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ^&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0xD4D51D3A&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;                case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1u&lt;&#x2F;span&gt;&lt;span&gt;: array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; CryptoUtil.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;DeriveKey&lt;&#x2F;span&gt;&lt;span&gt;(player.WantedStars); num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; = ..&lt;&#x2F;span&gt;&lt;span&gt;.;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; continue&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;                case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 3u&lt;&#x2F;span&gt;&lt;span&gt;: array2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; CryptoUtil.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Xor&lt;&#x2F;span&gt;&lt;span&gt;(SealedBlob, array);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ..&lt;&#x2F;span&gt;&lt;span&gt;.   num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; = ..&lt;&#x2F;span&gt;&lt;span&gt;.;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; continue&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;                &#x2F;&#x2F; ...more fake states...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;...shut...&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;num =&lt;&#x2F;code&gt; lines are all dead — they just pick the next fake state. I fed the obfuscated dump to
an LLM and asked it to strip the control-flow junk into plain pseudocode, which gave me this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;&#x2F;&#x2F; WantedSystem — the cap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;public void&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; EscalateHeat&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; amount&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    int&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; player.WantedStars&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; amount;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;) s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;          &#x2F;&#x2F; you can never go past five&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    player.WantedStars&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; s;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;&#x2F;&#x2F; SafehouseVault — the door&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (player.WantedStars&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;The vault stays shut. (You need SIX stars.)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;WantedStars&lt;&#x2F;code&gt; is just a normal &lt;code&gt;int&lt;&#x2F;code&gt;. The only thing keeping me at five is that &lt;code&gt;if (s &amp;gt; 5)&lt;&#x2F;code&gt;.
Normal play never puts a 6 in there, but nothing stops me from writing it myself while the game
runs. No patching, no rebuilding — just change the number in memory. So, Cheat Engine.&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;There’s a cheat console in the game (press &lt;code&gt;K&lt;&#x2F;code&gt;) that spits out a &lt;code&gt;THM{...}&lt;&#x2F;code&gt; string. It’s a
decoy — it ends in &lt;code&gt;_4r3_f0r_t0ur1sts&lt;&#x2F;code&gt;. Ignore it, the real flag comes from the vault.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;opening-the-vault-with-cheat-engine&quot;&gt;opening the vault with Cheat Engine&lt;&#x2F;h2&gt;
&lt;p&gt;Start the game, then attach Cheat Engine to it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-085432.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-085524.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;WantedStars&lt;&#x2F;code&gt; is a 4-byte int and I don’t know its address, so I let the game find it for me by
scanning for the number on the HUD and narrowing down.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;1.&lt;&#x2F;strong&gt; Scan type &lt;strong&gt;4 Bytes&lt;&#x2F;strong&gt;, &lt;strong&gt;Exact Value&lt;&#x2F;strong&gt;, type my current star count (&lt;code&gt;0&lt;&#x2F;code&gt; at spawn), then
&lt;strong&gt;First Scan&lt;&#x2F;strong&gt;. Thousands of hits — that’s fine.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-085641.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;&#x2F;strong&gt; Commit one crime, boot a traffic cone. Stars go to &lt;code&gt;1&lt;&#x2F;code&gt;. Back in Cheat Engine, &lt;strong&gt;Next Scan&lt;&#x2F;strong&gt;
for &lt;code&gt;1&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-085918.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-085927.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;3.&lt;&#x2F;strong&gt; Do that a few more times. Each scan drops the addresses that didn’t move with my stars, so
the list shrinks fast.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-091412.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-091641.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;after a few rounds you’re down to one or two.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;4.&lt;&#x2F;strong&gt; Double-click the one that’s left to add it to the table, then the only thing that really
matters: set it to &lt;strong&gt;exactly 6&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-091744.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-091808.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-091911.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I tick &lt;strong&gt;freeze&lt;&#x2F;strong&gt; too, so the game can’t drop it back down while I walk over.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;5.&lt;&#x2F;strong&gt; Walk to the vault and press &lt;strong&gt;F&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;THE VAULT SWINGS OPEN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Six stars. All you had to do was rob the dang vault.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLAG: THM{...}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;batman.part-of.my.id&#x2F;blog&#x2F;grand-larceny-auto&#x2F;20260823-092055.webp#spoiler&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Done. The flag (hover to reveal):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span class=&quot;spoiler&quot;&gt;&lt;code&gt;THM{h0tf1x3d_my_0wn_w4nt3d_l3v3l}&lt;&#x2F;code&gt;&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;markdown-alert-tip&quot;&gt;
&lt;p&gt;I ran Cheat Engine itself under Wine. If you’d rather stay native on Linux, &lt;strong&gt;scanmem &#x2F;
GameConqueror&lt;&#x2F;strong&gt; does the exact same job against the wine process: 4 bytes, scan, next-scan on
change, set to 6.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;wrap-up&quot;&gt;wrap up&lt;&#x2F;h2&gt;
&lt;p&gt;I don’t have a Windows machine, so I ran the whole thing under Wine and cracked it with Cheat
Engine. It was a good learning experience.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;thanks for reading.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
