LUA Bytecode ontcijferen (LUAC)
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
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
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
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:
1 2 3 4 5 6 7 8 9 10 11 |
luac4.exe pwtree.lua luac: cannot access a variable in outer scope; last token read: `pairs' at line 49 in file `pwtree.lua' luac4.exe modules.lua luac: function arguments expected; last token read: `.' at line 2 in file `modules.lua' luac4.exe p1parse.lua luac: <expression> expected; last token read: `...' at line 9 in file `p1parse.lua' |
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
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:
1 2 3 4 5 6 7 8 9 10 11 |
luac.exe pwtree.lua luac: `=' expected; last token read: `key' at line 49 in file `pwtree.lua' luac.exe modules.lua luac: function arguments expected; last token read: `.' at line 2 in file `modules.lua' luac.exe p1parse.lua luac: <expression> expected; last token read: `...' at line 9 in file `p1parse.lua' |
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
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Default values shown are for a 32-bit little-endian platform with IEEE 754 doubles as the number format. The header size is always 12 bytes. 4 bytes Header signature: ESC, “Lua” or 0x1B4C7561 • Binary chunk is recognized by checking for this signature 1 byte Version number, 0x51 (81 decimal) for Lua 5.1 • High hex digit is major version number • Low hex digit is minor version number 1 byte Format version, 0=official version 1 byte Endianness flag (default 1) • 0=big endian, 1=little endian 1 byte Size of int (in bytes) (default 4) 1 byte Size of size_t (in bytes) (default 4) 1 byte Size of Instruction (in bytes) (default 4) 1 byte Size of lua_Number (in bytes) (default 8) 1 byte Integral flag (default 0) • 0=floating-point, 1=integral number type On an x86 platform, the default header bytes will be (in hex): 1B4C7561 51000104 04040800 |
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
Bij een gecomprimeerde Lua code, met gestripte debug info is deze NIET gelijk aan 0x0D
[#/pdf/luabytecodeontcijferen” ]