From f7e586e6533974489503538ac140a7ce5608ecb7 Mon Sep 17 00:00:00 2001 From: Hunter Kvalevog Date: Sat, 25 Apr 2026 14:40:13 -0500 Subject: --- .../girlfriend-of-steel-re/000-weeb-header.jpg | Bin 0 -> 1084194 bytes .../files/girlfriend-of-steel-re/001-scylla.png | Bin 601912 -> 595758 bytes .../files/girlfriend-of-steel-re/002-ghidra.png | Bin 214749 -> 321993 bytes content/posts/girlfriend-of-steel-re.md | 10 ++- hugo.toml | 3 +- static/css/syntax.css | 78 +++++++++++++++++++++ themes/hugo-xmin/layouts/partials/header.html | 1 + 7 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 content/files/girlfriend-of-steel-re/000-weeb-header.jpg create mode 100644 static/css/syntax.css 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 Binary files /dev/null and b/content/files/girlfriend-of-steel-re/000-weeb-header.jpg 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 Binary files a/content/files/girlfriend-of-steel-re/001-scylla.png and b/content/files/girlfriend-of-steel-re/001-scylla.png 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 Binary files a/content/files/girlfriend-of-steel-re/002-ghidra.png and b/content/files/girlfriend-of-steel-re/002-ghidra.png 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 }} | {{ .Site.Title }} + -- cgit v1.2.3