Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- gg.toast('Script compiler v3.7')
- -- https://gameguardian.net/forum/files/file/146-script-compiler/
- if gg.BUILD < 15386 then
- gg.alert('You are using an old version of GameGuardian. Some functions may not work, or work not as expected.')
- end
- local g = {}
- g.last = gg.getFile()
- g.info = nil
- g.config = gg.getFile():gsub('%lua$', '')..'cfg'
- g.data = loadfile(g.config)
- if g.data ~= nil then
- g.info = g.data()
- g.data = nil
- end
- if g.info == nil then
- g.info = {g.last, g.last:gsub('/[^/]+$', ''), nil}
- end
- if g.info[3] == nil then g.info[3] = gg.VERSION end
- if g.info[4] == nil then g.info[4] = 400 end
- while true do
- g.info = gg.prompt({'Select script/assemble file:', 'Select writable path for output:',
- 'Use GameGuardian version:', 'Min size for log call "load"'}, g.info, {'file', 'path', 'text', 'number'})
- if g.info == nil then break end
- gg.saveVariable(g.info, g.config)
- gg.VERSION = g.info[3]
- gg.VERSION_INT = tonumber((gg.VERSION:gsub('%.[0-9]+', function (m)
- m = m:sub(2)
- if #m == 1 then m = '0'..m end
- return m
- end)))
- print('Use GameGuardian version: '..gg.VERSION..' ['..gg.VERSION_INT..']')
- g.last = g.info[1]
- g.test, g.err = loadfile(g.last)
- g.loaded = g.last
- if g.test == nil then
- if g.err == nill then g.err = 'Unknown error' end
- print(g.err)
- gg.alert('Failed load/assemble script: '..g.last..'\n\n'..g.err)
- else
- g.name = g.last:match('[^/]+$')
- g.pathes = {g.info[2]:gsub('/?$', '')..'/'..g.name, g.last, '/sdcard/'..g.name, gg.getFile():gsub('[^/]+$', '')..g.name, gg.EXT_FILES_DIR..'/'..g.name}
- g.file = nil
- g.out = ''
- g.try = ''
- for i, v in ipairs(g.pathes) do
- g.out = v..".tmp.lua"
- g.file = io.open(g.out, "w")
- if g.file ~= nil then
- g.last = v:gsub('%.lua$', '')
- break
- end
- g.try = g.try..' '..v
- end
- if g.file == nil then
- gg.alert('Failed write to file. Checked:'..g.try)
- else
- g.file:close()
- os.remove(g.out)
- g.sel = gg.choice({
- 'Compile with debug info (with remove garbage code)', -- 1
- 'Compile without debug info (with remove garbage code)', -- 2
- 'Disassemble', -- 3
- 'Log all GG calls and dump all data for call "load"', -- 4
- 'Log all GG calls', -- 5
- 'Dump all data for call "load"', -- 6
- 'Password cracker', -- 7
- 'Reassemble with remove garbage', -- 8
- })
- if g.sel == nil then break end
- g.warn = function() return gg.alert('Scripts in binary form may not work on other versions of GameGuardian', 'Agree', 'Disagree') end
- if g.sel == 1 or g.sel == 2 then
- if g.warn() ~= 1 then break end
- g.out = g.last..".bin.lua"
- g.file = io.open(g.out, "w")
- g.file:write(string.dump(g.test, g.sel == 2, true))
- g.file:close()
- gg.alert('The binary script is saved to the file:\n\n'..g.out)
- break
- elseif g.sel == 3 then
- g.out = g.last..".lasm"
- g.res = gg.internal2(g.test, g.out)
- if g.res then
- gg.alert('The disassemble of the script is saved to the file:\n\n'..g.out)
- break
- else
- gg.alert('An error occurred while disassembling the script:\n\n'..g.res)
- end
- elseif g.sel == 4 or g.sel == 5 or g.sel == 6 then
- if true then
- local ggg = {}
- for k, v in pairs(gg) do
- ggg[k] = v
- end
- local sel = select
- local typ = type
- local str = tostring
- local echo = print
- local io_open = io.open
- local tr = {}
- local slen = string.len
- local msg = ''
- local rnd = g.last..'_'..os.time()..'_'..math.random()
- if g.sel == 4 or g.sel == 6 then
- local load_cnt = 0
- local fname = rnd..'.load.tar'
- local min_size = tonumber(g.info[4])
- local sfmt = string.format
- local sbyte = string.byte
- local ssub = string.sub
- local tar_end = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- local f = nil
- local flen = 0
- local tar_put = function (content)
- if f == nil then
- f = io_open(fname, 'wb')
- f:setvbuf('no')
- end
- local size = slen(content)
- local checksum = 4684
- local s7 = sfmt('%07d', load_cnt)
- do
- local b1, b2, b3, b4, b5, b6, b7 = sbyte(s7, 1, 7)
- checksum = checksum + b1 + b2 + b3 + b4 + b5 + b6 + b7
- end
- local s11 = sfmt('%011o', size)
- do
- local b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11 = sbyte(s11, 1, 11)
- checksum = checksum + b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + b9 + b10 + b11
- end
- local hdr = "load_"..
- s7..
- ".lua\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000000666\x000000000\x000002004\x00"..
- s11..
- "\x0000000000000\x00"..
- sfmt('%06o', checksum)..
- "\x00 0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ustar00\x00root\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00sdcard_r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- --echo('Hooked load '..load_cnt..' with size of '..size..' bytes')
- load_cnt = load_cnt + 1
- if load_cnt ~= 1 then
- f:seek('set', flen)
- end
- if size < 512 then
- f:write(hdr..content..ssub(tar_end, 1, 512 - size)..tar_end)
- flen = flen + 1024
- else
- f:write(hdr):write(content)
- local pad = size % 512
- if pad > 0 then
- f:write(ssub(tar_end, 1, 512 - pad)..tar_end)
- flen = flen + 1024 + size - pad
- return
- end
- f:write(tar_end)
- flen = flen + 512 + size
- end
- end
- for i, v in pairs({load=1, loadfile=0, dofile=0}) do
- local orig = _G[i]
- local hook = 1
- local type = v
- hook = function (...)
- local content = ...
- if type == 0 and content ~= nil then
- local f = io_open(content, "rb")
- if f ~= nil then
- content = f:read("*a")
- f:close()
- else
- content = nil
- end
- end
- if content ~= nil then
- local ret = nil
- local total = 0
- local file = fname..load_cnt..'.lua'
- if type == 1 and typ(content) == 'function' then
- local cache = ''
- local func = function (...)
- local ret = content(...)
- if ret ~= nil then
- if ret ~= '' then
- cache = cache + ret
- total = total + slen(ret)
- end
- else
- if total ~= 0 and slen(content) >= min_size then
- tar_put(cache)
- end
- end
- return ret
- end
- ret = orig(func, sel(2, ...))
- else
- if content ~= '' and sle
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement