- C 40.2%
- Objective-C++ 24.3%
- Python 16.6%
- JavaScript 9.4%
- Objective-C 4.3%
- Other 5.2%
| .git-hooks-config | ||
| .githooks | ||
| docs | ||
| include | ||
| lol-html5 | ||
| notes | ||
| rizin/src | ||
| src | ||
| tools | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| configure.py | ||
| LoL.ipa | ||
| Makefile | ||
| objdiff.json | ||
| README.md | ||
Lords of Lightning iOS Tower Defense Decompilation
A byte-matching decompilation of the 2009 iOS tower-defense game Lords of Lightning. The target is an armv6 Mach-O iPhone OS executable built with Apple GCC 4.2.1.
Current progress: 202/254 functions at 100%.
What Is This
The goal is to reconstruct source that compiles to instruction-identical output against the original binary. Each function is compared with objdiff after the source is compiled with the bundled Apple GCC/xchain toolchain and converted into ELF objects for matching.
The project includes:
- Decompiled Objective-C++ source under
src/ - Original target slices under
build/target/aftermake split - Rizin pseudocode references under
rizin/src/ - Match notes under
notes/ - Static progress output under
docs/
Building
Prerequisites: Python 3, GNU Make, Bash, and common Unix command-line tools. The
compiler, SDK, assembler, and objdiff CLI are kept under tools/.
make split # One-time extraction of target function objects
make # Compile all source files and refresh objdiff.json
make report # Generate build/report.json
make progress # Build, report, and regenerate docs/index.html
For a compact match list:
tools/report.sh
tools/report.sh 80
Contributing
Pick an unmatched function from tools/report.sh, read the matching note in
notes/ if one exists, inspect source and pseudocode, then compare the compiled
function against the target. The workflow and codegen notes live in docs/.
Keep source natural: model the right types and layout instead of transcribing decompiler temporaries or using raw offsets.
Acknowledgments
- objdiff by encounter
- decomp.dev for the matching workflow inspiration