do yall have a formal decompilation project people can contribute to

Reverse engineering and decompiling LEGO Island's main game binary (LEGO1.DLL)
Post Reply
itsmeft24
Posts: 2
Joined: Tue Dec 13, 2022 1:25 am

do yall have a formal decompilation project people can contribute to

Post by itsmeft24 »

title. is there an organized setup in place or yall just having fun with what stuff is interesting?
User avatar
MattKC
Site Admin
Posts: 323
Joined: Mon Aug 22, 2022 1:05 am
Contact:

Re: do yall have a formal decompilation project people can contribute to

Post by MattKC »

Unfortunately there isn't really a good answer for this. Over the years there have been attempts at a formal project (there was even one publicly viewable on GitHub for a bit), but all of them eventually stalled due to other obligations/lack of time. Currently we're just gradually filling in Ghidra/IDA databases and hoping to eventually springboard a decomp off of that.
itsmeft24
Posts: 2
Joined: Tue Dec 13, 2022 1:25 am

Re: do yall have a formal decompilation project people can contribute to

Post by itsmeft24 »

is there like a ghidra server that people can pop in and contribute what they can?
also does lego island export any symbols (prob not worth asking tho lol)
User avatar
MattKC
Site Admin
Posts: 323
Joined: Mon Aug 22, 2022 1:05 am
Contact:

Re: do yall have a formal decompilation project people can contribute to

Post by MattKC »

We have a Ghidra server for it, yes, though I'm not sure it's safe to open it to just anyone. AFAIK anyone with read/write access could completely torch it if they wanted to. Do you have any credentials/prior work?

There are a handful of exports between LEGO1.DLL and ISLE.EXE, but fairly limited stuff. No other debug symbols have been discovered on any release of the game.
maarten
Posts: 1
Joined: Sun Jun 11, 2023 3:36 am

Re: do yall have a formal decompilation project people can contribute to

Post by maarten »

In my re project, I tag every symbol with an address. This can be done with macros and/or comments. e.g.

Code: Select all

#define ISLE_VARIABLE(TYPE, NAME, ADDRESS)

int g_variable; ISLE_VARIABLE(int, g_variable, 0x1234567)
(it's also a must for my project since it hooks the original executable)

The string <-> name mapping can then be extracted using a (python) script.

A ghidra (python) script then does the following:
  1. Create a new Ghidra project and auto-analyze the program
  2. Create types by parsing .h headers from the re project. The project makes sure all types can be understood by ghidra's C parser.
  3. Use the dictionary mentioned above to tag global variables/functions.
This can also be done for IDA and others. That way you can compare the output of various decompilers.
The main disadvantage is that it doesn't transmit any tagging done inside a function.

url: https://github.com/madebr/rec2 (the work branch has more recent (untested) changes)
Post Reply