--慢慢来吧后期优化 loadYunLuaGroup("5C3C4E3813681C4C204C35346F1B4C2F7EFF612D2B2217611F600846174E5B1D7CA5FE5417501E") lmttkx="360dp" ---初始宽度 lmttk="250dp" ---初始高度 stitle='缘为冰到此一游' lefttopicon='https://mpimg.cn/down.php/0f0107d8b786ce61cee505d9fe588ba7.png' beijicon='https://wp.kayyw.com/f/6ZjkTM/17617119736170.webp' xfcpic='https://mpimg.cn/down.php/0f0107d8b786ce61cee505d9fe588ba7.png' stab={ "主页", "防封", "音乐", "设置", } LMmenu({ {--1 LMbutton( '选择进程', function() gg.setProcessX() end), },{--2 LMbutton( '选择进程', function() gg.setProcessX() gg.alert('选择进程') end), LMbox({'防检测区', LMbutton('logo防闪', function() function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address print(string.char(231,190,164,58).._Q) end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end local t = {'libanogs.so:bss', 'Cb'} local tt = {0x300} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) local t = {'libanogs.so:bss', 'Cb'} local tt = {0x3F8} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) local t = {'libanogs.so:bss', 'Cb'} local tt = {0x430} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) local t = {'libanogs.so:bss', 'Cb'} local tt = {0x550} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) local t = {'libanogs.so:bss', 'Cb'} local tt = {0x5D8} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) string.toMusic("开启成功") end), LMbutton('logo防检测', function() local function findExecutableSegment(lib) local ranges=gg.getRangesList(lib) for _,v in ipairs(ranges) do if v.type:find("-x") then return v.start end end return nil end local function readValue(address,flags) return gg.getValues({[1]={address=address,flags=flags}})[1].value end local function writeValue(address,flags,value,freeze) local item={address=address,flags=flags,value=value,freeze=freeze} if freeze then gg.addListItems({item}) else gg.setValues({item}) end end function setvalue(address,flags,value,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value tt[1].freeze=freeze if freeze==false then gg.setValues(tt) end gg.addListItems(tt) end function getvalue(address,flags,value,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags gg.addListItems(tt) end function autovalue(address,flags,_o,_v,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].freeze=freeze local _v_ = gg.getValues(tt)[1].value if math.abs(_v_-_o) < 1e-7 then tt[1].value=_v else tt[1].value=_o end if freeze==false then gg.setValues(tt) end gg.addListItems(tt) end function readD(address) return gg.getValues({{address = address, flags = 4}})[1].value end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end local _S = gg.getRangesList(N_So[1])[1] if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF else S[_].value = S[_].value & 0xFFFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address end return _S end local ttt = Get_Address(t_So, t_Offset, _bit) if ttt ~= nil then local _A = string.format('0x%X', ttt) return _A end return 0 end local t = {"libanogs.so"} --VM local tt = {0x213F88}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", false) local tt = {0x2142E0}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", false) local tt = {0x1DEFF0}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", false) local tt = {0x21AFA0}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", false) --crc32 local tt = {0x49AA48}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 LDRB W9, [X0]", false) local tt = {0x2AF7E4 }local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 LDRB W8, [X0]", false) local tt = {0x39F62C }local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 MOV W9, wzr", false) --结束vm虚拟机进程 --local tt = {0x3AFF1C}local ttt = S_Pointer(t,tt,true) --setvalue(ttt,4, "~A8 NOP", false) --下发mrpcs local tt = {0x21AFF4}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", false) --gettingtimeoffday local tt = {0x51FA80}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", false) --196864 local t = {"libanogs.so:bss", "Cb"} local tt = {0xA098,0x8} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 65536, freeze = true}}) local tt = {0xA098,0xC} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 65537, freeze = true}}) string.toMusic("开启成功") end), LMbutton('logo过注入', function() function setvalue(a,b,c,d)if type(a)=="number"and type(b)=="number"then gg.setValues({{address=a,flags=b,value=c}})else local t={}for i=1,#b do t[i]={address=a+b[i],flags=c,value=type(d)=="table"and d[i]or d}end gg.setValues(t)end end setv=setvalue function S_Pointer(s,o,b)for i,v in ipairs(gg.getRangesList(s[1]))do if v.state==s[2]then a=v.start+o[1]for i=2,#o do a=gg.getValues({{address=a,flags=b and 32 or 4}})[1].value+o[i]end return string.format('0x%X',a)end end end function so(n)return gg.getRangesList(n)[1].start end function freeze(a,b,c,d)setvalue(a,b,c,d)local t={}for i=1,#b do t[i]={address=a+b[i],flags=c,value=type(d)=="table"and d[i]or d,freeze=true}end gg.addListItems(t)end function toAddr(v) if v == nil then return 0 end if type(v) == "number" then return v end v = tostring(v) if v:sub(1, 2) == "0x" or v:sub(1, 2) == "0X" then return tonumber(v:sub(3), 16) or 0 end return tonumber(v) or 0 end function getModuleBase(name, index) local ranges = gg.getRangesList(name) index = index or 1 if ranges == nil or ranges[index] == nil then return 0 end return ranges[index].start end function readValue(address, flags) if address == nil or address == 0 then return 0 end local r = gg.getValues({ { address = address, flags = flags } }) if r == nil or r[1] == nil then return 0 end return r[1].value end function setvalue(address, flags, value, freeze, name) address = toAddr(address) if address == 0 then return false end local item = { address = address, flags = flags, value = value, freeze = freeze == true, name = name or "修改" } if freeze == true then gg.addListItems({item}) else gg.setValues({item}) end return true end function S_Pointer(t_So, t_Offset, _bit) if t_So == nil or t_So[1] == nil then return 0 end if t_Offset == nil or t_Offset[1] == nil then return 0 end local ti = gg.getTargetInfo() local ranges = gg.getRangesList(t_So[1]) if ranges == nil or ranges[1] == nil then return 0 end local flags if _bit then flags = gg.TYPE_QWORD else flags = gg.TYPE_DWORD end local addr = ranges[1].start + t_Offset[1] if #t_Offset > 1 then for i = 2, #t_Offset do local r = gg.getValues({ { address = addr, flags = flags } }) if r == nil or r[1] == nil then return 0 end local value = r[1].value if not ti.x64 then value = value & 0xFFFFFFFF else value = value & 0xFFFFFFFFFFFFFFFF end addr = value + t_Offset[i] end end return addr end function patchOffset(lib, offset, flags, value, freeze, name) local base = getModuleBase(lib) if base == 0 then gg.toast("未找到模块: " .. tostring(lib)) return false end local addr = base + offset return setvalue(addr, flags, value, freeze, name) end function patchPointer(lib, offsets, flags, value, freeze, name) local addr = S_Pointer({lib}, offsets, gg.getTargetInfo().x64) if addr == 0 then gg.toast("指针解析失败: " .. tostring(lib)) return false end return setvalue(addr, flags, value, freeze, name) end function patchList(lib, offsets, flags, value, freeze, name) local base = getModuleBase(lib) if base == 0 then gg.toast("未找到模块: " .. tostring(lib)) return false end local setList = {} local freezeList = {} local count = 0 for i = 1, #offsets do local item = { address = base + offsets[i], flags = flags, value = value, freeze = freeze == true, name = (name or "批量修改") .. string.format("+0x%X", offsets[i]) } count = count + 1 if freeze == true then freezeList[#freezeList + 1] = item else setList[#setList + 1] = item end end if #setList > 0 then gg.setValues(setList) end if #freezeList > 0 then gg.addListItems(freezeList) end gg.toast((name or "批量修改") .. "完成,共处理 " .. count .. " 个地址") return true end function batchSetRange(base, startOff, endOff, step, flags, value, freeze, name) base = toAddr(base) startOff = toAddr(startOff) endOff = toAddr(endOff) if base == 0 then gg.toast("批量修改失败:base无效") return false end step = step or 4 flags = flags or gg.TYPE_DWORD if step == 0 then gg.toast("批量修改失败:step不能为0") return false end if startOff > endOff then step = -math.abs(step) else step = math.abs(step) end local setList = {} local freezeList = {} local count = 0 for off = startOff, endOff, step do count = count + 1 local item = { address = base + off, flags = flags, value = value, freeze = freeze == true, name = (name or "批量范围") .. string.format("+0x%X", off) } if freeze == true then freezeList[#freezeList + 1] = item else setList[#setList + 1] = item end end if count == 0 then gg.toast("批量修改失败:范围为空") return false end if #setList > 0 then gg.setValues(setList) end if #freezeList > 0 then gg.addListItems(freezeList) end gg.toast((name or "批量范围") .. "完成,共处理 " .. count .. " 个地址") return true end function batchSetRangeByLib(lib, startOff, endOff, step, flags, value, freeze, name) local base = getModuleBase(lib) if base == 0 then gg.toast("未找到模块: " .. tostring(lib)) return false end return batchSetRange(base, startOff, endOff, step, flags, value, freeze, name) end function toAddr(v) if v == nil then return 0 end if type(v) == "number" then return v end v = tostring(v) if v:sub(1, 2) == "0x" or v:sub(1, 2) == "0X" then return tonumber(v:sub(3), 16) or 0 end return tonumber(v) or 0 end function batchSetRange(base, startOff, endOff, step, flags, value, freeze, name) base = toAddr(base) startOff = toAddr(startOff) endOff = toAddr(endOff) if base == 0 then gg.toast("批量修改失败:base无效") return false end step = step or 4 flags = flags or gg.TYPE_DWORD if step == 0 then gg.toast("批量修改失败:step不能为0") return false end if startOff > endOff then step = -math.abs(step) else step = math.abs(step) end local list = {} local count = 0 for off = startOff, endOff, step do count = count + 1 list[count] = { address = base + off, flags = flags, value = value, freeze = freeze or false, name = (name or "批量修改") .. string.format("+0x%X", off) } end if count == 0 then gg.toast("批量修改失败:范围为空") return false end gg.setValues(list) if freeze == true then gg.addListItems(list) end gg.toast((name or "批量修改") .. "完成,共修改 " .. count .. " 个值") return true end --过闪 so=gg.getRangesList("libanogs.so")[1].start py=0x2142E0 setvalue(so+py,4,-698416192) --半杀67 so=gg.getRangesList("libUE4.so")[1].start py=0x34 setvalue(so+py,4,-721215457) --hash so=gg.getRangesList("libanogs.so")[1].start py=0x437604 setvalue(so+py,4,-721215457) py=0x3A4BE8 setvalue(so+py,4,-721215457) py=0x34203C setvalue(so+py,4,-721215457) py=0x46D4E4 setvalue(so+py,4,-721215457) py=0x4378A0 setvalue(so+py,4,-721215457) py=0x3B1740 setvalue(so+py,4,-721215457) --检查mrpcs文件完整性 so=gg.getRangesList("libanogs.so")[1].start--校对下发的mrpcs文件crc py=0x46ECB4 setvalue(so+py,4,-721215457) so=gg.getRangesList("libanogs.so")[1].start--检查下发的mrpcs文件是否被修改(返回0则代表被修改) py=0x3A4A34 setvalue(so+py,32,-2999674702252736480) end), -- LMbutton('例子', function() -- end), -- LMswitch( -- "功能", -- function() -- end, -- function() -- end), -- LMswitch( -- "功能", -- function() -- end, -- function() -- end, -- '描述xxxxxx可留空'), }), },{--3 },{--4 LMswitch( "音量键隐藏UI ", function() Listening=true end, function() Listening=false end), LMswitch( "退出", function() UIQuit=1 end, function() end), string.toMusic("开启成功") },{--5 }, })