Add PyGhidra Crusader Toolkit and patch scripts

- Introduced README.md for the PyGhidra Crusader Toolkit, detailing setup and usage instructions.
- Added bootstrap_env.ps1 script to create and refresh the Python virtual environment with necessary packages.
- Implemented _tmp_patch_hidden_cheat_menu.py and _tmp_patch_hidden_cheat_menu_deferred.py scripts for patching specific memory addresses in Ghidra.
This commit is contained in:
MaddoScientisto 2026-03-25 08:15:21 +01:00
commit ad6ebd0b86
132 changed files with 41758 additions and 99 deletions

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c28c202638381579400" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="CRUSADER.EXE" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/Writable" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451f6e9206725659389900" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="CRUSADER-PATCHED.EXE" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c288202638203322400" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="ASYLUM" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c283202637930887000" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="DOSCALLS.DLL" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c28f202638566649200" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="U8.EXE" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c282202637894958200" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="XANDRV32.DLL" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c289202638239150700" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="xanlib.dll" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/regret" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c280202637798314100" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="ASYLUM.DLL" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/regret" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c281202637836837200" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="REGRET.EXE" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/orig_cd" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a86451c28b202638339220200" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="CRUSADER.EXE" />
</BASIC_INFO>
</FILE_INFO>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<FILE_INFO>
<BASIC_INFO>
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
<STATE NAME="PARENT" TYPE="string" VALUE="/Maddo" />
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647bdba516037949612600" />
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
<STATE NAME="NAME" TYPE="string" VALUE="CRUSADER-RAW.EXE" />
</BASIC_INFO>
</FILE_INFO>

Binary file not shown.

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="2" TIME="1774389005832" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1,2 @@
1;Maddo;1774376667876;Base before edits
2;Maddo;1774389005800;Computer Gump

Binary file not shown.

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376742817" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376742808;before patch

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376753905" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376753897;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376755842" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376755834;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376755919" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376755910;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376755947" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376755939;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376755978" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376755970;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376763437" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376763430;

Binary file not shown.

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="2" TIME="1774390407071" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1,2 @@
1;Maddo;1774376763520;
2;Maddo;1774390407048;Immortality debunking

Binary file not shown.

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376769563" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376769554;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<CHECKOUT_LIST NEXT_ID="3">
<CHECKOUT ID="2" USER="Maddo" VERSION="1" TIME="1774376775349" PROJECT="Cirno-PC::K:/ghidra/Crusader_Decomp/Crusader" EXCLUSIVE="true" />
</CHECKOUT_LIST>

Binary file not shown.

View file

@ -0,0 +1 @@
1;Maddo;1774376775340;

View file

@ -1,4 +1,19 @@
VERSION=1
/
NEXT-ID:0
00000002:ASYLUM:c0a86451c288202638203322400
00000000:CRUSADER.EXE:c0a86451c28c202638381579400
00000003:DOSCALLS.DLL:c0a86451c283202637930887000
00000004:U8.EXE:c0a86451c28f202638566649200
00000005:XANDRV32.DLL:c0a86451c282202637894958200
00000006:xanlib.dll:c0a86451c289202638239150700
/Maddo
0000000a:CRUSADER-RAW.EXE:c0a8647bdba516037949612600
/Writable
00000001:CRUSADER-PATCHED.EXE:c0a86451f6e9206725659389900
/orig_cd
00000009:CRUSADER.EXE:c0a86451c28b202638339220200
/regret
00000007:ASYLUM.DLL:c0a86451c280202637798314100
00000008:REGRET.EXE:c0a86451c281202637836837200
NEXT-ID:b
MD5:d41d8cd98f00b204e9800998ecf8427e