summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-04-25 14:40:13 -0500
committerHunter Kvalevog <hunter@kvog.sh>2026-04-25 14:40:13 -0500
commitf7e586e6533974489503538ac140a7ce5608ecb7 (patch)
tree51249dcc3ea97b1c68a397509df31f6263c7dcd2
parent04d8bfe4386451f31b272a82e4f273c005e0659f (diff)
-rw-r--r--content/files/girlfriend-of-steel-re/000-weeb-header.jpgbin0 -> 1084194 bytes
-rw-r--r--content/files/girlfriend-of-steel-re/001-scylla.pngbin601912 -> 595758 bytes
-rw-r--r--content/files/girlfriend-of-steel-re/002-ghidra.pngbin214749 -> 321993 bytes
-rw-r--r--content/posts/girlfriend-of-steel-re.md10
-rw-r--r--hugo.toml3
-rw-r--r--static/css/syntax.css78
-rw-r--r--themes/hugo-xmin/layouts/partials/header.html1
7 files changed, 88 insertions, 4 deletions
diff --git a/content/files/girlfriend-of-steel-re/000-weeb-header.jpg b/content/files/girlfriend-of-steel-re/000-weeb-header.jpg
new file mode 100644
index 0000000..8c7b8dd
--- /dev/null
+++ b/content/files/girlfriend-of-steel-re/000-weeb-header.jpg
Binary files differ
diff --git a/content/files/girlfriend-of-steel-re/001-scylla.png b/content/files/girlfriend-of-steel-re/001-scylla.png
index cb11767..a5ded5f 100644
--- a/content/files/girlfriend-of-steel-re/001-scylla.png
+++ b/content/files/girlfriend-of-steel-re/001-scylla.png
Binary files differ
diff --git a/content/files/girlfriend-of-steel-re/002-ghidra.png b/content/files/girlfriend-of-steel-re/002-ghidra.png
index 581f0ba..706f6ac 100644
--- a/content/files/girlfriend-of-steel-re/002-ghidra.png
+++ b/content/files/girlfriend-of-steel-re/002-ghidra.png
Binary files differ
diff --git a/content/posts/girlfriend-of-steel-re.md b/content/posts/girlfriend-of-steel-re.md
index f02b56d..35db72b 100644
--- a/content/posts/girlfriend-of-steel-re.md
+++ b/content/posts/girlfriend-of-steel-re.md
@@ -4,6 +4,8 @@ date = 2026-04-22T20:30:53-05:00
draft = true
+++
+![weeb-header](/files/girlfriend-of-steel-re/000-weeb-header.jpg)
+
Last year, I started reverse enginering _Neon Genesis Evangelion: Girlfriend of Steel_ with the intention of writing a replacement engine that runs on modern computers.
I ended up losing interest, but not before cracking a few of the game data formats. I'm going to document them here, that way anyone who takes a similar
interest in restoration or modding can have a head start.
@@ -36,14 +38,16 @@ MD5: `536adbefc80a84378b65224fddf122e7` SHA-1: `77a03fb1823cb96189ac50b9afece893
## Getting around DRM
-Special edition is secured with SecuROM. It's completely busted, so you'll need to run the game in a Windows XP VM with 3D accleration. I used VMWare.
+Special edition is secured with [SafeDisc](https://en.wikipedia.org/wiki/SafeDisc). It's completely broken on modern Windows, so you'll need to use a virtual machine to run the game.
+I had good success with Windows XP in VMWare with 3D acceleration enabled.
-Once the game is running in the VM (lots of fiddling, unfortunately) the executable can be dumped with Scylla x86.
+Once the game is running in the VM (lots of fiddling, unfortunately) the executable can be dumped with [Scylla x86](https://x64dbg.com/).
To save you the headache, here's the dump: [mana01_dump.tar.gz](/files/girlfriend-of-steel-re/mana01_dump.tar.gz)
![001-scylla.png](/files/girlfriend-of-steel-re/001-scylla.png)
-Once dumped, throw it in your favorite reverse engineering tool. Here's a function that does something with script parsing:
+Although it doesn't run, the dump is a correct PE file.
+Ghidra is able to create proper data and code cross-references. Here's a function that parses script keywords:
![002-ghidra.png](/files/girlfriend-of-steel-re/002-ghidra.png)
diff --git a/hugo.toml b/hugo.toml
index c6c93e2..885e25b 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -8,4 +8,5 @@ theme = 'hugo-xmin'
[markup.highlight]
style = "github"
- noClasses = false \ No newline at end of file
+ noClasses = false
+ codeFences = true \ No newline at end of file
diff --git a/static/css/syntax.css b/static/css/syntax.css
new file mode 100644
index 0000000..6e26ed4
--- /dev/null
+++ b/static/css/syntax.css
@@ -0,0 +1,78 @@
+/* Generated using: hugo gen chromastyles --style=github */
+
+/* Background */ .bg { background-color:#f7f7f7; }
+/* PreWrapper */ .chroma { background-color:#f7f7f7;-webkit-text-size-adjust:none; }
+/* Error */ .chroma .err { color:#f6f8fa;background-color:#82071e }
+/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
+/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
+/* LineTable */ .chroma .lntable { border-spacing:0;padding:0;margin:0;border:0; }
+/* LineHighlight */ .chroma .hl { background-color:#dedede }
+/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
+/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
+/* Line */ .chroma .line { display:flex; }
+/* Keyword */ .chroma .k { color:#cf222e }
+/* KeywordConstant */ .chroma .kc { color:#cf222e }
+/* KeywordDeclaration */ .chroma .kd { color:#cf222e }
+/* KeywordNamespace */ .chroma .kn { color:#cf222e }
+/* KeywordPseudo */ .chroma .kp { color:#cf222e }
+/* KeywordReserved */ .chroma .kr { color:#cf222e }
+/* KeywordType */ .chroma .kt { color:#cf222e }
+/* NameAttribute */ .chroma .na { color:#1f2328 }
+/* NameClass */ .chroma .nc { color:#1f2328 }
+/* NameConstant */ .chroma .no { color:#0550ae }
+/* NameDecorator */ .chroma .nd { color:#0550ae }
+/* NameEntity */ .chroma .ni { color:#6639ba }
+/* NameLabel */ .chroma .nl { color:#900;font-weight:bold }
+/* NameNamespace */ .chroma .nn { color:#24292e }
+/* NameOther */ .chroma .nx { color:#1f2328 }
+/* NameTag */ .chroma .nt { color:#0550ae }
+/* NameBuiltin */ .chroma .nb { color:#6639ba }
+/* NameBuiltinPseudo */ .chroma .bp { color:#6a737d }
+/* NameVariable */ .chroma .nv { color:#953800 }
+/* NameVariableClass */ .chroma .vc { color:#953800 }
+/* NameVariableGlobal */ .chroma .vg { color:#953800 }
+/* NameVariableInstance */ .chroma .vi { color:#953800 }
+/* NameVariableMagic */ .chroma .vm { color:#953800 }
+/* NameFunction */ .chroma .nf { color:#6639ba }
+/* NameFunctionMagic */ .chroma .fm { color:#6639ba }
+/* LiteralString */ .chroma .s { color:#0a3069 }
+/* LiteralStringAffix */ .chroma .sa { color:#0a3069 }
+/* LiteralStringBacktick */ .chroma .sb { color:#0a3069 }
+/* LiteralStringChar */ .chroma .sc { color:#0a3069 }
+/* LiteralStringDelimiter */ .chroma .dl { color:#0a3069 }
+/* LiteralStringDoc */ .chroma .sd { color:#0a3069 }
+/* LiteralStringDouble */ .chroma .s2 { color:#0a3069 }
+/* LiteralStringEscape */ .chroma .se { color:#0a3069 }
+/* LiteralStringHeredoc */ .chroma .sh { color:#0a3069 }
+/* LiteralStringInterpol */ .chroma .si { color:#0a3069 }
+/* LiteralStringOther */ .chroma .sx { color:#0a3069 }
+/* LiteralStringRegex */ .chroma .sr { color:#0a3069 }
+/* LiteralStringSingle */ .chroma .s1 { color:#0a3069 }
+/* LiteralStringSymbol */ .chroma .ss { color:#032f62 }
+/* LiteralNumber */ .chroma .m { color:#0550ae }
+/* LiteralNumberBin */ .chroma .mb { color:#0550ae }
+/* LiteralNumberFloat */ .chroma .mf { color:#0550ae }
+/* LiteralNumberHex */ .chroma .mh { color:#0550ae }
+/* LiteralNumberInteger */ .chroma .mi { color:#0550ae }
+/* LiteralNumberIntegerLong */ .chroma .il { color:#0550ae }
+/* LiteralNumberOct */ .chroma .mo { color:#0550ae }
+/* Operator */ .chroma .o { color:#0550ae }
+/* OperatorWord */ .chroma .ow { color:#0550ae }
+/* Punctuation */ .chroma .p { color:#1f2328 }
+/* Comment */ .chroma .c { color:#57606a }
+/* CommentHashbang */ .chroma .ch { color:#57606a }
+/* CommentMultiline */ .chroma .cm { color:#57606a }
+/* CommentSingle */ .chroma .c1 { color:#57606a }
+/* CommentSpecial */ .chroma .cs { color:#57606a }
+/* CommentPreproc */ .chroma .cp { color:#57606a }
+/* CommentPreprocFile */ .chroma .cpf { color:#57606a }
+/* GenericDeleted */ .chroma .gd { color:#82071e;background-color:#ffebe9 }
+/* GenericEmph */ .chroma .ge { color:#1f2328 }
+/* GenericInserted */ .chroma .gi { color:#116329;background-color:#dafbe1 }
+/* GenericOutput */ .chroma .go { color:#1f2328 }
+/* GenericUnderline */ .chroma .gl { text-decoration:underline }
+/* TextWhitespace */ .chroma .w { color:#fff }
+
+/* Override background and border to match site theme */
+.chroma { background-color: #f0ede7 !important; }
+.highlight { border: 1px solid #555; }
diff --git a/themes/hugo-xmin/layouts/partials/header.html b/themes/hugo-xmin/layouts/partials/header.html
index 970ccec..c7ab268 100644
--- a/themes/hugo-xmin/layouts/partials/header.html
+++ b/themes/hugo-xmin/layouts/partials/header.html
@@ -6,6 +6,7 @@
<title>{{ .Title }} | {{ .Site.Title }}</title>
<link rel="stylesheet" href="{{ "css/style.css" | relURL }}" />
<link rel="stylesheet" href="{{ "css/fonts.css" | relURL }}" />
+ <link rel="stylesheet" href="{{ "css/syntax.css" | relURL }}" />
</head>
<body>