luaæºæ件--obfuscate-->luaæºæ件(æ··æ·å)--compile-->luacæ件(带è°è¯ç¨çåéååè¡å·)--strip-->luacæ件(ä¸å¸¦è°è¯ä¿¡æ¯)
lua/luac--å å¯/æå
-->æ°æ®æ件
æ°æ®æ件--解å
/解å¯-->lua/luac-->luaèææº
1. è·è¸ªï¼è±å£³ï¼è§£å
ï¼è§£å¯ï¼è·å¾ luac
追 luaL_loadbuffer luaL_loadfile lua_load åºè¯¥å¯ä»¥æ¾å° 解å¯å½æ°ã
hook è¿3个å½æ°ï¼å¯¼åºè§£å¯åçæ°æ®ï¼ç´æ¥å°±æ¯ luac æ件ãå¦æ没ç¼è¯çè³æ¯ luaæºæ件ã
hook luaV_execute å¯ä»¥æ¿å° Proto* ï¼æ³åæ³ç¨ luaU_dump 导åºãluaD_precall åºè¯¥æ²¡å¿
è¦æã
2. éæ å luac å¤ç
æ们æ两ç§æ¹æ¡æ¥å¤çå¾å°ç luac
1. å¾å°ä¸ä¸ªè½å¤æ§è¡ä¸è¿°éæ luac ç lua çæ¬
ææ¸
æ¥ç¼è¯æ¹å¼ï¼æ¹ lua æºæ件ï¼ç¼è¯åºä¸ä¸ªï¼è¿æ ·åä»ä¹é½å¯ä»¥ï¼è¿è½ç¼è¯åºå¯¹åºç luadec ã
å¦æè½æ¾å° lua51.dll ä¹ç±»çå°±ç´æ¥è°ç¨å§ãä½æ¯ï¼åªè½ç¨äºå¯¼åº luac 对æ¯æä»¶æ ¼å¼ï¼æè
æ§è¡æ¾å°çå 个å
³é®å½æ°ã
2. å°éæ luac 转æ¢ææ åæ ¼å¼ luacï¼æ£æè°ï¼å±±ä¸æ¥å°±æï¼æ便å»å°±å±±
éæ å luac æ¯æä¹åçï¼
1. bad header æ¹æ件头
#define LUA_SIGNATURE "\033Lua" // lua.h
2. bad header æ¹æ°æ®ç±»å
// luaconf.h
#define LUA_NUMBER_DOUBLE
#define LUA_NUMBER double
LUA_NUMBER to float
LUA_NUMBER_SCAN to "%f"
LUA_NUMBER_FMT to "%.7g"
l_mathop(x) to (x##f)
lua_str2number to use strtof
3. bad code OpCode éå®ä¹
// æ¹æ "ORDER OP" çå°æ¹
/* grep "ORDER OP" if you change these enums */
enum OpCode; // lopcodes.h
const lu_byte luaP_opmodes[]; // lopcodes.c
const char *const luaP_opnames[]; // lopcodes.c
http://lua-users.org/wiki/CnumberPatchçæä¸ä¸ªè¢«ç ´è§£ç¨åºå¯ä»¥æ§è¡ç luac æ件ç¨äºå¯¹æ¯ï¼åææ ¼å¼
æ³åæ³æ§è¡ä¸é¢ç代ç ï¼ç¼è¯ allopcodes.lua 并导åºï¼ ä¸æ å lua ç¼è¯ç¸åæºæ件çæçè¿è¡å¯¹æ¯ã
1. å¨ C å
导åº
lua_State* L = luaL_newstate();
luaL_loadbuffer or luaL_loadstring or luaL_loadfile
Closure* c=(Closure*)lua_topointer(L, -1);
Proto* f = c->l.p;//Closureå¦ææ¹äºå移ä¼ä¸å
luaU_dump(L, f, writer, D, 0);//é导åºå½æ°
lua_close(L);
2. ç¨ lua 导åºå°æ件æè
string
lua_State* L = luaL_newstate();
luaopen_string(L);
luaopen_io(L);
luaL_dostring or luaL_dofile
char* str = lua_tostring(L, -1);
lua_close(L);
-- luaopen_string æ¤åºå¿
é¡»æå¼
allopcodes() allopcodes.luaæ件å
容 end
chunk = string.dump(allopcodes)
if luaopen_io then --å¦æ io å¯ç¨ï¼åå¯ä»¥ç´æ¥åæ件
file:write(chunk)
else
output(chunk,to_any_where) --æ³åæ³æ chunk æåºæ¥
return chunk
end
3. åèç åæ±ç¼ï¼é
读
4. åç¼è¯
5. äºè¿å¶ç¼è¾ï¼ä¿®æ¹æ令ï¼æ¿æ¢å½æ°