local GG52 = {['MOVE'] = 1, ['LOADK'] = 1, ['LOADKX'] = 1, ['LOADBOOL'] = 1, ['LOADNIL'] = 1, ['GETUPVAL'] = 1, ['GETTABUP'] = 1, ['GETTABLE'] = 1, ['SETTABUP'] = 1, ['SETUPVAL'] = 1, ['SETTABLE'] = 1, ['NEWTABLE'] = 1, ['SELF'] = 1, ['ADD'] = 1, ['SUB'] = 1, ['MUL'] = 1, ['DIV'] = 1, ['MOD'] = 1, ['POW'] = 1, ['UNM'] = 1, ['NOT'] = 1, ['LEN'] = 1, ['CONCAT'] = 1, ['JMP'] = 1, ['EQ'] = 1, ['LT'] = 1, ['LE'] = 1, ['TEST'] = 1, ['TESTSET'] = 1, ['CALL'] = 1, ['TAILCALL'] = 1, ['RETURN'] = 1, ['FORLOOP'] = 1, ['FORPREP'] = 1, ['TFORCALL'] = 1, ['TFORLOOP'] = 1, ['SETLIST'] = 1, ['CLOSURE'] = 1, ['VARARG'] = 1, ['EXTRAARG'] = 1, ['IDIV'] = 1, ['BNOT'] = 1, ['BAND'] = 1, ['BOR'] = 1, ['BXOR'] = 1, ['SHL'] = 1, ['SHR'] = 1} local function 洗牌(t) local n = #t for i = n, 2, -1 do local j = math.random(i) -- 生成 [1, i] 的随机整数 t[i], t[j] = t[j], t[i] -- 交换元素 end return t end Group=function(lasm) local lasmt = {} local pattern1 = "(;%s-.- %-%-%[=*%[ Lua assembler file generated by GameGuardian %d+%.%d+ %(%d+%))" local pattern2 = "(; %]%=+=%] gg%.require%('%d+%.%d+', %d+%))" local GGInfo = string.match(lasm,pattern1) -- GG虚拟机的头部 local GGTail = string.match(lasm,pattern2) -- GG虚拟机的尾部 local lasm = string.gsub(lasm,pattern2,"",1) repeat local lasms, info ,func = lasm:match('(.+)(\n[^\n]+%d+ upvalues, %d+ locals, %d+ constants, %d+ funcs)(.-)$') if not lasms then lasmt[#lasmt]['info'] = lasmt[#lasmt]['info'] break end lasm = lasms -- GG虚拟机的运行信息 local name,upvalues,locals,constants,funcs = string.match(info,"\n(.-); (%d+) upvalues, (%d+) locals, (%d+) constants, (%d+) funcs") if name == '' then name = "main" end local util = {} util['name'] = name -- 区块名称 util['upvalues'] = upvalues -- 区块上值数量 util['locals'] = locals -- 区块声明的局部变量的数量 util['maxstacksize'] = constants -- 区块使用的常量数量 util['funcs'] = funcs -- 区块子函数数量 util['info'] = info -- GG虚拟机的调试信息 util['source'], func = func:match('%.source%s*"([^\n]+)"(.+)') util['linedefined'], func = func:match('%.linedefined%s*(%d+)(.+)') util['linedefined'] = tonumber(util['linedefined']) util['lastlinedefined'], func = func:match('%.lastlinedefined%s*(%d+)(.+)') util['lastlinedefined'] = tonumber(util['lastlinedefined']) util['numparams'], func = func:match('%.numparams%s*(%d+)(.+)') util['numparams'] = tonumber(util['numparams']) util['is_vararg'], func = func:match('%.is_vararg%s*(%d+)(.+)') util['is_vararg'] = tonumber(util['is_vararg']) local s, func = func:match('%.maxstacksize%s*(%d+)(.+)') local p=tonumber(s) util['maxstacksize'] = p util['register'] = { ["Number"] = 0, } -- 寄存器使用情况 local t1, t2, t3 = {}, {}, {} for content in string.gmatch(func, '[^\n]+') do index = content:match('^%s*([^_%s]+)') if GG52[index] or index == ':goto' then if string.find(content, "v%d+") then for i in string.gmatch(content, "v(%d+)") do util['register'][tonumber(i)] = 1 end end t1[#t1+1], t3 = content, {}; elseif index == '.upval' then t2[#t2+1] = content else -- tail t3[#t3+1] = content end end util['instructions'] = t1 util['upval'] = t2 util['tail'] = t3 for i,v in pairs(util['register']) do if v == true then util['register']["Number"] = util['register']["Number"] + 1 end end lasmt[#lasmt+1] = util until false util = {} local len=#lasmt for i=len,1,-1 do util[#util+1] = lasmt[i] end util['GGinfo'] = GGInfo util['GGtail'] = GGTail return util end Compile=function(Ast) local strss = {} for k,v in ipairs(Ast) do local register=#v['register']+3 local stack=register local JMP=10000000 local 指令存放={} local 指令参数=v['instructions'] local 总指令参数=#指令参数 local pc=0 local 混淆存放={} local 打乱表={} while pc~=总指令参数 do local v1=math.random(stack,240) local v2=math.random(stack,240) local v3=math.random(stack,240) local v1_1=math.random(1,100) local v2_1=math.random(1,100) local v3_1=math.random(1,100) pc=pc+1 JMP=JMP+10 local s={string.byte(指令参数[pc],1,-1)} if s[1]==69 and s[2]==81 then --EQ local 混淆存放={} if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nTFORLOOP v',v1,' :goto_',JMP+1}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+1}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+2}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+math.random(1,3)}) 混淆存放[#混淆存放+1]=指令参数[pc] 混淆存放[#混淆存放+1]=指令参数[pc+1] if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nTFORLOOP v',v2,' :goto_',JMP+3}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+3}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+1}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+math.random(1,3)}) 打乱表[#打乱表+1]=table.concat(混淆存放,'\n') if math.random(1,2)==1 then 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nTFORLOOP v',v3,' :goto_',JMP+2}) else 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+2}) end 指令存放[#指令存放+1]=table.concat({':goto_',JMP+3}) 指令存放[#指令存放+1]=table.concat({'EQ 0 v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+math.random(1,3)}) pc=pc+1 elseif s[1]==76 and s[2]==84 then --LT local 混淆存放={} if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nTFORLOOP v',v1,' :goto_',JMP+1}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+1}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+2}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+math.random(1,3)}) 混淆存放[#混淆存放+1]=指令参数[pc] 混淆存放[#混淆存放+1]=指令参数[pc+1] if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nTFORLOOP v',v2,' :goto_',JMP+3}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+3}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+1}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+math.random(1,3)}) 打乱表[#打乱表+1]=table.concat(混淆存放,'\n') if math.random(1,2)==1 then 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nTFORLOOP v',v3,' :goto_',JMP+2}) else 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+2}) end 指令存放[#指令存放+1]=table.concat({':goto_',JMP+3}) 指令存放[#指令存放+1]=table.concat({'EQ 0 v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+math.random(1,3)}) pc=pc+1 elseif s[1]==76 and s[2]==69 and s[3]~=78 then --LE local 混淆存放={} if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nTFORLOOP v',v1,' :goto_',JMP+1}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+1}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+2}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+math.random(1,3)}) 混淆存放[#混淆存放+1]=指令参数[pc] 混淆存放[#混淆存放+1]=指令参数[pc+1] if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nTFORLOOP v',v2,' :goto_',JMP+3}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+3}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+1}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+math.random(1,3)}) 打乱表[#打乱表+1]=table.concat(混淆存放,'\n') if math.random(1,2)==1 then 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nTFORLOOP v',v3,' :goto_',JMP+2}) else 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+2}) end 指令存放[#指令存放+1]=table.concat({':goto_',JMP+3}) 指令存放[#指令存放+1]=table.concat({'EQ 0 v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+math.random(1,3)}) pc=pc+1 elseif s[1]==84 and s[4]==84 then --TEST local 混淆存放={} if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nTFORLOOP v',v1,' :goto_',JMP+1}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+1}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+2}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+math.random(1,3)}) 混淆存放[#混淆存放+1]=指令参数[pc] 混淆存放[#混淆存放+1]=指令参数[pc+1] if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nTFORLOOP v',v2,' :goto_',JMP+3}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+3}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+1}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+math.random(1,3)}) 打乱表[#打乱表+1]=table.concat(混淆存放,'\n') if math.random(1,2)==1 then 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nTFORLOOP v',v3,' :goto_',JMP+2}) else 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+2}) end 指令存放[#指令存放+1]=table.concat({':goto_',JMP+3}) 指令存放[#指令存放+1]=table.concat({'EQ 0 v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+math.random(1,3)}) pc=pc+1 elseif s[1]==84 and s[7]==84 then --TESTSET local 混淆存放={} if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nTFORLOOP v',v1,' :goto_',JMP+1}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+1}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+2}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+math.random(1,3)}) 混淆存放[#混淆存放+1]=指令参数[pc] 混淆存放[#混淆存放+1]=指令参数[pc+1] if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nTFORLOOP v',v2,' :goto_',JMP+3}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+3}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+1}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+math.random(1,3)}) 打乱表[#打乱表+1]=table.concat(混淆存放,'\n') if math.random(1,2)==1 then 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nTFORLOOP v',v3,' :goto_',JMP+2}) else 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+2}) end 指令存放[#指令存放+1]=table.concat({':goto_',JMP+3}) 指令存放[#指令存放+1]=table.concat({'EQ 0 v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+math.random(1,3)}) pc=pc+1 else local 混淆存放={} if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nTFORLOOP v',v1,' :goto_',JMP+4}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+4}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+5}) 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nEQ 0 v',v3+1,' ',v3_1~math.random(1,100),'\nJMP :goto_',JMP+6}) local s=指令参数[math.random(1,总指令参数)] while string.byte(s,1,1)==58 do s=指令参数[math.random(1,总指令参数)] end 混淆存放[#混淆存放+1]='LOADK v91 111' if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'TFORLOOP v',v2,' :goto_',JMP+6}) else 混淆存放[#混淆存放+1]=table.concat({'JMP :goto_',JMP+6}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+4}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+math.random(1,3)}) 打乱表[#打乱表+1]=table.concat(混淆存放,'\n') if math.random(1,2)==1 then 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nTFORLOOP v',v3,' :goto_',JMP+5}) else 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+5}) end 指令存放[#指令存放+1]=table.concat({':goto_',JMP+6}) 指令存放[#指令存放+1]=table.concat({'EQ 0 v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+math.random(1,3)}) --真实存放 local 混淆存放={} if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nTFORLOOP v',v1,' :goto_',JMP+1}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+1}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+2}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+math.random(1,3)}) 混淆存放[#混淆存放+1]=指令参数[pc] if math.random(1,2)==1 then 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nTFORLOOP v',v2,' :goto_',JMP+3}) else 混淆存放[#混淆存放+1]=table.concat({'LOADK v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+3}) end 混淆存放[#混淆存放+1]=table.concat({':goto_',JMP+1}) 混淆存放[#混淆存放+1]=table.concat({'EQ 0 v',v1+1,' ',v1_1,'\nJMP :goto_',JMP+math.random(1,3)}) 打乱表[#打乱表+1]=table.concat(混淆存放,'\n') if math.random(1,2)==1 then 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nTFORLOOP v',v3,' :goto_',JMP+2}) else 指令存放[#指令存放+1]=table.concat({'LOADK v',v3+1,' ',v3_1,'\nJMP :goto_',JMP+2}) end 指令存放[#指令存放+1]=table.concat({':goto_',JMP+3}) 指令存放[#指令存放+1]=table.concat({'EQ 0 v',v2+1,' ',v2_1,'\nJMP :goto_',JMP+math.random(1,3)}) end end strss[k]=table.concat({v['info'], '\n.source "',v['source'] ,'"' , '\n.linedefined ' ,v['linedefined'] , '\n.lastlinedefined ' ,v['lastlinedefined'] , '\n.numparams ' , v['numparams'] , '\n.is_vararg ' , v['is_vararg'] , '\n.maxstacksize ' ,250 , '\n\n' , table.concat(v['upval'],'\n') , '\n\n' , '\n',table.concat(洗牌(打乱表),'\n'),'\n',table.concat(指令存放,'\n'),'\nRETURN\n' , table.concat(v['tail'],'\n')}) end return table.concat({Ast["GGinfo"] , "\n" , table.concat(strss) , '\n' , Ast["GGtail"]} ) end local error = error -- 选择脚本文件 ht = gg.prompt({"选择脚本"}, {"/storage/emulated/0/"}, {"file"}) if not ht then return print("未选择脚本") end -- 获取选择的文件路径 local last = ht[1] -- 尝试加载脚本文件 local test, error = loadfile(last) if test == nil then -- 脚本加载失败,显示错误信息 gg.alert('脚本错误!\n\n╾╾╾╾╾⚠ 问 题 所 在 ⚠╾╾╾╾╾\n错误:\n'..error..'\n\n请修复问题之后再加密') -- 设置标志并调用主函数 lw = 1 Main() else local data = io.open(ht[1],"r"):read("*a") gg.alert('读取成功 现在开始加密.') time=os.clock() UI=[=[ ——————————————— 謊土加密 神仙旗下加密工具 [安全] [稳定] [有效] 加密作者:謊土 Q群:2167017272 TG频道:XJH96 加密时间:]=] .. os.date("%Y.%m.%d.%H.%M.%S") .. [=[ ["謊土收费版加密"] ["落魄古中寒风吹"] ["春秋蝉明少年归"] ["荡魂山处石人泪"] ["定先游走魔向北"] ["逆流河上万仙退"] ["爱情不敌坚持泪"] ["宿命天成命中败"] ["仙尊悔而我不悔"] ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⣿⣿⣿⣷ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣴⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣿⡄ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣏⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⣿⣿⣿⣿⣿⡟⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠙⠛⠛⠛⣿⣿⣿⣿⣿⣿⣿⠹⣷⡈⠻⠿⠋⠋⠀⠀⠶⠛⠛⠉⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡁ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣣⣴⣾⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⠉⠻⡟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⡏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⠿⠋⣰⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠔⠒⠂⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠀⠀⠀⠀⠀⠀⠀⢀⣠⠞⠋⠀⡀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⢸ ⠀⠀⠀⠀⠀⣠⡶⠋⠁⠀⠠⠊⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣀⡀⠀⠀⠀⠀⡇⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⢸ ⣤⣄⣀⣴⠛⠁⠀⠀⡀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣤⣤⣼⣷⣾⣿⣿⠹⣿⣿⣿⣿⣿⣿⡋⣿⠀⠀⠀⢸ ⣠⡾⠋⠈⠉⠉⠠⢊⣀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠉⠉⠉⠹⡏⣿⠇⠀⠀⠉⠛⠛⠿⠿⠭⣿⡍⠀⠀⠀⠈ ⠁⣀⣀⣤⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠉⠁⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳ ⠿⠿⢛⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘ ⢄⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣾⣿⡿⠟⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀ ⣿⣿⣿⣿⣿⣿⠿⠛⠋⢉⣵⣿⣿⣿⣿⣿⣿⣿⣵⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣇⠀⠀⠀⠀⠀⠀⣠⣾⡟⣿⡀ ⣿⣿⣿⣿⡿⠃⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠏⠀⠀⠀⠀⠀⢸⣿⣿⡇⢸⣧ ⣿⢿⣿⡿⠁⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⡇⠘⠈⠄ ⢁⣾⣿⢁⣴⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⣴⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⡇ ⣼⣿⣿⣾⣿⣿⣿⣿⡿⢿⣿⣿⣯⣾⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠈⠛⢋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣧ ⣿⣿⣿⣿⡿⠟⢫⠏⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡀⠀ ⠀ --by.謊土 ]=] -- 配置参数 local numName = "numTab" -- 数值表名称 local encStrFunction = function(str) return "'" .. str .. "'" end -- 字符串加密函数 local defenHx = "\n" -- 换行符 local nextLine = "\n" -- 下一行 local process = function(msg, step) end -- 处理进度函数 -- 改进的数值处理逻辑 local numTab = {} -- 存储所有数值 local numTabT = {} -- 存储数值定义语句 -- 辅助函数:检查数值是否在表中 local function isInTab(value, tab) for i, v in ipairs(tab) do if v == value then return i end end return false end -- 使用边界检测的安全数值替换函数 local function safeNumberReplace(text) local code = text local Z_ = "([%(%{%[%-%+%%%*/%=%^~%s\n\r\t,;])" -- 左边界 local Y_ = "([%]%}%)%-%+%%%*/%=%^~%s\n\r\t,;])" -- 右边界 -- 数值模式(按优先级排序) local Ptab = { Z_ .. "(%d+%.%d+[Ee]%-?%d+)" .. Y_, -- 科学计数法 Z_ .. "(%d+%.%d+)" .. Y_, -- 浮点数 Z_ .. "(0[xX][A-Fa-f0-9]+)" .. Y_, -- 十六进制 Z_ .. "(%d+)" .. Y_ -- 十进制整数 } for _, pattern in ipairs(Ptab) do local lastPos = 1 local newResult = {} while lastPos <= #code do local startPos, endPos = code:find(pattern, lastPos) if not startPos then table.insert(newResult, code:sub(lastPos)) break end -- 添加前面的文本 if startPos > lastPos then table.insert(newResult, code:sub(lastPos, startPos - 1)) end local fullMatch = code:sub(startPos, endPos) local x, ii, h = fullMatch:match(pattern) if x and ii and h then -- 检查是否在注释中 local beforeText = code:sub(1, startPos - 1) local inLineComment = false local inBlockComment = false -- 检测行注释 for commentStart in beforeText:gmatch("()%-%-") do local commentToNumber = code:sub(commentStart, startPos - 1) if not commentToNumber:match("[\r\n]") then inLineComment = true break end end -- 检测块注释 if beforeText:find("%-%-%[%[") then local blockStart = beforeText:find("%-%-%[%[") local blockEnd = code:find("%]%]", blockStart) if not blockEnd or blockEnd > startPos then inBlockComment = true end end -- 检查是否在字符串中 local singleQuotes = select(2, beforeText:gsub("'", "")) % 2 local doubleQuotes = select(2, beforeText:gsub('"', '')) % 2 local inString = singleQuotes == 1 or doubleQuotes == 1 -- 检查是否在函数定义中 local isInFunctionDefinition = beforeText:match("function%s+[%a_%u4e00-%u9fa5][%w_%u4e00-%u9fa5]*$") -- 检查是否在赋值语句左侧 local lineUpToNumber = code:sub(1, endPos) local isOnLeftSideOfAssignment = lineUpToNumber:match("[%a_%u4e00-%u9fa5][%w_%u4e00-%u9fa5]*%s*=%s*$") or lineUpToNumber:match("[%a_%u4e00-%u9fa5][%w_%u4e00-%u9fa5]*%[.-%]%s*=%s*$") -- 检查是否在数组或表结构中(避免嵌套替换) local isInArrayOrTable = false local surroundingText = code:sub(math.max(1, startPos - 50), math.min(#code, endPos + 50)) if surroundingText:match(numName .. "%[%s*" .. numName .. "%[") then isInArrayOrTable = true end if not inLineComment and not inBlockComment and not inString and not isInFunctionDefinition and not isOnLeftSideOfAssignment and not isInArrayOrTable then -- 处理十六进制验证 local mat = ii:match("0[xX](.+)") if mat then if (tonumber("0x" .. mat) == nil) then ii = "0" end end -- 查找或创建数值索引 local key = isInTab(ii, numTab) if not key then key = #numTab + 1 numTab[key] = ii numTabT[key] = numName .. "[" .. key .. "]=tonumber(" .. encStrFunction(ii) .. ")" end -- 构建替换文本 local replacement = x .. numName .. "[" .. key .. "]" .. h table.insert(newResult, replacement) if process then process("加密数值: " .. ii) end else table.insert(newResult, fullMatch) end else table.insert(newResult, fullMatch) end lastPos = endPos + 1 end code = table.concat(newResult) end return code end -- 保护注释的预处理 local function protectComments(content) -- 保护块注释 local protected = {} local lastPos = 1 local blockCommentCount = 0 while true do local startPos = content:find("%-%-%[%[", lastPos) if not startPos then break end local endPos = content:find("%]%]", startPos + 4) if not endPos then break end -- 添加注释前的文本 table.insert(protected, content:sub(lastPos, startPos - 1)) -- 保护整个块注释 local comment = content:sub(startPos, endPos + 1) local placeholder = "##BLOCK_COMMENT_" .. blockCommentCount .. "##" table.insert(protected, placeholder) -- 存储被保护的注释 protected[placeholder] = comment lastPos = endPos + 2 blockCommentCount = blockCommentCount + 1 end -- 添加剩余文本 table.insert(protected, content:sub(lastPos)) local result = table.concat(protected) return result, protected end -- 恢复被保护的注释 local function restoreComments(content, protectedTable) for key, comment in pairs(protectedTable) do if type(key) == "string" and key:match("^##BLOCK_COMMENT_%d+##$") then content = content:gsub(key, comment, 1) end end return content end -- 更智能的处理:先分离注释,再处理数值 local function processNumbers() -- 保护注释 local protectedData, protectedTable = protectComments(data) local lines = {} for line in protectedData:gmatch("[^\r\n]+") do table.insert(lines, line) end local newData = {} for i, line in ipairs(lines) do -- 跳过已经被保护的块注释 if line:match("^##BLOCK_COMMENT_%d+##") then table.insert(newData, line) else -- 分离代码和行注释 local codePart, commentPart = line:match("^(.-)(%-%-[^%[].*)$") if not codePart then codePart = line commentPart = "" end local processedCode = codePart -- 只对代码部分进行数值替换 if codePart ~= "" and not codePart:match("^##BLOCK_COMMENT_%d+##") then -- 跳过函数定义行 if not codePart:match("^%s*function") then -- 跳过赋值语句的左侧 if not codePart:match("^%s*[%a_%u4e00-%u9fa5][%w_%u4e00-%u9fa5]*%s*=") and not codePart:match("^%s*[%a_%u4e00-%u9fa5][%w_%u4e00-%u9fa5]*%[.-%]%s*=") then processedCode = safeNumberReplace(codePart) else end else end end -- 重新组合代码和注释 local newLine = processedCode .. commentPart table.insert(newData, newLine) end end data = table.concat(newData, "\n") -- 恢复被保护的注释 data = restoreComments(data, protectedTable) end -- 执行数值处理 processNumbers() -- 生成数值定义(关键修复:确保numTab表被正确初始化) if #numTabT > 0 then -- 确保numTabT中的所有索引都是连续的 local sortedNumTabT = {} for i = 1, #numTabT do if numTabT[i] then table.insert(sortedNumTabT, numTabT[i]) end end local NUMDY = "local " .. numName .. "={}" .. defenHx .. table.concat(sortedNumTabT, defenHx) .. nextLine data = NUMDY .. data -- 调试信息:显示生成的数值定义 for i = 1, math.min(5, #sortedNumTabT) do end else end g={} To_16=function(txt) local sp=string.format("%x",txt) if #sp==1 then sp="0"..sp end return "\\x"..sp end local I_love_you=520 local Ones_whole_life=1314 local Unknown_boundary=128 local Unknown_vertex=Unknown_boundary*2 _Table_Key=function(content) local Table_Key={} local _length=#content for _Ergodic_growth = 1,_length do local rule = false local Ergodic_growth=_Ergodic_growth~_length~I_love_you~Ones_whole_life if(rule==false)then Table_Key[#Table_Key+1]=bit32.bxor((_length~_Ergodic_growth),(_length+_Ergodic_growth*Ergodic_growth))~(Unknown_boundary*_length) rule=(true or false) elseif(rule==true)then Table_Key[#Table_Key+1]=bit32.bxor((_length*( _Ergodic_growth+Ergodic_growth)),(_length~_Ergodic_growth))~(Unknown_vertex*_length) rule=(false or true) end end return(Table_Key) end __Table_Key={} STR={} KEY=math.random(1,20) Str={} function NZF_Str(str) str = string.gsub(str, "\\t", "\t"):gsub("\\n", "\n"):gsub("\\34", "\34"):gsub("\\39", "\39") local ascll={str:byte(1,-1)} local Ascll={} key=(math.random(1,255)) __Table_Key[#__Table_Key+1]=To_16(key) ___Table_Key=#__Table_Key Key=_Table_Key(str) for index,value in ipairs(ascll) do value=(value~(key~KEY)) value=value+Key[index]-Key[1] value=value-(Key[index]-Key[#Key])*Key[1] value=value+(I_love_you*Ones_whole_life) value=value%256 Ascll[#Ascll+1]=To_16(value) end Ascll='"'..table.concat(Ascll)..'"' _name_number=math.random(1,1000000) while(true)do if Str[_name_number] then _name_number=math.random((_name_number+1),1000000) else break end end x1=math.random(1,5000) x2=math.random(5000,10000) x3=math.random(5000,10000) x4=math.random(1,5000) if ___x==true then Table_number=[=[(function() if(]=]..x1..[=[>]=]..x2..[=[)then elseif(]=]..x3..[=[>]=]..x4..[=[)then return(]=].._name_number..[=[) end end)()]=] else Table_number=[=[(function() return(]=].._name_number..[=[) end)()]=] end name="STR["..Table_number.."]" STR[#STR+1]=name.."=(function() return {"..Ascll.."} end)" return '(NZFDec(STR[(function() return('.._name_number..') end)()](),'..___Table_Key..'))' end Decryption_algorithm=[=[ local NZFDec=function(content,__Table_Key) local content=content[1] local index,value local KEY=Byte(Tab_key,__Table_Key,__Table_Key) local Key=_Table_Key(Len(content)) local Extraction='' local tab={Byte(content,numerical_value_1,#content)} for index,value in Ipairs(tab)do value=value-(I_love_you*Ones_whole_life) value=value+(Key[index]-Key[#Key])*Key[1] value=value-Key[index]+Key[1] value=(value~(KEY~Table_Char[']=]..To_16(KEY)..[=['])) value=(value)%(Unknown_vertex+numerical_value_1) Extraction=Extraction..Char(value) end return(Extraction) end ]=] decode=[=[ local Table_Char={} for x=0,255 do Table_Char[x]=string.char(x) Table_Char[Table_Char[x]]=x end string.char=function(...) local Char,res={...},"" for i,k in pairs(Char) do res=res..Table_Char[k] end return(res) end local Char,Ipairs,Byte,Len,Bxor,Concat=string.char,ipairs,string.byte,string.len,bit32.bxor,table.concat local numerical_value_1=Table_Char["\1"] local I_love_you=Table_Char["\52"]*Table_Char["\10"] local Ones_whole_life=Table_Char["\100"]*Table_Char["\13"]+Table_Char["\14"] local Unknown_boundary=Table_Char["\128"] local Unknown_vertex=Table_Char["\255"] local _Table_Key=function(_length) local Table_Key={} for _Ergodic_growth = numerical_value_1,_length do local rule = false local Ergodic_growth=_Ergodic_growth~_length~I_love_you~Ones_whole_life if(rule==false)then Table_Key[#Table_Key+numerical_value_1]=Bxor((_length~_Ergodic_growth),(_length+_Ergodic_growth*Ergodic_growth))~(Unknown_boundary*_length) rule=(true or false) elseif(rule==true)then Table_Key[#Table_Key+numerical_value_1]=Bxor((_length*( _Ergodic_growth+Ergodic_growth)),(_length~_Ergodic_growth))~(Unknown_vertex*_length) rule=(false or true) end end return(Table_Key) end local Added_value=numerical_value_1 ]=]..Decryption_algorithm..[=[ ]=] local Min_num = function(...) local arm = {...} local num = nil for i, v in pairs(arm) do if v ~= nil then if not num then num = v elseif num > v then num = v end end end return num end StrEnc=function(data) local gr = {} repeat local s1, ss1, x1, xx1, n1, n2, str s1 = string.find(data, "\034") ss1 = string.find(data, "\039") x1 = string.find(data, "%[[=]*%[") xx1 = string.find(data, "%-%-") str = Min_num(s1, ss1, x1, xx1) if str == nil then break end if str == s1 then data = data:gsub("(.-)(\034.-\034)",function(t1, t2) gr[#gr + 1] = t1 t2 = string.gsub(t2, "\\\\","\\092") t2 = string.gsub(t2, "\\\034", "\\034") if t2:sub(-1, -1) ~= "\034" then return t2 end t3 = load("return "..t2) if not t3 then gg.alert("\034加密失败\n"..t2) os.exit() end gr[#gr + 1] = NZF_Str(t3(),true) return "" end, 1) elseif str == ss1 then data = data:gsub("(.-)(\039.-\039)",function(t1, t2) gr[#gr + 1] = t1 t2 = string.gsub(t2, "\\\\","\\092") t2 = string.gsub(t2, "\\\039", "\\039") if t2:sub(-1, -1) ~= "\039" then return t2 end t3 = load("return "..t2) if not t3 then gg.alert("\039加密失败\n"..t2) os.exit() end gr[#gr + 1] = NZF_Str(t3(),true) return "" end, 1) elseif str == x1 then local g1 = string.match(data,"%[([=]*)%[") data=data:gsub("(.-)(%["..g1.."%[.-%]"..g1.."%])",function(t1, t2) gr[#gr + 1] = t1 t3 = load("return "..t2) if not t3 then gg.alert("[[加密失败\n"..t2) os.exit() end gr[#gr + 1] = NZF_Str(t3(),true) return "" end, 1) elseif str == xx1 then d1, d2, d3, d4 = string.find(data, "%-%-(%[([=]*)%[)") if d1 == xx1 then data = string.gsub(data, "(.-)%-%-%[" .. d4 .. "%[.-%]" .. d4 .. "%]", function(txt1) gr[#gr + 1] = txt1 return " " end, 1) else data = string.gsub(data, "(.-)%-%-[^\n]*", function(txt1) gr[#gr + 1] = txt1 return "" end, 1) end else break end until not str gr[#gr+1]=data gr = table.concat(gr):gsub("return%s+end","return 0\nend") gr = gr:gsub("%-%-%[%[.-%]%]",""):gsub("%-%-[^\n]+", "") return gr end FY=[=[ --log防御 local Rep_=string.rep(" ",100000) local Tab_={} for k=1,1024 do Tab_[k]=Rep_ end Rep_=nil for kk, vv in pairs({ _ENV["gg"]["searchNumber"], _ENV["gg"]["editAll"], _ENV["gg"]["searchAddress"], _ENV["gg"]["startFuzzy"], _ENV["gg"]["searchFuzzy"], _ENV["gg"]["refineNumber"], _ENV["gg"]["refineAddress"], _ENV["gg"]["startFuzzy"] }) do pcall(vv,Tab_) end ]=] data=FY.."\n\n"..data data = StrEnc(data) data="\nlocal Tab_key='"..table.concat(__Table_Key).."'\nlocal STR={}\n"..table.concat(STR,"\n")..decode..data data="(function(...)\nlocal main=(function(...)\n"..data.."\nend)(_ENV)\nend)([===["..UI.."]===])" data=string.dump(load(data),true) path="/storage/emulated/0/lasm" local res = gg.internal2(load(data), path) if not res then print("错误! 脚本可能出错,请用不带编译的版本进行查错") end data = io.open(path,"r"):read("*a") data=string.gsub(data,"(%.upval%s+[uv]%d+)%s+nil",function(a,b) local p={} for i=1,math.random(4,8) do p[i]=table.concat({"\\",math.random(0,255)}) end return table.concat({a,' "',table.concat(p),'"'}) end) data=string.gsub(data,"\n%s+",'\n') local script = Group(data) data = Compile(script) data=string.dump(load(data)) function strenc(str) local t = {string.byte(str, 1, -1)} for i = 1, #t do t[i] = string.format('\\x%02x', t[i]) end return '"' .. table.concat(t) .. '"' end data = strenc ( data ) --转16进制 data=[[ gg_getFile=gg.getFile _ENV["l".."o".."a".."d"](]]..data..[[)()]] data = string.dump(load(data), true) logo=[=[ —————————————— [謊土加密] 神仙旗下加密工具 加密作者:謊土 Q群:2167017272 TG频道:XJH96 加密时间:]=] .. os.date("%Y.%m.%d.%H.%M.%S") .. [=[ [ 謊土加密收费版 *-*-*-*-*-*-*-*-*-* [安全] [稳定] [有效] ] ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⣿⣿⣿⣷ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣴⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣿⡄ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣏⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⣿⣿⣿⣿⣿⡟⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠙⠛⠛⠛⣿⣿⣿⣿⣿⣿⣿⠹⣷⡈⠻⠿⠋⠋⠀⠀⠶⠛⠛⠉⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡁ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣣⣴⣾⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⠉⠻⡟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⡏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⠿⠋⣰⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠔⠒⠂⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠀⠀⠀⠀⠀⠀⠀⢀⣠⠞⠋⠀⡀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⢸ ⠀⠀⠀⠀⠀⣠⡶⠋⠁⠀⠠⠊⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣀⡀⠀⠀⠀⠀⡇⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⢸ ⣤⣄⣀⣴⠛⠁⠀⠀⡀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣤⣤⣼⣷⣾⣿⣿⠹⣿⣿⣿⣿⣿⣿⡋⣿⠀⠀⠀⢸ ⣠⡾⠋⠈⠉⠉⠠⢊⣀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠉⠉⠉⠹⡏⣿⠇⠀⠀⠉⠛⠛⠿⠿⠭⣿⡍⠀⠀⠀⠈ ⠁⣀⣀⣤⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠉⠁⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳ ⠿⠿⢛⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘ ⢄⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣾⣿⡿⠟⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀ ⣿⣿⣿⣿⣿⣿⠿⠛⠋⢉⣵⣿⣿⣿⣿⣿⣿⣿⣵⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣇⠀⠀⠀⠀⠀⠀⣠⣾⡟⣿⡀ ⣿⣿⣿⣿⡿⠃⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠏⠀⠀⠀⠀⠀⢸⣿⣿⡇⢸⣧ ⣿⢿⣿⡿⠁⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⡇⠘⠈⠄ ⢁⣾⣿⢁⣴⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⣴⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⡇ ⣼⣿⣿⣾⣿⣿⣿⣿⡿⢿⣿⣿⣯⣾⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠈⠛⢋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣧ ⣿⣿⣿⣿⡿⠟⢫⠏⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡀⠀ ⠀ --by.謊土 ]=] time=os.clock()-time io.open(ht[1] .. "-[謊土加密收费版].lua", "w"):write(data..logo) gg.alert("加密完成.QQ交流群:2167017272\n耗时:"..time.."秒\n输出路径:"..ht[1].."-[謊土加密收费版].lua") gg.playMusic("stop") gg.alert('欢迎下次使用') end