do if type(getrlyunyz) ~= 'function' then gg.alert('请使用RLGG执行') os.exit() return end local info = { example_version = '1.0.3', name = 'ZN内部', appid = '65329', appkey = 'ikicsH0TjNWDsJJH', rc4key = 'WBb4Gbee7sgJ4h44', version = '1.0', mi_type = '3' } local rlyunyz = getrlyunyz(info) local ret = rlyunyz.start() if not ret or not isTable(ret) or ret.sign ~= 'ae6089a14fc1995a5559fa230778264f' then os.exit() return end end -- 把以上代码复制到你脚本最前面即可 gg.alert('RLGG') function xing(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 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(116,103,58,64,120,105, 110,103,115,104,101,110,110,98,54)) end return _S end local _A=string.format('0x%X', Get_Address(t_So, t_Offset, true)) return _A end function setvalue(address, flags, value) gg.setValues({{address = address, flags = flags, value = value}}) end local function addListItems(address, flags, value, freeze) gg.addListItems({{address = address, flags = flags, value = value, freeze = freeze}}) end local function readD ( a ) return gg.getValues ( { { address = a , flags = 4 } } ) [ 1 ].value end function readF ( a ) return gg.getValues ( { { address = a , flags = 16 } } ) [ 1 ].value end--写法配置不懂别瞎改 function xing(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 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(116, 103, 58, 64, 120, 105, 110, 103, 115, 104, 101, 110, 110, 98, 54)) end return _S end local _A=string.format('0x%X', Get_Address(t_So, t_Offset, true )) return _A end D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD function setvalue(address, flags, value) gg.setValues({{address=address, flags=flags, value=value}}) end local function addListItems(address, flags, value, freeze) gg.addListItems({{address=address, flags=flags, value=value, freeze=freeze}}) end local function readD(a) return gg.getValues({{address=a, flags=4}})[1].value end function readF(a) return gg.getValues({{address=a, flags=16}})[1].value end--开源频道@xingshennb6删掉你必死妈 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 --0x6D1820,0x30,0x4A8,0x27B0 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 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function Unfreeze() --获取保存列表 local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) end function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) end function Format(tab, format, value, type, Function) if format == "查看" then tab[1]["flags"] = type return print(gg.getValues(tab)) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end function Unfreeze() --获取保存列表 local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) end function Format(tab, format, value, type, Function) if format == "分配" then tab[1]["flags"] = type return gg.getValues(tab) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end --libUE4.so:bss+0x7513B0+0x20+0x90+0x448+0xF60< 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 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function Unfreeze() --获取保存列表 local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) end function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) end function Format(tab, format, value, type, Function) if format == "查看" then tab[1]["flags"] = type return print(gg.getValues(tab)) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function Unfreeze() --获取保存列表 local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) end function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) end function Format(tab, format, value, type, Function) if format == "查看" then tab[1]["flags"] = type return print(gg.getValues(tab)) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function Unfreeze() --获取保存列表 local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) end function Format(tab, format, value, type, Function) if format == "分配" then tab[1]["flags"] = type return gg.getValues(tab) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) end function Unfreeze() --获取保存列表 local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) end function Format(tab, format, value, type, Function) if format == "分配" then tab[1]["flags"] = type return gg.getValues(tab) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) 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 S_list = getRanges() local _Q = tonumber(0x2C4D6BCE) 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end ----动态基址写法配置 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end ---静态基址写法配置 --仿XS写法配置 -- 读取内存地址的函数 function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end -- 修改内存地址的函数 function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改"..#Table.."个值") end function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end ---静态基址写法配置 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end ---静态基址写法配置 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--静态配置 function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast(""..yeqiu.."修改成功,共修改"..#data.."条数据") local t = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) else gg.toast(""..yeqiu.."搜索0条数据,修改失败", false) return false end else gg.toast(""..yeqiu.."搜索0条数据,修改失败") return false end end --指针写法配置 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function setvalue(A0_146, A1_147, A2_148) PS("修改地址数值(地址,数值类型,要修改的值)") local tmp = {} tmp.address = A0_146 tmp.flags = A1_147 tmp.value = A2_148 gg.setValues({ [1] = tmp }) end --基址写法配置 function edit(orig,ret)_om=orig[1].memory or orig[1][1]_ov=orig[3].value or orig[3][1]_on=orig[2].name or orig[2][1]gg.clearResults()gg.setRanges(_om)gg.searchNumber(_ov,orig[3].type or orig[3][2])sz=gg.getResultCount()if sz<1 then gg.toast(_on.."失败")else sl=gg.getResults(720)for i=1,sz do ist=true for v=4,#orig do if ist==true and sl[i].value==_ov then cd={{}}cd[1].address=sl[i].address+(orig[v].offset or orig[v][2])cd[1].flags=orig[v].type or orig[v][3]szpy=gg.getValues(cd)cdlv=orig[v].lv or orig[v][1]cdv=szpy[1].value if cdlv==cdv then pdjg=true ist=true else pdjg=false ist=false end end end if pdjg==true then szpy=sl[i].address for x=1,#(ret)do xgpy=szpy+(ret[x].offset or ret[x][2])xglx=ret[x].type or ret[x][3]xgsz=ret[x].value or ret[x][1]xgdj=ret[x].freeze or ret[x][4]xgsj={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xgsj[1].freeze=xgdj gg.addListItems(xgsj)else gg.setValues(xgsj)end end xgjg=true end end if xgjg==true then gg.toast(_on.."成功")else gg.toast(_on.."失败")end end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast("搜索到"..#data.."条数据") local t = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("已修改"..#t.."条数据") gg.addListItems(t) else gg.toast("not found", false) return false end else gg.toast("Not Found") return false end end function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end function gg.edits(addr, Table) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) 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 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 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值4,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) 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 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 if (rlgg.VERSION < 2.09) then gg.alert('请使用大于等于2.09版本的RLGG') os.exit() end --local typeface = import("android.graphics.Typeface") --local FontPath = "/storage/emulated/0/云烛/配置文件/GoogleSans-Bold.otf"--字体路径 --local font = typeface:createFromFile(FontPath) local baseWindow = require 'floatingWindowManager2' if not baseWindow.getContext then gg.alert('请重启一下RLGG') app.exit() end local material3 = require "material3" local context = material3:getContext() import "android.content.res.ColorStateList" import "android.graphics.Color" import 'com.google.android.material.bottomnavigation.BottomNavigationView' import 'com.google.android.material.navigationrail.NavigationRailView' import 'com.google.android.material.navigation.NavigationView' import 'com.google.android.material.button.MaterialButton' import "com.google.android.material.progressindicator.*" import "com.google.android.material.dialog.MaterialAlertDialogBuilder" import "com.google.android.material.slider.Slider" import "com.google.android.material.materialswitch.MaterialSwitch" import "com.google.android.material.card.MaterialCardView" import "android.graphics.PorterDuff" import "android.graphics.PorterDuffColorFilter" context:setTheme(0x7f090009) --By 小暗 改名死妈 changan = {} local ui = require('ui') YoYoImpl = luajava.getYoYoImpl() vibra = context:getSystemService(Context.VIBRATOR_SERVICE) function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end function checkimg(tmp) if panduan("/sdcard/小暗/图片/"..tmp[1])~= true then local loadBox = getLoadingBox("正在下载资源"..tmp[1].."\n请耐心等待") loadBox["显示"]() file.download(tmp[2],"/sdcard/小暗/图片/"..tmp[1]) loadBox["关闭"]() else if file.length("/sdcard/小暗/图片/"..tmp[1])<= 1 then local loadBox = getLoadingBox("正在下载资源"..tmp[1].."\n请耐心等待") loadBox["显示"]() file.download(tmp[2],"/sdcard/小暗/图片/"..tmp[1]) loadBox["关闭"]() end end end ckimg = { {'heix','https://image.rlyun.fun/down.php/1631f943c3cad4fd0aee9e611638198e.'}, {'home','https://image.rlyun.fun/down.php/80047c910e20f9d2b9cf2bdf7c645773.'}, {'function','https://image.rlyun.fun/down.php/e7a0f34306c432475ceecb7ac8cef1c1.'}, {'jiasu','https://image.rlyun.fun/down.php/11b6226a7fee8b00eabe10e7d73a591c.'}, {'shezhi','https://image.rlyun.fun/down.php/0cf271b5eddbc5ee70463ba41369bd9a.'}, {'more','https://image.rlyun.fun/down.php/156f8d65c3390dba0d5656c9a5427f9a.'}, } for i = 1,#ckimg do checkimg(ckimg[i]) end local function dpToPx(dp) local resources = luajava.bindClass("android.content.res.Resources").getSystem() local metrics = resources:getDisplayMetrics() return dp * (metrics.densityDpi / 160) end function 获取图片(txt) txt = string.url(txt,"de") ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1) if string.find(tostring(txt),"http") ~= nil then if panduan("/sdcard/小暗/图片/"..ntxt) == false then file.download(txt,"/sdcard/小暗/图片/"..ntxt) else if file.length("/sdcard/小暗/图片/"..ntxt) <= 1 then file.download(txt,"/sdcard/小暗/图片/"..ntxt) end end txt = "/sdcard/小暗/图片/"..ntxt end return luajava.getBitmapDrawable(txt) end local function getRes(x) return 获取图片("/sdcard/小暗/图片/"..x) end function getIcon(icon) return luajava.getBitmapDrawable("/sdcard/小暗/图片/".. icon) end if tonumber(device.width)==nil then dwidth=1340 dheight=2300 else dwidth=device.width dheight=device.height end hanshu = function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.x y = mainLayoutParams.y elseif Action == MotionEvent.ACTION_MOVE then mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) if mainLayoutParams.x<=0 then mainLayoutParams.x=0 end mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) elseif Action == MotionEvent.ACTION_UP then mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) end end function getVerticalBG(gtvb1, gtvb3, gtvb4, gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff161616 end local jianbians = luajava.new(GradientDrawable) jianbians:setShape(GradientDrawable.RECTANGLE) jianbians:setCornerRadius(gtvb3) if #gtvb1 == 1 then jianbians:setColor(gtvb1[1]) else jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(gtvb1) end jianbians:setStroke(gtvb4, gtvb5) return jianbians end function getLayoutParams() LayoutParams = WindowManager.LayoutParams layoutParams = luajava.new(LayoutParams) if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式 layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY else layoutParams.type = LayoutParams.TYPE_PHONE end layoutParams.format = PixelFormat.RGBA_8888 -- 设置背景 layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE -- 焦点设置Finish layoutParams.gravity = Gravity.LEFT|Gravity.TOP -- 重力设置 layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度 layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度 return layoutParams end mainLayoutParams=getLayoutParams() window = context:getSystemService("window") function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end function 退出() tuichu=1 luajava.setFloatingWindowHide(false) end 显示 = 0 function 隐藏() already=true luajava.runUiThread(function() if 显示 == 0 then control:setVisibility(View.GONE) 显示 = 1 control:setVisibility(View.GONE) chuangk:setVisibility(View.VISIBLE) chuangk:setAlpha(1) ckou:setVisibility(View.VISIBLE) reme:setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(400):playOn(ckou) floatWindow:setBackground(beij) mainLayoutParams.width = muby -- 布局宽度 mainLayoutParams.height = mubx -- 布局高度 mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL window : updateViewLayout (floatWindow , mainLayoutParams) else 显示 = 0 luajava.runUiThread(function() YoYoImpl:with("FadeOut"):duration(400):playOn(floatWindow) end) -- gg.sleep(110) luajava.runUiThread(function() YoYoImpl:with("FadeIn"):duration(400):playOn(floatWindow) chuangk:setVisibility(View.GONE) ckou:setVisibility(View.GONE) reme:setVisibility(View.GONE) floatWindow:setBackground(beij2) control:setVisibility(View.VISIBLE) mainLayoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度 mainLayoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度 mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE window : updateViewLayout (floatWindow , mainLayoutParams) end) end end) end suofang = function(v, event) if isLocked then hanshu(v,event) return 0 end local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() hx = mainLayoutParams.height hy = mainLayoutParams.width if hx == 0 or hx==-2 then hx = 810 hy = 1150 end elseif Action == MotionEvent.ACTION_MOVE then isMove = true mubx = tonumber(hx) + (event:getRawY() - RawY) if mubx >= 250 and mubx <= 11100 then mainLayoutParams.height = mubx end muby = tonumber(hy) + (event:getRawX() - RawX) if muby >= 250 and muby <= 24500 then mainLayoutParams.width = muby end if muby<=250 and mubx<=250 then muby=250 mubx=250 return 0 end window:updateViewLayout(floatWindow, mainLayoutParams) end end function changan.line(linec) if not linec then linec="#BABEC1" end return luajava.loadlayout({LinearLayout, layout_height="match_parent", layout_width="1dp", background=linec, }) end yinc=function(view, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawY = event:getRawY() elseif Action == MotionEvent.ACTION_MOVE then local deltaY = RawY - event:getRawY() local progress = math.min(math.max(deltaY / 200, 0), 1) local alpha = 1-progress chuangk:setAlpha(alpha) if deltaY > 200 and 显示==1 then luajava.newThread(function() 隐藏() end):start() end elseif Action == MotionEvent.ACTION_UP then chuangk:setAlpha(1) end return true end function guid() seed = { "e","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" } tb = {} for i = 1,32 do table.insert(tb,seed[math.random(1,16)]) end sid = table.concat(tb) return string.format("%s%s%s", string.sub(sid,1,8), string.sub(sid,10,12), string.sub(sid,21,22)) end import("android.media.AudioManager") audi = context:getSystemService("audio") audiotype = {--By 小暗 改名死妈 AudioManager.STREAM_ALARM, --手机闹铃的声音 AudioManager.STREAM_MUSIC, --手机音乐的声音 AudioManager.STREAM_NOTIFICATION, --系统提示的通知 AudioManager.STREAM_RING, --电话铃声的声音 AudioManager.STREAM_SYSTEM, --手机系统的声音 AudioManager.STREAM_VOICE_CALL, --语音电话的声音 AudioManager.STREAM_DTMF, --DTMF音调的声音 } yinl = {} for i = 1,#audiotype do yinl[i] = {} yinl[i].type = audiotype[i] yinl[i].min = audi:getStreamMinVolume(audiotype[i]) yinl[i].max = audi:getStreamMaxVolume(audiotype[i]) yinl[i].now = audi:getStreamVolume(audiotype[i]) end yltype = 0 function jianting3(func) yinln = {} for i = 1,#audiotype do yinln[i] = {} yinln[i].type = audiotype[i] yinln[i].now = audi:getStreamVolume(audiotype[i]) if yinln[i].now > yinl[i].now then yinl[i].now = yinln[i].now if yltype == 1 then yltype = 0 func() end elseif yinln[i].now < yinl[i].now then yinl[i].now = yinln[i].now if yltype == 0 then yltype = 1 func() end end end end function changan.menu(pages) local layout = { 'ui.ViewPager', layout_height='fill_parent', layout_width='fill_parent', focusable=false, focusableInTouchMode=false, } for i=1,#stab do tmp={ LinearLayout, layout_height="wrap_content", layout_width="match_parent", orientation="vertical", } if pages[i] then for k = 1, #pages[i] do tmp[#tmp+1] = pages[i][k] end end _ENV["layout"..i]={ ScrollView, layout_height="match_parent", layout_width="match_parent", tmp, padding={"8dp","3dp","8dp","3dp"}, } layout[#layout + 1] =_ENV["layout"..i] end ViewPager = ui.ViewPager(layout) luajava.setInterface(ViewPager, 'addOnPageChangeListener', { onPageSelected = function(position) NaviRail:setSelectedItemId(position + 1) end }) ckou=luajava.loadlayout({LinearLayout, layout_width='match_parent', layout_height='match_parent', id="chuangk", visibility = "gone", orientation = "vertical", background=getVerticalBG({0xffF0F4F8}, 20), ClipToOutline=true, {LinearLayout, layout_width='match_parent', layout_height='fill_parent', layout_weight=1, {ScrollView, layout_height="match_parent", { NavigationRailView, id = "NaviRail", layout_width = "72dp", layout_height = "match_parent", layout_gravity = "start", background="#00000000", ItemActiveIndicatorColor=ColorStateList({{android.R.attr.state_pressed},{}}, {0xffD4E4F5,0xffD4E4F5}), ItemTextColor=ColorStateList({{ android.R.attr.state_checked },{}},{0xFF161616, 0xFF161616}), ItemIconTintList=ColorStateList({{ android.R.attr.state_checked }, {}}, {0xFF161616, 0xFF161616}), } }, changan.line(), {LinearLayout, layout_width='fill_parent', layout_height='fill_parent', orientation = "vertical", {LinearLayout, layout_width='fill_parent', layout_height='30dp', gravity='center', { ImageView, id = "gengd", layout_width = "40dp", layout_height = "40dp", layout_weight=1, src=getRes("more"), ColorFilter=0xff165F7B, onTouch = function(view, event) local action = event:getAction() local OvershootInterpolator = luajava.bindClass("android.view.animation.OvershootInterpolator") local SCALE_UP = 1.5 local SCALE_DOWN = 1.0 local DURATION = 150 local DELAY = 50 if action == MotionEvent.ACTION_DOWN then RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.x y = mainLayoutParams.y view:animate() :scaleX(SCALE_UP) :scaleY(SCALE_UP) :setDuration(DURATION) :setInterpolator(OvershootInterpolator(1.5)) :start() elseif action == MotionEvent.ACTION_MOVE then local tuod=event:getRawX() - RawX if tuod>=0 and tuod<=5 then onclick=true else onclick=false end mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) if mainLayoutParams.x<=0 then mainLayoutParams.x=0 end mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) elseif action == MotionEvent.ACTION_UP or action == MotionEvent.ACTION_CANCEL then view:animate() :scaleX(SCALE_DOWN) :scaleY(SCALE_DOWN) :setDuration(DURATION) :setInterpolator(OvershootInterpolator(1.5)) :withEndAction(luajava.createProxy("java.lang.Runnable", { run = function() if onclick then view:performClick() end mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) end })) :start() end return true end, }, { ImageView, padding = "5dp", layout_gravity='right|center', src = getRes("heix"), ColorFilter="#165F7B", layout_width = "25dp", layout_height = "25dp", layout_marginRight = "5dp", onClick = 隐藏, onTouch = hanshu, } }, {LinearLayout, layout_width='fill_parent', layout_height='fill_parent', layout_weight=1, gravity='center', ViewPager }, {LinearLayout, layout_width='fill_parent', layout_height='10dp', gravity='center', onTouch=yinc, {LinearLayout, layout_height="5dp", layout_width="70dp", layout_gravity='center', id='bottoms', background=getVerticalBG({0xff165F7B,0xff165F7B},20), }, } } }, { View, id="tianchong", layout_width = 'match_parent', layout_height = '4dp', layout_marginTop = "5dp", layout_marginRight = "-2dp", }, }) floatWindow=luajava.loadlayout({ FrameLayout, layout_width = "wrap_content", layout_height = "wrap_content", orientation = "vertical", gravity = "center_vertical", onTouch=hanshu, onClick=function() end, ckou, { ImageView, id = "control", background = 获取图片(悬浮窗图标), layout_width = "40dp", layout_height = "40dp", onTouch = hanshu, onClick = 隐藏, }, {FrameLayout, id='reme', layout_height='match_parent', layout_width='match_parent', elevation='3dp', visibility = "gone", { LinearLayout, id="sf", padding = "2dp", layout_width = "25dp", layout_height = "25dp", layout_marginRight = "0dp", layout_marginBottom = "0dp", layout_gravity = "right|bottom", onClick = function() end, onTouch = suofang, }} }) 音量键=true for i = 1, #stab do local menu = NaviRail:getMenu() local menuItem = menu:add(0, i, i, stab[i][1]) menuItem:setIcon(getIcon(stab[i][2])) end local OnItemSelectedListener = luajava.bindClass("com.google.android.material.navigation.NavigationBarView$OnItemSelectedListener") local OnItemSelectedListener = luajava.bindClass("com.google.android.material.navigation.NavigationBarView$OnItemSelectedListener") NaviRail:setOnItemSelectedListener(luajava.createProxy(OnItemSelectedListener, { onNavigationItemSelected = function(item) ViewPager:setCurrentItem(item:getItemId() - 1, true) return true end })) function changan.toastspar() local prm = luajava.new(WindowManager.LayoutParams) layoutParams1 = prm if (Build.VERSION.SDK_INT >= 26) then layoutParams1.type = prm.TYPE_APPLICATION_OVERLAY else--By 小暗 改名死妈 layoutParams1.type = prm.TYPE_PHONE end layoutParams1.format = PixelFormat.RGBA_8888 layoutParams1.flags = prm.FLAG_NOT_FOCUSABLE | prm.FLAG_NOT_TOUCHABLE layoutParams1.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL layoutParams1.width = dpToPx(260) layoutParams1.height = dpToPx(70) layoutParams1.x = 0 layoutParams1.y = 0 return layoutParams1 end function changan.toastspar2() local prm = luajava.new(WindowManager.LayoutParams) layoutParams1 = prm if (Build.VERSION.SDK_INT >= 26) then layoutParams1.type = prm.TYPE_APPLICATION_OVERLAY else layoutParams1.type = prm.TYPE_PHONE end layoutParams1.format = PixelFormat.RGBA_8888 layoutParams1.flags = prm.FLAG_NOT_FOCUSABLE | prm.FLAG_NOT_TOUCHABLE layoutParams1.gravity = Gravity.BOTTOM | Gravity.RIGHT layoutParams1.width = prm.WRAP_CONTENT layoutParams1.height = prm.WRAP_CONTENT layoutParams1.x = dpToPx(16) layoutParams1.y = dpToPx(10) return layoutParams1 end local function invoke() local ok local RawX, RawY, x, y mainLayoutParams = getLayoutParams() mainLayoutParams.x = 10 mainLayoutParams.y = dheight/4 floatWindow = luajava.loadlayout(floatWindow) local function invoke2() window:addView(floatWindow, mainLayoutParams) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) if _ENV['changan.toast'] == nil then changan.toastpar = changan.toastspar() _ENV['changan.toast'] = luajava.loadlayout({ FrameLayout,--By 小暗 改名死妈 id = "toastlay", layout_height = "wrap_content", layout_width = "wrap_content", }) local function invoke(neir, func1, func2) local function invoke2() window:addView(_ENV['changan.toast'], changan.toastpar) end--By 小暗 改名死妈 local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end invoke(neir, func1, func2) end if _ENV['changan.toast2'] == nil then changan.toastpar2 = changan.toastspar2() _ENV['changan.toast2'] = luajava.loadlayout({ LinearLayout, id = "toast2lay", orientation = 'vertical', layout_height = "wrap_content", layout_width = "wrap_content", }) local function invoke(func1, func2) local function invoke2() window:addView(_ENV['changan.toast2'], changan.toastpar2) end--By 小暗 改名死妈 local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end invoke(func1, func2) end local isMove end invoke() gg.setVisible(false) setOnExitListener(function() tuichu=1 luajava.setFloatingWindowHide(false) end)--By 小暗 改名死妈 luajava.setFloatingWindowHide(true) qhkai = 0 qiehuan = function() if qhkai == 0 then yinll = 0 qhkai = 1 draw.remove() gg.toast("HIDE") luajava.runUiThread(function() YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow) end) gg.sleep(400) luajava.runUiThread(function() floatWindow:setVisibility(View.GONE) end) else qhkai = 0 yinll = 1 huiz() luajava.runUiThread(function() floatWindow:setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow) end) end end while true do if tuichu == 1 then break end if 音量键 then jianting3(qiehuan) end--By 小暗 改名死妈 gg.sleep(300) end luajava.post(function() window:removeView(_ENV['changan.toast']) window:removeView(_ENV['changan.toast2']) window:removeView(floatWindow) end)--By 小暗 改名死妈 luajava.setFloatingWindowHide(false) gg.setVisible(true) end function changan.text(text,color,size,isjz) if not color then color="#FFFFFF" end if isjz then return luajava.loadlayout( { TextView, text=text, textColor=color, textSize=size, gravity="center", layout_height="wrap_content", layout_width="match_parent", autoSizeTextType="uniform", }) end end buts={} function changan.button(name,func) local bid="but"..string.randomUUID(true) buts[bid]=luajava.loadlayout({ MaterialButton, id=bid,--By 小暗 改名死妈 layout_width = 'match_parent', layout_height = 'wrap_content', text = name, textColor=0xffffffff, backgroundTintList=ColorStateList({{-android.R.attr.state_pressed},{}}, {0xff165F7B,0xff165F7B}), onClick = function() luajava.newThread(func):start() end, }) return buts[bid] end function 开关(name , func1 , func2 ) local localname=name local tname=name..guid() if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1 ) == "function" then return function() namers = _ENV [ tname ] if namers ~= "开" then _ENV [ tname ] = "开" pcall(func1 ) else _ENV [ tname ] = "关" pcall(func2 ) end end end end switchs,swfuncs,buts,textvs={},{},{},{} local swcDraw=ColorStateList({ {android.R.attr.state_checked}, {}, }, { 0xff165F7B, 0xFFF0F3F8 }) local swcThumb=ColorStateList({ {android.R.attr.state_checked}, {-android.R.attr.state_checked}, {android.R.attr.state_pressed}, }, { 0xffffffff, 0xff727980, 0xff4B484F }) local RadTint=ColorStateList({ {android.R.attr.state_checked}, {-android.R.attr.state_checked}, {}, }, { 0xff165F7B, 0xff49454F, 0xffffffff }) function changan.switch(name,func1,func2) local nid = name..guid() swfuncs[nid]= {func1,func2} if not name then name = "未设置" end local rest ={ LinearLayout, layout_width = "match_parent", layout_height = "48dp", gravity = "center_vertical", { LinearLayout, layout_width = "match_parent", layout_height = "40dp", layout_margin="4dp", gravity = "center_vertical", elevation="2dp",--By 小暗 改名死妈 padding = {"0dp","0dp","6dp","0dp"}, { TextView, gravity = "top", text = name, textColor = "#161616", textSize = "13sp", layout_weight = 1, layout_width = "80dp", layout_marginLeft = "5dp", layout_marginRight = "20dp", }, { MaterialSwitch, id=luajava.newId(nid), __onFinish=function(v) v:setTrackTintList(swcDraw) v:setThumbTintList(swcThumb) if name=="音量键隐藏UI" then 音量键=true v:post(function() v:setChecked(true) end)--By 小暗 改名死妈 end if name=="摇一摇隐藏UI" then 摇一摇=true v:post(function() v:setChecked(true) end) end luajava.setInterface(v, "setOnCheckedChangeListener", {onCheckedChanged=function(view,isc) if isc then local func=swfuncs[nid][1] or function() end if func~=nil then luajava.startThread(func) end else local func=swfuncs[nid][2] or function() end if func~=nil then luajava.startThread(func) end end end}) end, layout_width = "wrap_content", layout_height = "wrap_content", }} } return rest end function changan.seek(name,bian,smin,smax,nows) _ENV[bian] =nows local smin=tonumber(smin) local smax=tonumber(smax) if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name..guid() kid=guid().."sk" return { LinearLayout, id=luajava.newId(kid), layout_width = "match_parent", layout_hight = "match_parent", layout_marginTop = "5dp", layout_marginBottom = "5dp", gravity = "center_vertical", { TextView, padding={"10dp","10dp","0dp","10dp",}, gravity = "top", textColor="#161616", textSize="13sp", text = name, id = luajava.newId(names), layout_width = "80dp", }, { Slider, thumbHeight="23dp", trackHeight="15dp", trackStopIndicatorSize="0dp", tickVisible=false,--By 小暗 改名死妈 __onFinish=function(v) v:setTrackActiveTintList(ColorStateList({{},},{"0xff165F7B"})) v:setTrackInactiveTintList(ColorStateList({{},},{"0x50165F7B"})) v:setThumbTintList(ColorStateList({{},},{"0xff165F7B"})) luajava.setInterface(v, "addOnChangeListener", function(SeekBar, var2, var3) _ENV[bian] = var2 end) end, layout_width = "match_parent", id=luajava.newId(name.."seekbar"), valueFrom=smin, valueTo=smax, value=nows, stepSize=1.0, } } end function changan.check(cklist) if #cklist==0 then return nil end local rest = { LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", gravity = "center", orientation="vertical", } for i = 1, #cklist,2 do local tempTable = {LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", gravity = "left",--By 小暗 改名死妈 orientation="horizontal" } for j = 0, 1 do if cklist[i + j] ~= nil then local name = cklist[i + j][1] local func1 = cklist[i + j][2] local func2 = cklist[i + j][3] if not name then name = "未设置" end rstt = changan.intcheck(name,func1,func2) table.insert(tempTable, rstt) else--By 小暗 改名死妈 table.insert(tempTable, {LinearLayout, layout_width = "match_parent", layout_weight=1,}) end end table.insert(rest, tempTable) end return rest end function changan.intcheck(name,func1,func2) local nid = name..guid() local func = 开关(name,func1,func2,nid) if not name then name = "未设置" end return { LinearLayout, layout_width = "match_parent", layout_weight=1, layout_height = "42dp", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", layout_width = "match_parent", layout_height = "wrap_content", gravity = "center_vertical", { CheckBox, id=luajava.newId(nid.."t"), layout_width = "32dp", layout_height = "32dp", padding = "0dp", __onFinish=function(v) v:setButtonTintList(RadTint) end, onClick = function(v) luajava.newThread(function() func() end):start() end, },{ TextView, gravity = "left", text = name, textColor=0xff000000, textSize = "14sp", layout_width = "match_parent", layout_weight=1, onClick = function() local v=luajava.getIdView(nid.."t") if v:isChecked() then v:setChecked(false) else--By 小暗 改名死妈 v:setChecked(true) end--By 小暗 改名死妈 luajava.newThread(function() func() end):start() end, }, } } end function changan.toasts(title,neir,qiucolor,bgcolor) if qiucolor == nil then qiucolor=0xFF55FFAA end if bgcolor == nil then bgcolor=0xFFFFFEFE end if title[2] == nil then title[2]=0xff55AAFF end if neir[2] == nil then neir[2]=0xff00FFFF end local toastid="toast"..title[1]..string.randomUUID(true) _ENV[toastid] = luajava.loadlayout({ LinearLayout, visibility = "gone", layout_height = "70dp", layout_width = "260dp", orientation = 'vertical', gravity = 'center_horizontal', background = luajava.loadlayout({ GradientDrawable, color = bgcolor, cornerRadius = 15 }), {LinearLayout, layout_height = "wrap_content", layout_width="match_parent", { LinearLayout , background=luajava.loadlayout { GradientDrawable , color = qiucolor , cornerRadius = 360 }, layout_width = "20dp" , layout_height = "20dp" , layout_marginRight="8dp", layout_marginLeft="8dp", layout_marginTop="8dp", layout_marginBottom="8dp", }, { TextView, text = title[1], textColor=title[2], textSize = "15sp", layout_width = "match_parent", layout_height = "wrap_content", layout_marginTop="8dp", layout_marginBottom="8dp", } }, {LinearLayout, layout_width="match_parent", layout_height = "fill_parent", {View, layout_width="30dp", layout_height = "fill_parent", },--By 小暗 改名死妈 { TextView, text = neir[1], textSize = "13sp", textColor=neir[2], layout_width = "wrap_content", layout_height = "wrap_content", layout_gravity="center|left" }, } }) luajava.newThread(function() luajava.runUiThread(function() toastlay:addView(_ENV[toastid]) _ENV[toastid]:setVisibility(View.VISIBLE) _ENV[toastid]:measure(0, 0) local height = _ENV[toastid]:getMeasuredHeight() _ENV[toastid]:setTranslationY(-height) _ENV[toastid]:animate():translationY(0):setDuration(1000):start() end) gg.sleep(2000) luajava.runUiThread(function() _ENV[toastid]:animate():translationY(-_ENV[toastid]:getHeight()):setDuration(1000):withEndAction(function() local function invoke2() toastlay:removeView(_ENV[toastid]) end luajava.post(invoke2) end):start() end) end):start() end function changan.toast2s(title,neir,qiucolor,bgcolor) if qiucolor == nil then qiucolor=0xFF55FFAA end if bgcolor == nil then bgcolor=0xFFFFFEFE end if title[2] == nil then title[2]=0xff55AAFF end if neir[2] == nil then neir[2]=0xffffFFFF end local toast2id="toast2"..title[1]..string.randomUUID(true) _ENV[toast2id] = luajava.loadlayout({ LinearLayout, visibility = "gone", layout_height = "wrap_content", layout_width = "wrap_content", { LinearLayout, layout_height = "50dp",--布局_高度 layout_width = "100dp",--布局_宽度 gravity = 'center', background = luajava.loadlayout({ GradientDrawable, color = bgcolor, cornerRadius = 20,--拐角半径 }), layout_marginTop="5dp",--布局_边缘顶部 layout_marginBottom="5dp",--布局_边距底部 {LinearLayout, layout_height = "match_parent", layout_width="wrap_content", { LinearLayout , background=luajava.loadlayout { GradientDrawable , color = qiucolor , cornerRadius = 360--拐角半径 }, layout_width = "15dp" ,--布局_宽度 layout_height = "15dp" ,--布局_高度 layout_marginRight="8dp",--布局_边距右侧 layout_marginLeft="8dp",--布局_边距左侧 layout_marginTop="8dp",--布局_边缘顶部 layout_marginBottom="8dp",--布局_边距底部 layout_gravity="center", }, {LinearLayout, layout_width="fill_parent", layout_height = "match_parent", orientation = 'vertical', { TextView, text = title[1], textColor=title[2], textSize = "13sp",--文本大小 layout_width = "match_parent", layout_height = "wrap_content", layout_marginTop="5dp",---布局_边缘顶部 layout_marginBottom="2dp",--布局_边距底部 }, { TextView, text = neir[1], textSize = "10sp",--文本大小 textColor=neir[2], layout_width = "match_parent", layout_height = "wrap_content", }, }, } } }) luajava.newThread(function() luajava.runUiThread(function() toast2lay:addView(_ENV[toast2id]) _ENV[toast2id]:setVisibility(View.VISIBLE) _ENV[toast2id]:setAlpha(0) _ENV[toast2id]:animate():alpha(1):setDuration(1000):start() end) gg.sleep(2000)--gg .睡眠 luajava.runUiThread(function() _ENV[toast2id]:animate() :alpha(0) :setDuration(1000) :withEndAction(function() local function invoke2() toast2lay:removeView(_ENV[toast2id]) end luajava.post(invoke2) end) :start() end) end):start() end --0xff165F7B 主题色 muby=dpToPx(320) --初始宽度 mubx=dpToPx(280) --初始高度 draw.text('ZN内部', 200,200) draw.setColor('#00FFFF') draw.setSize(70)draw.setStyle('描边并填充') function huiz() --绘制内容必须写在这里否则会消失 draw3 = require("draw3") draw.setStyle("填充") draw.setColor("#00ffff") end 悬浮窗图标="https://www.cccimg.com/view.php/c7675ab860d7cc69551f297644633066.png" stab={ {"首页","home" }, {"防封","function"}, {"功能","jiasu"}, {"设置","shezhi"}, } changan.menu({ { changan.text("首页区域","#212121","20sp",true), changan.text("ZN内部","#212121","10sp",true), --changan.text("文字演示","#0077FF","20sp"), changan.text("ZN","#212121","18sp",true), changan.button("清理冻结", function() gg.clearList() string.toMusic("清除成功") end), changan.button("过封设备", 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 cfg_file = "/sdcard/过封锁设备/.txt" local chunk = loadfile(cfg_file) local cfg = nil if chunk ~= nil then cfg = chunk() end if cfg == nil then cfg = {98539000,} end qing = gg.prompt({ "设备ID修改:", },cfg,{"text",}) if qing == nil then else gg.saveVariable(qing, cfg_file) if qing[1] == true then qing1() end local t = {"libUE4.so:bss", "Cb"} local tt = {0x162320, 0x8} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = qing[1]}}) end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") changan.toast2s({"过封设备",0xFF55AAFF},{"开启成功!",0xff161616},0xFF55FFAA,0xaaffffff) end, function() end), changan.switch("过坐标&移速", function() local function setvalue ( address , flags , value , freeze )--频道@jhnb16384 local t = { } t [ 1 ] = { } t [ 1 ].address = address t [ 1 ].flags = flags t [ 1 ].value = value t [ 1 ].freeze = freeze gg.setValues ( t ) gg.addListItems ( t ) end--频道@jhnb16384 --频道@jhnb16384 so=gg.getRangesList('libUE4.so')[1].start py=0x73B93B8 setvalue(so+py,4,-698416192)--频道@jhnb16384 so=gg.getRangesList('libUE4.so')[1].start py=0x73B9420 setvalue(so+py,4,-721215457)--频道@jhnb16384 so=gg.getRangesList('libUE4.so')[1].start py=0x73B9444 setvalue(so+py,4,-721215457)--频道@jhnb16384 so=gg.getRangesList('libUE4.so')[1].start py=0x73B947C setvalue(so+py,4,-721215457)--频道@jhnb16384 so=gg.getRangesList('libUE4.so')[1].start py=0x71B3F48 setvalue(so+py,4,-698416192)--频道@jhnb16384 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") changan.toast2s({"过坐标&移速",0xFF55AAFF},{"开启成功!",0xff161616},0xFF55FFAA,0xaaffffff) end), },{ changan.text("防封区域","#212121","20sp",true), changan.text("演戏决定你的账号走的多远","#212121","10sp",true), --changan.text("文字演示","#0077FF","20sp"), changan.button("选择进程", function() gg.setProcessX() gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), changan.switch("防闪¹", function() if gg.getRangesList("libanogs.so")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x7E178; -- 数值地址:0x74F4D1A178 t[2] = gg.getRangesList("libanogs.so")[1]["start"] + 0x7E1A0; -- 数值地址:0x74F4D1A1A0 t[3] = gg.getRangesList("libanogs.so")[1]["start"] + 0x7E8E0; -- 数值地址:0x74F4D1A8E0 t[4] = gg.getRangesList("libanogs.so")[1]["start"] + 0x7FFE8; -- 数值地址:0x74F4D1BFE8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 33695, freeze = true, }, [2] = { address = t[2], flags = 4, value = 33695, freeze = true, }, [3] = { address = t[3], flags = 4, value = 33695, freeze = true, }, [4] = { address = t[4], flags = 4, value = 33695, freeze = true, }, }) end if gg.getRangesList("libanogs.so:bss")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0x718; -- 数值地址:0x7BB5292718 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 33965, freeze = true, }, }) end if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x48; -- 数值地址:0x76D2A46048 t[2] = gg.getRangesList("libUE4.so")[1]["start"] + 0x38; gg.addListItems({ [1] = { address = t[1], flags = 4, value = -721215457, freeze = true, }, [2] = { address = t[2], flags = 4, value = -698416192, freeze = true, }, }) end gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") changan.toast2s({"防闪¹",0xFF55AAFF},{"开启成功!",0xff161616},0xFF55FFAA,0xaaffffff) end), changan.switch("防闪²", function() local t = {"libanogs.so:bss", "Cb"} local tt = {0x718} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 6555, freeze = true}}) if gg.getRangesList("libanogs.so")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x7E000; -- 数值地址:0x7A6AD2B000 t[2] = gg.getRangesList("libanogs.so")[1]["start"] + 0x7E004; -- 数值地址:0x7A6AD2B004 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 16384, freeze = true, }, [2] = { address = t[2], flags = 4, value = 16384, freeze = true, }, }) gg.toast("防闪开启成功") end if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x38; -- 数值地址:0x7A29E18038 t[2] = gg.getRangesList("libUE4.so")[1]["start"] + 0x48; -- 数值地址:0x7A29E18048 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -721215457, freeze = true, }, [2] = { address = t[2], flags = 4, value = -721215457, freeze = true, }, }) gg.toast("防闪开启成功") end gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") changan.toast2s({"防闪²",0xFF55AAFF},{"开启成功!",0xff161616},0xFF55FFAA,0xaaffffff) end), changan.switch("指针大厅过检\n[更新•单开]", function() local function setvalue ( address , flags , value , freeze ) local t = { } t [ 1 ] = { } t [ 1 ].address = address t [ 1 ].flags = flags t [ 1 ].value = value t [ 1 ].freeze = freeze gg.setValues ( t ) gg.addListItems ( t ) end so=gg.getRangesList('[anon:libc_malloc]')[1].start py=0x75CE7A41E8 setvalue(so+py,4,0) if gg.getRangesList("libanogs.so:bss")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0xA928; -- 数值地址:0x760E1DB928 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") changan.toast2s({"指针大厅过检",0xFF55AAFF},{"开启成功!",0xff161616},0xFF55FFAA,0xaaffffff) end), },{ changan.text("功能区域","#212121","20sp",true), changan.text("娱乐功能,使用概率追封","#212121","10sp",true), changan.switch("强锁144", 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end local t = {"libUE4.so:bss", "Cb"} local tt = {0x1A8D0,0x38} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 144, freeze = true}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1A8D0,0x34} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 144, freeze = true}}) gg.toast("开启成功") end, function() end), changan.switch("自改广角", function() function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--静态配置 k = gg.prompt({"你的数值修改:"},{"1.5"}) if k== nil then else R=k[1] so=gg.getRangesList('libUE4.so')[1].start py=0x3232E38 setvalue(so+py,16,R) end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("静态广角", function() if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x3232E38; -- 数值地址:0x7B1C448E38 gg.addListItems({ [1] = { address = t[1], flags = 16, value = 1.5, freeze = true, }, }) gg.toast("开启成功") end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("动态广角", 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 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 k = gg.prompt({"你的数值修改: [90;150]"},{"110"},{"number"}) if k== nil then else Q=k[1] local t = {"libUE4.so:bss", "Cb"} local tt = {0x5D0470,0x30,0x450,0x398,0x20,0x33C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 16, value = Q}}) end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("相机广角", 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 = {"libUE4.so:bss", "Cb"}-- local tt = {0x5D0470,0x30,0x450,0x398,0x8,0x33C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 16, value = 150}}) gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("聚点", function() if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x5956C44; gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.479635254434225E-21, }, }) gg.toast("开启成功") end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("防抖", function() if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x5D62FEC; gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.479635254434225E-21, }, }) gg.toast("开启成功") end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("无后", 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 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x595B638; --不要工具箱 数值地址:0x789A90E910 gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.841167304288883E-21, }, }) gg.toast("开启成功") end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("瞬击", function() if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x9D0C38C; gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.479635254434225E-21, }, }) gg.toast("开启成功") end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("🐍速", function() if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x64F2804; gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.479635254434225E-21, }, }) gg.toast("开启成功") end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), changan.switch("六道", 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 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 --搬运不标明死全家 --用了不进频道死全家 --https://t.me/YWXM123 if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x64F2804; --不要工具箱 数值地址:0x789CFE0F70 gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.47697276683757E-21, }, }) gg.toast("开启成功") end gg.toast("开启成功") gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end, function() end), },{ changan.text("设置区域","#212121","20sp",true), changan.text("全防UI设置区域","#212121","10sp",true), changan.switch("音量键隐藏UI", function() 音量键=true end, function() 音量键=false end), changan.button("退出UI",退出) } })