feat(profile): binana x64dbg-gen now generates a types file from C source headers

This commit is contained in:
phaneron 2024-07-17 01:37:26 -04:00
parent e3ec21ecec
commit 5d5630a6cb
19 changed files with 2961 additions and 354 deletions

121
README.md
View file

@ -1,56 +1,65 @@
# binana
This repository hosts some work related to studying the original game binaries.
You can use the information here to get a headstart when working on the [Whoa project](https://github.com/whoahq/whoa).
# Header files
To make reverse engineering easier, C header files matching the original memory layout are provided.
## Importing headers
To use these headers in Ghidra,
1. go to `File` > `Parse C Source...`.
2. Select `clib.prf` as your parse configuration, and clear all source files and input paths.
3. Add the header `<game version>/include/main.h` to the `Source files to parse` combo box.
4. Add the path to `<game version>/include` to the `Include paths` combo box.
5. press `Parse to Program`.
TODO: equivalent guide for IDA Pro.
## Maintaining headers
Headers should be restricted at all times to the C programming language only. C++ syntax will break type analysis.
To convert C++ namespaces, use double-underscores. For instance:
```cpp
void Name::Space::Thing();
```
should become:
```c
void Name__Space__Thing();
```
# Symbol files
Symbol files are text files that map function names and data labels to addresses.
In this repo, `script/compile-symbols` is used to concatenate our organized symbol files into one big file (`<game version>/symbol/main.sym`).
To import this file to your Ghidra project,
1. go to `Window` > `Script Manager`
2. In the table view, lookup `ImportSymbolsScript.py`
3. Run the script
4. Enter the path to `<game version>/symbol/main.sym`
To refresh the `main.sym` file after changing one of the constituent symbol files:
```bash
script/compile-symbols <game version>
```
# binana
This repository hosts some work related to studying the original game binaries.
You can use the information here to get a headstart when working on the [Whoa project](https://github.com/whoahq/whoa).
# Header files
To make reverse engineering easier, C header files to match the original executable's memory layout are provided.
# Symbol files
Symbol files are text files that map addresses to functions and variables/data labels.
In this repo, `script/compile-symbols` is used to concatenate our organized symbol files into one big file (`<game version>/symbol/main.sym`).
To refresh the gigantic `main.sym` file after changing one of the source symbol files:
```bash
script/compile-symbols <game version>
```
# Loading information into Ghidra
## Importing headers
To import the main header file into your Ghidra project,
1. go to `File` > `Parse C Source...`.
2. Select `clib.prf` as your parse configuration, and clear all source files and input paths.
3. Add the header `<game version>/include/main.h` to the `Source files to parse` combo box.
4. Add the path to `<game version>/include` to the `Include paths` combo box.
5. press `Parse to Program`.
If all goes well, Data Type Manager will now contain the data structures from the headers.
## Importing symbols
To import the symbol file into your Ghidra project,
1. go to `Window` > `Script Manager`
2. In the table view, lookup `ImportSymbolsScript.py`
3. Run the script
4. Enter the path to `<game version>/symbol/main.sym`
# Loading information into x64dbg (x32dbg)
For ease of debugging, we provide x64dbg databases (generated by the Go tool from symbol maps), as well as x64dbg type information (generated by the same Go tool from the C headers).
## Importing database
To load the database information into x64dbg:
1. Open x96dbg.exe or x32dbg.exe directly
2. Load your game binary
3. Go to `File` > `Database` > `Import database`
4. Navigate to <game version>/x32dbg/game.dd32`.
## Importing types
To load the type information JSON file:
1. Open the binary in x32dbg.exe
2. in the console, type: `LoadTypes <full path to local binana repository>\x32dbg\types.json`