LUA Bytecode ontcijferen (LUAC)

lua logo

Lua file’s gebruikt van Smile v1.19 welke in leesbare Lua code zijn opgeslagen:
modules.lua: \usr\local\plugwise\rest-interface\modules\smartmeter\modules.lua
p1parse.lua: \usr\lib\lua\pwutil\p1\p1parse.lua
pwtree.lua: \usr\lib\lua\pwutil\xml\pwtree.lua

Header met Lua v5.2.x:
Versie informatie: Lua 5.2.x Copyright (C) 1994-2012 Lua.org, PUC-Rio
Commando voorbeeld: luac52.exe modules.lua
Header gevonden (magic number): 0x1B 0x4C 0x75 0x61 0x52 + 0x00 0x01 0x04 0x04 0x04 0x08
Zelfde bij p1parse.lua?: Ja
Zelfde bij pwtree.lua?: Ja

luac v5.2.x header

Header met Lua v5.1.x:
Versie informatie: Lua 5.1.x Copyright (C) 1994-2008 Lua.org, PUC-Rio
Commando voorbeeld: luac5.1.exe modules.lua
Header gevonden (magic number): 0x1B 0x4C 0x75 0x61 0x51 + 0x00 0x01 0x04 0x04 0x04 0x08
Zelfde bij p1parse.lua?: Ja
Zelfde bij pwtree.lua?: Ja

luac v5.1.x header

Header met Lua v5.0.x:
Versie informatie: Lua 5.0.x Copyright (C) 1994-2006 Tecgraf, PUC-Rio
Commando voorbeeld: luac50.exe modules.lua
Header gevonden (magic number): 0x1B 0x4C 0x75 0x61 0x50 + 0x00 0x01 0x04 0x04 0x04 0x08
Zelfde bij p1parse.lua?: Nee, foutmelding: luac50: p1parse.lua:9: unexpected symbol near ...'
Zelfde bij pwtree.lua?: Nee, foutmelding: luac50: pwtree.lua:122: unexpected symbol near
…’

luac v5.0.x header

Header met Lua v4.0.x:
Versie informatie: Lua 4.0.x Copyright (C) 1994-2000 TeCGraf, PUC-Rio
Commando voorbeeld: luac4.exe modules.lua
Bestanden van Plugwise konden niet door de compiler gehaald worden, foutmeldingen:

Ik heb een test bestand aangemaakt “test.lua” met wat simpele code, om toch de header te achterhalen:
Commando voorbeeld: luac.exe test.lua
Header gevonden (magic number): 0x1B 0x4C 0x75 0x61 0x40 + 0x00 0x01 0x04 0x04 0x04 0x08

luac v4.0.x header

Header met Lua v3.2.x:
Versie informatie: Lua 3.2.x Copyright (C) 1994-1999 TeCGraf, PUC-Rio
Bestanden van Plugwise konden niet door de compiler gehaald worden, foutmeldingen:

Ik heb een test bestand aangemaakt “test.lua” met wat simpele code, om toch de header te achterhalen:
Commando voorbeeld: luac.exe test.lua
Header gevonden (magic number): 0x1B 0x4C 0x75 0x61 0x32 + 0x00 0x01 0x04 0x04 0x04 0x08

luac v3.2.x header

Ps. Valt je wat op? de 5e byte geeft het versienummer aan (zie HEX code) van de Lua compiler!

Header blok van een Lua 5 binary chunk:

Met LUA kun je ook de “debug info strippen” om een gecomprimeerd bestand nog kleineer te maken, dit kan met de “-s” optie op de luac commandolijn, dus:

Het comprimeren van modules.lua: luac5.1.exe modules.lua

geeft luac.out, nu kun je de debug info strippen met: luac5.1.exe -s luac.out

Ik heb met 2 bestanden een vergelijking gedaan om te kijken of je in de header een gelijkwaardig verschil kan zien, en dat heb ik gevonden op de 13e byte, bij een normaal gecomprimeerde Lua code is deze 0x0D

lua strip debug info modules

Bij een gecomprimeerde Lua code, met gestripte debug info is deze NIET gelijk aan 0x0D

lua strip debug info p1parse