string.toMusic("欢迎使用清水国体范围") 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 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 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 local function readD(a) return gg.getValues({{ address=a, flags=gg.TYPE_DWORD }})[1].value end local function readF(a) return gg.getValues({{ address=a, flags=gg.TYPE_FLOAT }})[1].value end 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 --以上为读取d,f类型的值和修改某地址的值的函数 local function RUI(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[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 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 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--静态 local Ranges=gg.getRangesList('/') local function Read(module,type) for k,v in pairs(Ranges) do if v['internalName']:match('[^/]*$')==module and v['type']==type then return v['start'] end end end local Table={} local function Modify(address,value,flags) Table[#Table+1]={address=address,value=value,flags=flags} 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 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 function readD ( a ) return gg.getValues ( { { address = a , flags = 4 } } ) [ 1 ].value 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 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 xfnb(add,lx) return gg.getValues({ { address=add,flags = lx } })[1].value end local function RUI(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value 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 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 local function RUI(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value 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, 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 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 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 LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 频道:@dzyyds A91 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 split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "开启失败") end end end 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 read(address, flags) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = flags filzer = gg.getValues(tt)[1].value return filzer end function getbase(address) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = 32 filzer = gg.getValues(tt)[1].value return filzer end local json =json--调用 local g = {} g.file = gg.getFile() g.sel = nil gqlb={"请先搜索歌曲",} idb={"1010"} SN,gc=1,nil g.config = gg.getFile():gsub("%lua$", "").."cfg" function bei() g.data = loadfile("音乐配置"..g.config) if g.data ~= nil then g.sel = g.data() g.data = nil end if g.sel == nil then g.sel = {"","10"} end end bei() local Ranges=gg.getRangesList('/') local function Read(module,type) for k,v in pairs(Ranges) do if v['internalName']:match('[^/]*$')==module and v['type']==type then return v['start'] end end end local Table={} local function Modify(address,value,flags) Table[#Table+1]={address=address,value=value,flags=flags} end function start(name,sl) fw=gg.makeRequest("http://music.163.com/api/search/get?s="..name.."&type=1&offset=0&total=true&limit="..sl) return fw end function play(id,name) gg.toast("正在播放音乐:"..name,true) gg.playMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3") end function Play(gqlb,idb) SN = gg.choice(gqlb,nil,ts) if SN == nil then XGCK =-1 else sn=gg.choice({"播放歌曲","播放并下载"},nil,"歌曲:"..gqlb[SN]) if sn == nil then end if sn == 1 then play(idb[SN],gqlb[SN]) end if sn == 2 then local XEY=gg.makeRequest("http://music.163.com/song/media/outer/url?id="..idb[SN]..".mp3").content local XEY1=gg.getFile():gsub("[^/]+$","")..gqlb[SN]..".mp3" io.open(XEY1,"w"):write(XEY) gg.alert("提示:\n\n音乐已成功下载位置:\n\n"..XEY1) end XGCK=-1 end end function zjson(jsonr) local str = jsonr local pattern = "\"[%w]+\":" string.gsub(str, pattern, function(v) if string.find(str, v) then str = string.gsub(str, v, string.gsub(v, "\"", "")) end end) str = string.gsub(str, ":", "=") str = string.gsub(str, "%[", "{") str = string.gsub(str, "%]", "}") local data = "-- WSG PRO 1.0.9(109)\nreturn " .. str local res = load(data)() return res end function json(con) res=zjson(con) zd=res.result.songCount pd=go3-zd if pd <= 0 then else go3=zd end ts="《"..go1.."》找到"..zd.."首歌曲,当前显示"..go3.."首" gqlb={} idb={} for i=1,go3 do gqlb[i]=res.result.songs[i].name idb[i]=res.result.songs[i].id end 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 ---静态基址写法配置 function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "地址成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "失败") end end end end --仿XS写法配置 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 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 local Ranges=gg.getRangesList('/') local function Read(module,type) for k,v in pairs(Ranges) do if v['internalName']:match('[^/]*$')==module and v['type']==type then return v['start'] end end end local Table={} local function Modify(address,value,flags) Table[#Table+1]={address=address,value=value,flags=flags} 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 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 draw.setSize(43) draw.setStyle('描边并填充') draw3 = require('draw3') text1 = draw3.text('清水范围', 400,250)--蓝 local color = 0x00ffe9 text1.setColor(color) draw.setSize(38) draw.setStyle('描边并填充') 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 AGGui 改名死妈 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/AGGui/图片/"..tmp[1])~= true then local loadBox = getLoadingBox("正在下载资源"..tmp[1].."\n请耐心等待") loadBox["显示"]() file.download(tmp[2],"/sdcard/AGGui/图片/"..tmp[1]) loadBox["关闭"]() else if file.length("/sdcard/AGGui/图片/"..tmp[1])<= 1 then local loadBox = getLoadingBox("正在下载资源"..tmp[1].."\n请耐心等待") loadBox["显示"]() file.download(tmp[2],"/sdcard/AGGui/图片/"..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/AGGui/图片/"..ntxt) == false then file.download(txt,"/sdcard/AGGui/图片/"..ntxt) else if file.length("/sdcard/AGGui/图片/"..ntxt) <= 1 then file.download(txt,"/sdcard/AGGui/图片/"..ntxt) end end txt = "/sdcard/AGGui/图片/"..ntxt end return luajava.getBitmapDrawable(txt) end local function getRes(x) return 获取图片("/sdcard/AGGui/图片/"..x) end function getIcon(icon) return luajava.getBitmapDrawable("/sdcard/AGGui/图片/".. 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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 gg.sleep(300) end luajava.post(function() window:removeView(_ENV['changan.toast']) window:removeView(_ENV['changan.toast2']) window:removeView(floatWindow) end)--By AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 __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 AGGui 改名死妈 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 AGGui 改名死妈 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 AGGui 改名死妈 v:setChecked(true) end--By AGGui 改名死妈 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 AGGui 改名死妈 { 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) 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(340) --初始宽度 mubx=dpToPx(320) --初始高度 function huiz() end 悬浮窗图标="https://www.panurl.cn/view.php/ea1529bcffb370cf37e03b7b364eca97.jpg" stab={ {"首页","home" }, {"加速","jiasu"}, {"设置","shezhi"}, {"音乐","more"}, } changan.menu({ { changan.text("1","#161616","18sp"), changan.button("选择进程", function() string.toMusic("请选择游戏进程") gg.setProcessX() gg.setConfig("冻结间隔", 0) gg.setConfig("快速冻结", 1) end, function() end), changan.button("公告(必看)", function() string.toMusic("范围一把一开加载到七十三直接开") gg.alert('范围一把一开加载到七十三直接开') end, function() end), changan.switch("大厅一键",function() changan.toast2s({"正在格机中",0xFF55AAFF},{"开启成功!",0xff67666B},0xFF55FFAA,0xaaffffff) --除雾原值:505872643 so=gg.getRangesList('libUE4.so')[1].start py=0xAFB8620 setvalue(so+py,4,-721215457) --无后原值16原 8.95340295e-21:506011648 so=gg.getRangesList('libUE4.so')[1].start py=0x67C92E8 setvalue(so+py,16,8.47694692e-21) --瞬击原值16原 8.95857929e-21 :506018056 so=gg.getRangesList('libUE4.so')[1].start py=0x68AB534 setvalue(so+py,16,8.95671814E-21) --聚点原值16原 8.52492339e-21:505481216 so=gg.getRangesList('libUE4.so')[1].start py=0x67C1E60 setvalue(so+py,16,8.47963525E-21) --弹孔大小原值9.21479445e-21 原值D :506335235 so=gg.getRangesList('libUE4.so')[1].start py=0x6B21274 setvalue(so+py,16,8.57951974e-21) --开镜防抖原值 原值D :-1119030272 so=gg.getRangesList('libUE4.so')[1].start py=0x6F41DDC setvalue(so+py,4,-1119390720) -- 7. 自定义数值调节 local GJ = gg.prompt({"请输入数值(1-3)"}, {"2"}, {"number"}) if GJ and GJ[1] then local num = tonumber(GJ[1]) if num then gg.setValues({ {address = so + 0x37B13E8, flags = 16, value = num} }) gg.toast("✅ 自定义数值已设置: " .. num) else gg.toast("❌ 输入无效,跳过设置") end else gg.toast("已取消自定义设置") end gg.toast("✅ 所有功能执行完毕!") end ), changan.switch("爆头范围",function() changan.toast2s({"正在格机中",0xFF55AAFF},{"开启成功!",0xff67666B},0xFF55FFAA,0xaaffffff) function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find (szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len (szFullString)) break end nSplitArray[nSplitIndex] = string.sub (szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len (szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "开启成功,一共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "未搜索到数据,开启失败") end 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 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("未搜索到数据,开启失败", false) return false end else gg.toast("Not Found") return false end end qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--头部范围 {["value"] = 0.00015663955, ["type"] = 16}, {["lv"] = 15.75, ["offset"] = 8, ["type"] = 16}, } qmxg = { {["value"] = 90, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--身体范围 {["value"] = 4756927107518169088, ["type"] = 32}, {["lv"] = 33, ["offset"] = -4, ["type"] = 16}, {["lv"] = 69.5, ["offset"] = 4, ["type"] = 16}, } qmxg = { {["value"] = 700, ["offset"] = 4, ["type"] = 16}, {["value"] = 700, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--15.0 {["value"] = 4683743615731738036, ["type"] = 32}, {["lv"] = 88.15017700195, ["offset"] = -4, ["type"] = 16}, {["lv"] = 8.0, ["offset"] = 4, ["type"] = 16}, {["lv"] = 15.0, ["offset"] = 8, ["type"] = 16}, } qmxg = { {["value"] = -660, ["offset"] = 0, ["type"] = 16}, {["value"] = -660, ["offset"] = -4, ["type"] = 16}, {["value"] = -560, ["offset"] = 4, ["type"] = 16}, {["value"] = -560, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--16.0 {["value"] = 4683743615731723540, ["type"] = 32}, {["lv"] = 90.77570343018, ["offset"] = -4, ["type"] = 16}, {["lv"] = 8.0, ["offset"] = 4, ["type"] = 16}, {["lv"] = 16.0, ["offset"] = 8, ["type"] = 16}, } qmxg = { {["value"] = -660, ["offset"] = 0, ["type"] = 16}, {["value"] = -660, ["offset"] = -4, ["type"] = 16}, {["value"] = -560, ["offset"] = 4, ["type"] = 16}, {["value"] = -560, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--27.0 {["value"] = 4744542208533725184, ["type"] = 32}, {["lv"] = 27.0, ["offset"] = 4, ["type"] = 16}, } qmxg = { {["value"] = -560, ["offset"] = 0, ["type"] = 16}, {["value"] = -560, ["offset"] = 4, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--28.0 {["value"] = 4724276012378061487, ["type"] = 32}, {["lv"] = 90.48510742188, ["offset"] = -4, ["type"] = 16}, {["lv"] = 18.0, ["offset"] = 4, ["type"] = 16}, {["lv"] = 28.0, ["offset"] = 8, ["type"] = 16} } qmxg = { {["value"] = -660, ["offset"] = 0, ["type"] = 16}, {["value"] = -660, ["offset"] = -4, ["type"] = 16}, {["value"] = -560, ["offset"] = 4, ["type"] = 16}, {["value"] = -560, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--26.0 {["value"] = 4719772412750681353, ["type"] = 32}, {["lv"] = -86.45761108398, ["offset"] = -4, ["type"] = 16}, {["lv"] = 16.0, ["offset"] = 4, ["type"] = 16}, {["lv"] = 26.0, ["offset"] = 8, ["type"] = 16} } qmxg = { {["value"] = -660, ["offset"] = 0, ["type"] = 16}, {["value"] = -660, ["offset"] = -4, ["type"] = 16}, {["value"] = -560, ["offset"] = 4, ["type"] = 16}, {["value"] = -560, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "清水反胃"},--27.5 {["value"] = 4724276012378324073, ["type"] = 32}, {["lv"] = 90.4850692749, ["offset"] = -4, ["type"] = 16}, {["lv"] = 18.0, ["offset"] = 4, ["type"] = 16}, {["lv"] = 27.5, ["offset"] = 8, ["type"] = 16} } qmxg = { {["value"] = -660, ["offset"] = 0, ["type"] = 16}, {["value"] = -660, ["offset"] = -4, ["type"] = 16}, {["value"] = -560, ["offset"] = 4, ["type"] = 16}, {["value"] = -560, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) gg.toast("开启成功") end ), changan.switch("双X特效",function() changan.toast2s({"正在格机中",0xFF55AAFF},{"开启成功!",0xff67666B},0xFF55FFAA,0xaaffffff) function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find (szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len (szFullString)) break end nSplitArray[nSplitIndex] = string.sub (szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len (szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "开启成功,一共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "未搜索到数据,开启失败") end 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 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("未搜索到数据,开启失败", false) return false end else gg.toast("Not Found") return false end end function HaoGe(Nc,Type,Search,Write) gg.clearResults() gg.setRanges(Nc) 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 tPUBGMH={} local offset=Search[k][2]-base local num=Search[k][1] for i,v in ipairs(result)do tPUBGMH[#tPUBGMH+1]={} tPUBGMH[#tPUBGMH].address=v.address+offset tPUBGMH[#tPUBGMH].flags=v.flags end tPUBGMH=gg.getValues(tPUBGMH) for i,v in ipairs(tPUBGMH)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 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.sleep(400) else return false end else return false end end Name = "ʜᴇᴀᴅ ʜɪᴛᴛɪɴɢ ᴡɪᴛʜᴏᴜᴛ ᴡᴀsᴛᴇ ᴏғ ʙᴜʟʟᴇᴛ" local Nc = 16384 local Lx = 16 local Sz1 = {{-1.42781105e28, 0}} local Sz2 = {{0, 0}} HaoGe(Nc, Lx, Sz1, Sz2) qmnb = { {["memory"] = 32}, {["name"] = "ᴍᴀɪɴ ʜɪᴛᴛɪɴɢ ᴄᴏᴍᴘᴏɴᴇɴᴛ ᴀʟʟ ʙᴏᴅʏ"}, {["value"] = 4740038608910024704, ["type"] = 32}, {["lv"] = 4752423507886342144, ["offset"] = 4, ["type"] = 32}, {["lv"] = 1106509824, ["offset"] = 8, ["type"] = 32}, } qmxg = { {["value"] = 700, ["offset"] = 4, ["type"] = 16}, {["value"] = 700, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "sᴜᴘᴘᴏʀᴛ sᴋʏ sʜᴏᴏᴛ ᴠ1"}, {["value"] = 4719772412750681353, ["type"] = 32}, {["lv"] = 4742290408720039936, ["offset"] = 4, ["type"] = 32}, } qmxg = { {["value"] = -460, ["offset"] = 8, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "sᴜᴘᴘᴏʀᴛ sᴋʏ sʜᴏᴏᴛ ᴠ2"}, {["value"] = -4417614866316724128, ["type"] = 32}, {["lv"] = 4724276012378061487, ["offset"] = 4, ["type"] = 32}, } qmxg = { {["value"] = -560, ["offset"] = 12, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "sᴜᴘᴘᴏʀᴛ sᴋʏ sʜᴏᴏᴛ ᴠ3"}, {["value"] = -4416487068034336677, ["type"] = 32}, {["lv"] = 4724276012378324073, ["offset"] = 4, ["type"] = 32}, } qmxg = { {["value"] = -660, ["offset"] = 8, ["type"] = 16}, {["value"] = -660, ["offset"] = 12, ["type"] = 16}, } xqmnb(qmnb) qmnb = { {["memory"] = 32}, {["name"] = "xʜɪᴛ"}, {["value"] = 4771563806291656704, ["type"] = 32}, {["lv"] = 1110966272, ["offset"] = 4, ["type"] = 32}, {["lv"] = 4692750811720056832, ["offset"] = -4, ["type"] = 32},} qmxg = { {["value"] = 999, ["offset"] = 0, ["type"] = 16},} xqmnb(qmnb) end ), -- changan.seek("拉条演示","dylt",1,100,1), },{ changan.text("4","#161616","18sp"), changan.switch("防止标记",function() if gg.getRangesList("libgcloud.so")[1] then local t = {} t[1] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x487CC4; -- 数值地址:0x74CF8B4CC4 gg.setValues({ [1] = { address = t[1], flags = 4, value = -698416192, }, }) gg.toast("开启成功") end string.toMusic('开启成功') end, function() changan.toast2s({"正在格机中",0xFF55AAFF},{"关闭成功!断网重连",0xff67666B},0xFFFF0000,0xaaffffff) if gg.getRangesList("libgcloud.so")[1] then local t = {} t[1] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x487CC4; -- 数值地址:0x74CF8B4CC4 gg.setValues({ [1] = { address = t[1], flags = 4, value = 16843522, }, }) gg.toast("关闭成功") end string.toMusic('关闭成功') end ), changan.text("4","#161616","18sp"), changan.switch("7图加速",function() changan.toast2s({"正在格机中",0xFF55AAFF},{"开启成功!",0xff67666B},0xFF55FFAA,0xaaffffff) function setvalue(addr, type, val) if type == 4 then gg.setValues({{address=addr, value=val, flags=4}}) else gg.setValues({{address=addr, value=val, flags=16}}) end end function S_Pointer(modList, offList, is64) local base = gg.getRangesList(modList[1])[1].start local ptr = base for i,v in ipairs(offList) do ptr = gg.getPointer(ptr + v, is64) if not ptr then break end end return ptr end function LSQ_Chain(modList, offList, opt, val, flag, name) local addr = S_Pointer(modList, offList, true) if not addr then return end if opt == "冻结" then gg.addListItems({{address=addr, value=val, flags=flag, freeze=true, name=name}}) else gg.addListItems({{address=addr, value=val, flags=flag, freeze=false, name=name}}) end end -- ====================================== -- 弹窗设置 + 数值容错 local h = gg.prompt( {"高跳 2500-8000", "防摔 4~9 推荐8", "趴下移速2~4", "移动移速5~7"}, {5000, 7, 3, 7}, {"text", "text", "text", "text"}, {true, true, true, true} ) if not h then gg.toast("已取消修改") return end -- 转数字容错,防止输入非数字崩溃 for i=1,4 do h[i] = tonumber(h[i]) or 5 end -- 功能链式修改 LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x21C},"冻结",h[1],16,"443") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x214},"冻结",h[2],16,"重力") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x1168},"冻结",h[3],16,"微") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x368},"冻结",h[4],4,"移") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0xE8},"修改","0",4,"灵魂") -- 固定坐标三轴 LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x208,0x220},"冻结","136525.0",16,"x") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x208,0x224},"冻结","163002.0",16,"y") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x208,0x228},"冻结","5937.0",16,"z") gg.sleep(1700) -- 固定地址强改 local so = gg.getRangesList('libUE4.so')[1].start setvalue(so+0x63602C4,4,-721215457) setvalue(so+0xCAF4D58,4,-721215457) gg.sleep(700) -- 批量添加三轴到列表 local function addXYZ(offX,offY,offZ) local t = {"libUE4.so:bss", "Cb"} local tx = S_Pointer(t, offX, true) local ty = S_Pointer(t, offY, true) local tz = S_Pointer(t, offZ, true) gg.addListItems({{address = tx, flags = 16, freeze = false}}) gg.addListItems({{address = ty, flags = 16, freeze = false}}) gg.addListItems({{address = tz, flags = 16, freeze = false}}) end addXYZ({0x559B70,0x30,0x4B8,0x208,0x220}, {0x559B70,0x30,0x4B8,0x208,0x224}, {0x559B70,0x30,0x4B8,0x208,0x228}) -- 剩余全部功能参数 LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0xE8},"修改","167838216",4,"灵魂") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x2BF0},"修改","2",16,"1") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0xe4},"修改","999999",16,"防拉原1") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x2D14},"冻结","20",16,"30") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x70},"冻结","0.008",16,"0") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x188},"冻结","0",16,"0") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x18C},"冻结","0",16,"X轴向量0") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x190},"冻结","0",16,"0") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x200},"修改","0",16,"60000") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x218},"修改","150",16,"45") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x250},"修改","999",16,"8") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x268},"修改","3600",16,"8192") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x270},"修改","8",16,"2") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x610},"修改","0",16,"240") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x27C},"修改","999999",16,"2048防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x2b8},"冻结","-1",16,"13860") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x518,0x28C},"冻结","0.4",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x2d08},"修改","34",16,"50") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x68},"冻结","0.001",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x64},"冻结","0.001",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x19A8},"冻结","0.001",16,"慢慢来吧64位国体秒趴") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x1980},"冻结","0.001",16,"0") LSQ_Chain({'libUE4.so:bss','Cb'},{0x559B70,0x30,0x4B8,0x1058},"冻结","10",4,"8 趴下开火") end ), },{ changan.text("4","#161616","18sp"), changan.switch("登陆界面重置游客",function() changan.toast2s({"正在格机中",0xFF55AAFF},{"开启成功!",0xff67666B},0xFF55FFAA,0xaaffffff) gg.command('rm -rf /data/data/com.tencent.igce/shared_prefs /storage/emulated/0/Documents/') gg.command('mkdir /data/data/com.tencent.igce/shared_prefs') gg.command('rm-rf/data/data/com.tencent.igce/shared_prefs') gg.command('rm -rf /data/data/com.tencent.igce/files') gg.command('rm -rf $GUEST') gg.command('rm -rf /data/media/0/Android/data/com.tencent.igce/files/login-identifier.txt') gg.command('rm -rf /data/media/0/Android/data/com.tencent.igce/files/UE4Game/ShadowTrackerExtra/ShadowTrackerExtra/Intermediate') gg.command('rm -rf /data/data/com.tencent.igce/databases') gg.command('rm -rf /data/media/0/Android/data/com.tencent.igce/files/UE4Game/ShadowTrackerExtra/ShadowTrackerExtra/Intermediate') gg.command('rm -rf /data/media/0/Android/data/com.tencent.igce/files/TGPA') gg.command('rm -rf /data/media/0/Android/data/com.tencent.igce/files/ProgramBinaryCache') gg.command('iptables -I OUTPUT -d cloud.vmp.onezapp.com -j REJECT') gg.command('iptables -I INPUT -s cloud.vmp.onezapp.com -j REJECT') gg.alert('等待1分钟后退出') end ), changan.button("清水范围", function() string.toMusic("清水范围") end, function() end), changan.button("退出UI",退出) },{ changan.text("5","#161616","18sp"), } })