Disassemble van LUA (LUAC) bestanden (Linux)

decompile

In dit voorbeeld neem ik de LUA bestanden op de Smile/Stretch van Plugwise, er staan een aantal LUA bestanden die gecomprimeerd zijn, dit kan om verschillende redenen gedaan zijn:
– Het maken van een self executable.
– Het sneller laden van de code.
– Het moeilijker maken om deze bestanden te ontcijferen.
Het merendeel is in de BIN folder te vinden, dus als “self-executing program”.

plugwise luac

Ps. op Windows kun je dit bestand NIET disassemblen (foutmelding met luac), dit kan te maken hebben met “endianess”? (niet duidelijk), dit verschilt per systeem/processor, meer informatie hier en hier te vinden.

Als ik dan in dit overzichtje kijk, zie ik dat het Linux systeempje op de Smile en Stretch BIG endian is, en Windows is LITTLE endian!


Target name, Platform, Architecture, Endianness, Developer(s), Known Issues/Notes
ramips, Ralink RT28xx/RT305X, MIPS, big, Kaloz, juhosg, blogic?, ramips?

Het decoderen moet dan op de Smile plaatsvinden, hiervoor gebruik je het LUAC programma:

plugwise luac screen 01

Je kan met de -l commando een “lijst” weergeven van de “assemble” code, en de -o gebruiken om naar een bestand weg te schrijven.
De commando hieronder zou moeten werken, maar dat gaat hem niet worden…ik vermoed dat de -o commando alleen voor het comprimeren is (en niet voor de -l (list) commando)

luac -l -o /tmp/decode.out /usr/bin/p1parser

PS. WERKT NIET!

Daarom gaan we een truukje uithalen om weg te schrijven via een “pipe” naar dd, dit werkt wel

luac -l /usr/bin/p1parser | dd of=/tmp/decode.out

De praktijk:

plugwise luac screen 02

Je kan met cat de inhoud weergeven: cat /tmp/decode.out

Of naar windows kopieren via pscp:

pscp.exe -pw [wachtwoord] -scp -r -p root@192.168.1.102:/tmp/decode.out C:\decode.out

Zo ziet een stukje van de assemble code eruit: