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 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 GotoPointer(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr 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 local function interruptThread(thread) if thread then pcall(function() thread:interrupt() end) end end -- 异步线程回调(无任务冲突检测) local function getAsyncCallback(func) return function() luajava.startThread(function() pcall(func) end) end end -- 同步线程回调(带任务冲突检测) local task local function getSyncCallback(func) return function() if task then gg.toast('有任务在运行,请稍后') return end luajava.startThread(function() task = true pcall(func) task = nil end) end end -- 直接执行同步任务 local function callSync(func) getSyncCallback(func)() end -- 通过函数名获取同步回调 local function getFuncCallback(name) local func = _ENV[name] if type(func) ~= 'function' then gg.alert('不存在功能: ' .. name) return nil end return getSyncCallback(func) end -- 按钮布局生成 local function newButton(name) if type(name) ~= 'string' then return end return { Button, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_margin = '2dp', text = name, textSize = '16sp', onClick = getFuncCallback(name) } end -- 开关布局生成 local function newSwitch(openName, closeName) if type(openName) ~= 'string' then return end return { Switch, layout_width = 'match_parent', text = openName, onCheckedChange = function(self, state) self:setText(state and (closeName or '关闭') or openName) local func = state and getFuncCallback(openName) or getFuncCallback(closeName) if func then func() end end } end -- 复选框布局生成 local function newCheckBox(openName, closeName) if type(openName) ~= 'string' then return end return { CheckBox, layout_width = 'match_parent', text = openName, onCheckedChange = function(self, state) self:setText(state and (closeName or '已选择') or openName) local func = state and getFuncCallback(openName) or getFuncCallback(closeName) if func then func() end end } end -- 多选框组布局 local function newCheckBoxGroup(radio) local layout = { LinearLayout, layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'vertical' } -- 添加标题 if type(radio[1]) == 'string' then table.insert(layout, { TextView, text = radio[1], textColor = '#ffffff' }) end -- 添加选项 local group = { LinearLayout, orientation = 'horizontal', gravity = 'center', background = '#00C92E37', layout_width = 'match_parent' } for i = 2, #radio do local item = radio[i] local name = item[1] or '未命名' local openFunc = item[2] local closeFunc = item[3] local id = name .. tostring(math.random()) -- 简易唯一ID -- 开关逻辑 local toggle = function() local state = _ENV[id] ~= '开' _ENV[id] = state and '开' or '关' (state and openFunc or closeFunc)() end table.insert(group, { CheckBox, text = name, textSize = '9sp', textColor = '#ffffff', onClick = function() luajava.newThread(function() pcall(toggle) end) end }) end table.insert(layout, group) return luajava.loadlayout(layout) end -- 单选框组布局 local function newradio(radio) local layout = { LinearLayout, layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'horizontal' } -- 添加选项 local group = { RadioGroup, orientation = 'horizontal', gravity = 'center', background = '#00C92E37', layout_width = 'match_parent' } for i = 2, #radio do local item = radio[i] table.insert(group, { RadioButton, text = item[1] or '选项', textColor = '#ffffff', textSize = '11sp', onClick = function() luajava.newThread(function() pcall(item[2]) end) end }) end table.insert(layout, group) return luajava.loadlayout(layout) end -- 简易唯一ID生成 local function guid() local seed = {'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'} local tb = {} for i = 1, 32 do table.insert(tb, seed[math.random(1, 16)]) end local sid = table.concat(tb) return string.sub(sid,1,8) .. string.sub(sid,10,12) .. string.sub(sid,21,22) .. string.sub(sid,1,6) .. string.sub(sid,21,25) 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 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 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.addListItems(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.addListItems(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.addListItems(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 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 local function X(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 local function interruptThread(thread) if thread then pcall(function() thread:interrupt() end) end 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 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 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 setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end local function interruptThread(thread) if thread then pcall(function() thread:interrupt() end) end end -- 读取 DWORD 和 FLOAT 的函数 function readD(address) return gg.getValues({{address = address, flags = gg.TYPE_DWORD}})[1].value end function readF(address) return gg.getValues({{address = address, flags = gg.TYPE_FLOAT}})[1].value end -- 设置值的函数 function setvalue(address, flags, value, freeze) local t = {} t[1] = {address = address, flags = flags, value = value, freeze = freeze or false} 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 = ti_bit and 32 or 4 local _S = nil 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 local t = {{address = _S.start + Offset[1], flags = _t}} for i = 2, #Offset do local S = gg.getValues(t) t = {{address = S[1].value + Offset[i], flags = _t}} end return t[1].address end end return string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) end -- LSQ_Chain 函数 function LSQ_Chain(so, offset, format, value, type, Function) local getRanges = function() 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 rest, ranges, sostart, valtype = {}, getRanges(), nil, gg.TYPE_DWORD if gg.getTargetInfo().x64 then 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 return Format(rest, format, value, type, Function) end end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() 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 gai(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value gg.setValues(t) end local function RUI(address) return gg.getValues({{ address = address, flags = gg.TYPE_QWORD }})[1].value end D=gg.TYPE_DWORD F=gg.TYPE_FLOAT 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 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 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 local function X(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value end function getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function gai(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value gg.setValues(t) end local function X(address) return gg.getValues({{ address = address, flags = gg.TYPE_QWORD }})[1].value end D=gg.TYPE_DWORD F=gg.TYPE_FLOAT -- 定义读取 DWORD 和 FLOAT 的函数 function readD(address) return getvalue(address, gg.TYPE_DWORD) end function readF(address) return getvalue(address, gg.TYPE_FLOAT) end -- 定义 RQI 函数(假设是读取 QWORD 类型的值) function RQI(address) return getvalue(address, gg.TYPE_QWORD) 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 getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function GotoPointer(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr 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 indIT=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 = "-- LSQ_ChainG 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 function getadd ( ) local t = { } -- 创建一个获取x坐标地址的表 so = gg.getRangesList ( 'libUE4.so' ) [ 1 ].start Uworld = RUI ( RUI ( RUI ( so + 0xCE93A70 ) + 0x30 ) + 0x440 ) -- 0x6C0A70 , 0xc0 , 0x9d0 Uleve = RUI ( Uworld + 0x20 ) Arrayaddr = RUI ( Uleve + 0xA0 ) Count = readD ( Uleve + 0xA8 ) -- 数组数量 Oneself = RUI ( RUI ( RUI ( so + 0xCE93A70 ) + 0x30 ) + 0x440 ) -- self -- gg.copyText(string.format("%X", Oneself)) MyTeam = readD ( Oneself + 0x938 ) -- 自身队伍 t [ # t + 1 ] = { } t [ # t ].x = RUI ( Oneself + 0x1b0 ) + 0x1c0 -- 表内第一个存放自身坐标地址 t [ # t ].y = RUI ( Oneself + 0x1b0 ) + 0x1c4 t [ # t ].z = RUI ( Oneself + 0x1b0 ) + 0x1c8 if Count < 0 or Count > 9999 then gg.toast ( "获取数组数量时出错" ) else for i = 0 , Count do Object = RUI ( Arrayaddr + i * 0x8 ) if ( readF ( Object + 0x2860 ) == 479.5 ) and ( readD ( Object + 0x938 ) ~= MyTeam ) then -- 判断对象是否是人物,且不是队友 t [ # t + 1 ] = { } t [ # t ].x = RUI ( Object + 0x498 ) + 0x1c0 t [ # t ].y = RUI ( Object + 0x498 ) + 0x1c4 t [ # t ].z = RUI ( Object + 0x498 ) + 0x1c8 t [ # t ].x1 = RUI ( Object + 0x1b0 ) + 0x1c0 t [ # t ].y1 = RUI ( Object + 0x1b0 ) + 0x1c4 t [ # t ].z1 = RUI ( Object + 0x1b0 ) + 0x1c8 t [ # t ].hp = Object + 0xdc0 end end end if # t < 2 then gg.toast ( "附近没有人" ) end return 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 _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 XunK_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 8.47963525e-21, 类型, 功能 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 .. "开启失败") gg.alert("选择游戏进程 ") return os.exit() 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 X(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 X(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 XunK_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 = "-- LSQ_ChainG 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 XunK_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 空空1() LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","0",4,"灵魂") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x220},"冻结","185140.0",16,"x") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x224},"冻结","107538.0",16,"y") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x228},"冻结","7765.0",16,"z") gg.sleep(2000) --64锁地皮原值:-117270918 so=gg.getRangesList('libUE4.so')[1].start py=0xCF05E44 setvalue(so+py,4,-721215457) --新加速原值:506149194 so=gg.getRangesList('libUE4.so')[1].start py=0x65ACC58 setvalue(so+py,4,-721215457) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x220} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x224} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x228} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","167838216",4,"灵魂") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x218},"冻结","150",16,"上下坡防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x250},"修改","999",16,"8") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x268},"修改","4000",16,"8192") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"冻结","9999",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x610},"修改","0",16,"240") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2B8},"冻结","-1",16,"13680") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0xE4},"修改","99999",16,"防拉原1") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x27C},"冻结","999999",16,"2048防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2E4},"修改","0",16,"7500防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x260},"修改","0",16,"60000防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x270},"冻结","8",16,"2") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x298},"修改","999999",16,"0") OP=gg.prompt({'自改加速60帧0.003-0.0035 90帧0.0025-0.0027 120帧0.0015-0.002'},{[1]='0.0026'},{[1]='number'}) if OP == nil or OP[1] == '' or OP[1] == '0' then gg.toast("取消") else local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x518,0x364} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = OP[1], freeze = true}}) end gg.toast("七图加速开启成功") string.toMusic("七图加速开启成功") end function 空空2() LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x270},"冻结","2",16,"2") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x298},"修改","0",16,"0") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x218},"修改","45",16,"上下坡防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x250},"修改","8",16,"8") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x268},"修改","8192",16,"8192") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x610},"修改","240",16,"240") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"冻结","0.05",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2B8},"冻结","13860",4,"13860") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0xE4},"修改","1",16,"防拉原1") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x27C},"冻结","2048",16,"2048防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x260},"修改","60000",16,"60000防拉") --新加速原值:506149194 so=gg.getRangesList('libUE4.so')[1].start py=0x65ACC58 setvalue(so+py,4,506149194) --64锁地皮原值:-117270918 so=gg.getRangesList('libUE4.so')[1].start py=0xCF05E44 setvalue(so+py,4,-117270918) gg.clearList() Unfreeze() gg.toast("加速关闭成功") string.toMusic("加迷关闭成功") end function 空空3() LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","0",4,"灵魂") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x220},"冻结","154719.0",16,"x") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x224},"冻结","107166.0",16,"y") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x228},"冻结","308.0",16,"z") gg.sleep(2000) --64锁地皮原值:-117270918 so=gg.getRangesList('libUE4.so')[1].start py=0xCF05E44 setvalue(so+py,4,-721215457) --新加速原值:506149194 so=gg.getRangesList('libUE4.so')[1].start py=0x65ACC58 setvalue(so+py,4,-721215457) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x220} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x224} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x228} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","167838216",4,"灵魂") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x218},"冻结","150",16,"上下坡防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x250},"修改","999",16,"8") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x268},"修改","4000",16,"8192") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"冻结","9999",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x610},"修改","0",16,"240") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2B8},"冻结","-1",16,"13680") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0xE4},"修改","99999",16,"防拉原1") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x27C},"冻结","999999",16,"2048防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2E4},"修改","0",16,"7500防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x260},"修改","0",16,"60000防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x270},"冻结","8",16,"2") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x298},"修改","999999",16,"0") OP=gg.prompt({'自改加速60帧0.003-0.0035 90帧0.0025-0.0027 120帧0.0015-0.002'},{[1]='0.0026'},{[1]='number'}) if OP == nil or OP[1] == '' or OP[1] == '0' then gg.toast("取消") else local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x518,0x364} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = OP[1], freeze = true}}) end gg.toast("五图加速开启成功") string.toMusic("五图加速开启成功") end function 空空4() local h = gg.prompt( {"高跳 2500-8000", "防摔 4~9 推荐8", "趴下移速 3~5 推荐4.3", "趴下/跳高开火开镜"}, {3500, 4, 4, true}, -- 默认打勾 {"text", "text", "text", "checkbox"}, -- ✅ 关键修正:GG里的复选框类型是checkbox,不是bool {true, true, true, true} ) -- 容错:用户取消弹窗则直接退出 if not h then gg.toast("已取消修改") return end -- 链式冻结修改(LSQ_Chain需你提前定义) LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x21C},"冻结",h[1],16,"443") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x214},"冻结",h[2],16,"重力") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1168},"冻结",h[3],16,"微") -- 配置文件路径 LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"冻结","9999",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x64},"冻结","0.0001",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x68},"冻结","0.001",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566f70,0x30,0x4B8,0x19c0},"冻结","0.001",16,"秒趴") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E38},"修改","33",16,"50") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E30},"修改","95",16,"88") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE4},"冻结",0.9,16,"慢动作") -- 勾选自动攀爬才生效 if h[4] then LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1058},"冻结","15",4,"8 趴下开火") end gg.toast("自改高跳开启成功") string.toMusic("自改高跳开启成功") end function 空空5() LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x21C},"冻结","443",16,"443") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x214},"冻结","1",16,"重力") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1168},"冻结","1",16,"微") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"冻结","0.05",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x64},"冻结","0.1",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x68},"冻结","0.1",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566970,0x30,0x4B8,0x19c0},"冻结","0.1",16,"秒趴") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E38},"冻结","50",16,"50") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E30},"修改","88",16,"88") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE4},"冻结",1,16,"慢动作") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1058},"冻结","8",4,"8 趴下开火") gg.clearList() Unfreeze() gg.toast("高跳关闭成功") string.toMusic("高跳关闭成功") end function 空空6() local h = gg.prompt( {"高跳 2500-8000", "防摔 3-5 推荐3", "移速 15~30推荐20","变速0.8-0.3推荐0.5", "趴下/跳高开火开镜"}, {4000, 3, 20, 0.5,true}, -- 默认打勾 {"text", "text", "text","text", "checkbox"}, -- ✅ 关键修正:GG里的复选框类型是checkbox,不是bool {true, true, true,true, true} ) -- 容错:用户取消弹窗则直接退出 if not h then gg.toast("已取消修改") return end -- 链式冻结修改(LSQ_Chain需你提前定义) LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x21C},"冻结",h[1],16,"443") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x214},"冻结",h[2],16,"重力") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1168},"冻结",h[3],16,"微") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE4},"冻结",h[4],16,"慢动作") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x64},"冻结","0.0001",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x68},"冻结","0.001",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566970,0x30,0x4B8,0x19c0},"冻结","0.001",16,"秒趴") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E38},"修改","33",16,"50") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E30},"修改","95",16,"88") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566970,0x30,0x4B8,0x518,0x28C},"冻结","0.05",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2B8},"冻结","54148",4,"卡脚16896") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x758},"冻结","95",16,"减速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x760},"冻结","0.6",16,"变速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x770},"冻结","0.00013",16,"变速") if h[5] then LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1058},"冻结","15",4,"8 趴下开火") end gg.toast("开启成功") string.toMusic("开启成功") end function 空空7() LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x21C},"冻结","443",16,"443") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x214},"冻结","1",16,"重力") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1168},"冻结","1",16,"微") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE4},"冻结",1,16,"慢动作") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x64},"冻结","0.1",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x68},"冻结","0.1",16,"趴下快起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566970,0x30,0x4B8,0x19c0},"冻结","0.1",16,"秒趴") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E38},"冻结","50",16,"50") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x2E30},"修改","88",16,"88") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2B8},"冻结","13860",4,"13860") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"冻结","0.05",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x758},"冻结","1",16,"减速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x760},"冻结","1",16,"变速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x770},"冻结","1",16,"变速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x1058},"冻结","8",4,"8 趴下开火") gg.clearList() Unfreeze() gg.toast("关闭成功") string.toMusic("关闭成功") end function 空空飞天1() LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x64},"冻结","0.0001",16,"后摇") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"冻结","0.4",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x68},"冻结","0.0001",16,"流畅趴下") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2B8},"冻结","0",16,"13680") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x268+0x30},"冻结","999",16,"空中急停") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x214},"冻结","0",16,"重力") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0xE4},"冻结","999999",16,"后摇") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x27C},"冻结","4000",16,"2048") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2B8},"冻结","0",16,"13680") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x268},"冻结","99999",16,"8192") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x758},"冻结","90",16,"减速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x760},"冻结","0.5",16,"变速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x20,0x400,0x770},"冻结","0.0001",16,"变速") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x2b8},"冻结","-1",16,"13860") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x268},"修改","4000",16,"8192") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x28C},"修改","0.4",16,"0.05") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x610},"修改","0",16,"240") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x194},"冻结","0",16,"定") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x298},"修改","9999",16,"惯性") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x218},"修改","150",16,"上下坡防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x518,0x27C},"冻结","99999",16,"2048防拉") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0xe4},"修改","99999",16,"防拉原1") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x68},"冻结","0.001",16,"流畅爬起") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x64},"冻结","0.001",16,"流畅爬起") so = gg.getRangesList('libUE4.so')[1].start ttAddr = GotoPointer(so,{0x1305AF70,0x30,0x4B8,0x116C}) zAddr = GotoPointer(so,{0x1305AF70,0x30,0x4B8,0x208,0x228}) OP=gg.prompt({'上升速度调节推荐\n60FPS40~50\n90FPS30~40\n120FPS20~30'},{[1]='25'},{[1]='number'}) zvg = true if OP == nil or OP[1] == '' or OP[1] == '0' then gg.toast("取消") else while zvg do tt = getvalue(ttAddr, 16) if tt == 120 then setvalue(zAddr, gg.TYPE_FLOAT, readF(zAddr) + OP[1], true) else local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x228} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) end end end end function 空空飞天2() end draw.setSize(50) draw.setStyle('填充') draw3 = require('draw3') text1 = draw3.text('卡密自行购买@lhztop1',300,350) draw.setColor('#FF00F0') string.toMusic('欢迎使用李鸿章国体加速 已适配新版本') local floatingWindowManager = require('floatingWindowManager') floatingWindowManager:init() floatingWindowManager:newWindow(('李鸿章nb'):format(floatingWindowManager.version), { onCreate = function(floatingWindow) floatingWindow:addlayout({ ScrollView, layout_margin = '10dp', layout_width = 'match_parent', layout_height = 'match_parent', { LinearLayout, layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'vertical', padding = '5dp', { Button, background = { GradientDrawable, cornerRadius='10dp', color='0x80b5dbff', }, layout_width = 'match_parent', layout_margin = '2dp', text = '选择游戏进程', textSize = '16sp', onClick = function() gg.setProcessX() string.toMusic("请选择进程") gg.toast("请选择进程") end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='0x80b5dbff', }, layout_width = 'match_parent', layout_margin = '2dp', text = '防闪', textSize = '16sp', onClick = function() if gg.getRangesList("libanogs.so:bss")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0x300; -- 数值地址:0x7A74D89300 t[2] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0x3F8; -- 数值地址:0x7A74D893F8 t[3] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0x430; -- 数值地址:0x7A74D89430 t[4] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0x550; -- 数值地址:0x7A74D89550 t[5] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0x5D8; -- 数值地址:0x7A74D895D8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 4096, freeze = true, }, [2] = { address = t[2], flags = 4, value = 4096, freeze = true, }, [3] = { address = t[3], flags = 4, value = 4096, freeze = true, }, [4] = { address = t[4], flags = 4, value = 4096, freeze = true, }, [5] = { address = t[5], flags = 4, value = 4096, freeze = true, string.toMusic('开启成功') }, }) end gg.toast("防闪开启成功") string.toMusic("防闪开启成功") end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='0x80b5dbff', }, layout_width = 'match_parent', layout_margin = '2dp', text = '大厅', textSize = '16sp', onClick = function() floatingWindowManager:start('[大厅区]') end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='0x80b5dbff', }, layout_width = 'match_parent', layout_margin = '2dp', text = '加速', textSize = '16sp', onClick = function() floatingWindowManager:start('[移动区]') end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='0x80b5dbff', }, layout_width = 'match_parent', layout_margin = '2dp', text = '飞天', textSize = '16sp', onClick = function() floatingWindowManager:start('[飞天区]') end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='0x80b5dbff', }, layout_width = 'match_parent', layout_margin = '2dp', text = '免root注入', textSize = '16sp', onClick = function() floatingWindowManager:start('注入') end }, } }) end, onDestroy = function() end }) floatingWindowManager:newWindow('[大厅区]', { onCreate = function(floatingWindow) floatingWindow:addlayout({ ScrollView, layout_width = 'match_parent', layout_height = 'match_parent', { LinearLayout, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'vertical', padding = '5dp', {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="广角", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then -- 广角原值:1.0 so = gg.getRangesList('libUE4.so')[1].start py = 0x38D6B68 -- 弹出输入框,让用户输入想要修改的值 local input = gg.prompt( {"请输入广角修改值:"}, {"2.5"}, {"number"} ) if input ~= nil then setvalue(so + py, 16, input[1]) gg.toast("广角已修改为: " .. input[1]) else gg.toast("已取消修改") end gg.toast("广角开启成功") string.toMusic("广角开启成功") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="一键功能", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then --除雾①原值:-1119853920 so=gg.getRangesList('libUE4.so')[1].start py=0xB3DFBE0 setvalue(so+py,4,-721215457) --除雾②原值:505872643 so=gg.getRangesList('libUE4.so')[1].start py=0xB3DFC60 setvalue(so+py,4,-721215457) --无后原值16原 8.95340295e-21:506011648 so=gg.getRangesList('libUE4.so')[1].start py=0x6A49378 setvalue(so+py,16,8.47694692e-21) --瞬击原值16原 8.95857929e-21 :506018056 so=gg.getRangesList('libUE4.so')[1].start py=0x6B48104 setvalue(so+py,16,8.95671814E-21) --开镜防抖原值 原值D :-1119030272 so=gg.getRangesList('libUE4.so')[1].start py=0x71F0678 setvalue(so+py,4,-1119390720) --聚点原值16原 8.52492339e-21:505481216 so=gg.getRangesList('libUE4.so')[1].start py=0x6A41F10 setvalue(so+py,16,8.47963525E-21) gg.toast("一键功能开启成功") string.toMusic("一键功能开启成功") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="锁120", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then 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("\xE7\xBE\xA4\x3A".._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 = {0x5B7C60, 0x6F8} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 120, freeze = true}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x5B7C60, 0x6FC} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 120, freeze = true}}) string.toMusic('锁120开启成功') gg.toast("锁120开启成功") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text=" 隐藏水印", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then draw.remove()--隐藏水印 string.toMusic("隐藏水印") else draw.setSize(50) draw.setStyle('填充') draw3 = require('draw3') text1 = draw3.text('卡密自行购买@lhztop1',300,350) draw.setColor('#FF00F0') string.toMusic("显示水印") end end }, }, } }) end }) floatingWindowManager:newWindow('[移动区]', { onCreate = function(floatingWindow) floatingWindow:addlayout({ ScrollView, layout_width = 'match_parent', layout_height = 'match_parent', { LinearLayout, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'vertical', padding = '5dp', {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="防标记", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then --过标记① 原值:1033081774 so=gg.getRangesList('libgcloud.so')[1].start py=0x47A8C8 setvalue(so+py,4,-698416192) --过标记②原值:16843522 so=gg.getRangesList('libgcloud.so')[1].start py=0x47B464 setvalue(so+py,4,-698416192) gg.toast("防标记开启成功") string.toMusic("防标记开启成功") else --过标记① 原值:1033081774 so=gg.getRangesList('libgcloud.so')[1].start py=0x47A8C8 setvalue(so+py,4, 1033081774) --过标记②原值:16843522 so=gg.getRangesList('libgcloud.so')[1].start py=0x47B464 setvalue(so+py,4, 16843522) gg.toast("防标记关闭成功请等待5秒") string.toMusic("防标记关闭成功请等待5秒") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="七图加速", textColor= "#1E90FF",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(空空1) floatingWindow:setCache(cacheName, thread1) else local thread1 = luajava.startThread(空空2) floatingWindow:setCache(cacheName, thread1) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="五图加速", textColor= "#1E90FF",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(空空3) floatingWindow:setCache(cacheName, thread1) else local thread1 = luajava.startThread(空空2) floatingWindow:setCache(cacheName, thread1) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="自改高跳", textColor= "#1E90FF",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(空空4) floatingWindow:setCache(cacheName, thread1) else local thread1 = luajava.startThread(空空5) floatingWindow:setCache(cacheName, thread1) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="判断跳远", textColor= "#1E90FF",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(空空6) floatingWindow:setCache(cacheName, thread1) else local thread1 = luajava.startThread(空空7) floatingWindow:setCache(cacheName, thread1) end end }, }, } }) end }) floatingWindowManager:newWindow('[飞天区]', { onCreate = function(floatingWindow) floatingWindow:addlayout({ ScrollView, layout_width = 'match_parent', layout_height = 'match_parent', { LinearLayout, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'vertical', padding = '5dp', {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="防标记", textColor= "#1E90FF",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then --过标记① 原值:1033081774 so=gg.getRangesList('libgcloud.so')[1].start py=0x47A8C8 setvalue(so+py,4,-698416192) --过标记②原值:16843522 so=gg.getRangesList('libgcloud.so')[1].start py=0x47B464 setvalue(so+py,4,-698416192) string.toMusic("开启成功") else --过标记① 原值:1033081774 so=gg.getRangesList('libgcloud.so')[1].start py=0x47A8C8 setvalue(so+py,4, 1033081774) --过标记②原值:16843522 so=gg.getRangesList('libgcloud.so')[1].start py=0x47B464 setvalue(so+py,4, 16843522) string.toMusic("关闭成功") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="防拉", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then choice=gg.alert("选择","七图","五图","原地") if choice==1 or choice==2 or choice==3 then end if choice==1 then LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","0",4,"灵魂") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x220},"冻结","185140.0",16,"x") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x224},"冻结","107538.0",16,"y") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x228},"冻结","7765.0",16,"z") gg.sleep(2000) --64锁地皮原值:-117270918 so=gg.getRangesList('libUE4.so')[1].start py=0xCF05E44 setvalue(so+py,4,-721215457) --新加速原值:506149194 so=gg.getRangesList('libUE4.so')[1].start py=0x65ACC58 setvalue(so+py,4,-721215457) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x220} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x224} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x228} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","167838216",4,"灵魂") end if choice==2 then LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","0",4,"灵魂") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x220},"冻结","154719.0",16,"x") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x224},"冻结","107166.0",16,"y") LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0x208,0x228},"冻结","308.0",16,"z") gg.sleep(2000) --64锁地皮原值:-117270918 so=gg.getRangesList('libUE4.so')[1].start py=0xCF05E44 setvalue(so+py,4,-721215457) --新加速原值:506149194 so=gg.getRangesList('libUE4.so')[1].start py=0x65ACC58 setvalue(so+py,4,-721215457) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x220} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x224} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x566F70,0x30,0x4B8,0x208,0x228} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, freeze = false}}) LSQ_Chain({'libUE4.so:bss','Cb'},{0x566F70,0x30,0x4B8,0xE8},"修改","167838216",4,"灵魂") end if choice==3 then --64锁地皮原值:-117270918 so=gg.getRangesList('libUE4.so')[1].start py=0xCF05E44 setvalue(so+py,4,-721215457) end end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="判断定点飞天", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(空空飞天1) floatingWindow:setCache(cacheName, thread1) else local thread1 = luajava.startThread(空空飞天2) floatingWindow:setCache(cacheName, thread1) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="关闭定点", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then end end }, }, } }) end }) floatingWindowManager:newWindow('注入', { onCreate = function(floatingWindow) floatingWindow:addlayout({ ScrollView, layout_width = 'match_parent', layout_height = 'match_parent', { LinearLayout, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'vertical', padding = '5dp', {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="自选so注入", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then os.execute("mkdir -p /storage/emulated/0/") -- 选择两个文件 FY1 = gg.prompt({ "请选择so文件", "请选择inject文件" }, { "/sdcard/", "/sdcard/" }, { "file", "file" }) if FY1 then local file1Path = FY1[1] local file2Path = FY1[2] local destDir = "/storage/emulated/0/李鸿章/" -- 固定的目标文件名 local file1NewName = "libkk.so" local file2NewName = "64bit" -- 复制文件并重命名 os.execute("cp " .. file1Path .. " " .. destDir .. file1NewName) os.execute("cp " .. file2Path .. " " .. destDir .. file2NewName) gg.toast("文件已移动并重命名:\n" .. file1NewName .. "\n" .. file2NewName) end file.cpp(("eNq1U0tOwzAQ3fsUgwn9LBI3otAFihCCDdt2WZXKdSaJ1fwUu4hS9UBcgQtxDdykP1FoIwSKFSnxvM+Mn8/PmJorjQmbyJSpiBAgg/79+OGx71GmdFbwEBkms5hr9FmHfby9m8WoqcsLmeqxyOKsaLVhQeJM8BjKb89yiYpkoMmSkJAnOM6l77XysMAc7ADok8gSR2MqMNWODAXSNpEBDMF+BWptEBRGN6AjTAlPQGleaLBT+Aplqx+YS7GCKWeGXWeQx1xFd0LLZ6nnFbN1a8AInS0nvkgNLgkkUTEaX65z9Sde9+YCly7QamR0Tw9jhT+WmX0wT5GAXQTAfK559TroO5aT6dRRWZ3a6+5E6pJYVF1Zi/U5L7c89CgDEVGS+dDr9eqZOtQpPfyJSNXN+hTqDQlG0GiQoTHUMkkyQRLQvODNWtg2BQ+oMUU3LHaNaf9GsQTuy53K1LEk7QIH64h3TMR3YQdyuodv7hvYZpq1IvBfOf4EWAaPKw"):base64("de"):unzip()) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="注入上次选择的追踪", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then file.cpp(("eNq1U0tOwzAQ3fsUgwn9LBI3otAFihCCDdt2WZXKdSaJ1fwUu4hS9UBcgQtxDdykP1FoIwSKFSnxvM+Mn8/PmJorjQmbyJSpiBAgg/79+OGx71GmdFbwEBkms5hr9FmHfby9m8WoqcsLmeqxyOKsaLVhQeJM8BjKb89yiYpkoMmSkJAnOM6l77XysMAc7ADok8gSR2MqMNWODAXSNpEBDMF+BWptEBRGN6AjTAlPQGleaLBT+Aplqx+YS7GCKWeGXWeQx1xFd0LLZ6nnFbN1a8AInS0nvkgNLgkkUTEaX65z9Sde9+YCly7QamR0Tw9jhT+WmX0wT5GAXQTAfK559TroO5aT6dRRWZ3a6+5E6pJYVF1Zi/U5L7c89CgDEVGS+dDr9eqZOtQpPfyJSNXN+hTqDQlG0GiQoTHUMkkyQRLQvODNWtg2BQ+oMUU3LHaNaf9GsQTuy53K1LEk7QIH64h3TMR3YQdyuodv7hvYZpq1IvBfOf4EWAaPKw"):base64("de"):unzip()) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="YY", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local files = { { name = "Inject 程序(先执行这个)", url = "https://www.mpimg.cn/down.php/be87bf42b50d3115e1807eda984add35.file", path = "/storage/emulated/0/李鸿章/64bit" }, } function httpDownload(url, path) gg.toast("开始下载...") local r = gg.makeRequest(url) if not r or r.code ~= 200 then gg.alert("下载失败\n状态码: "..tostring(r and r.code)) return false end local f = io.open(path, "wb") if not f then gg.alert("无法写入文件\n路径: "..path) return false end f:write(r.content) f:close() gg.toast("下载完成") return true end local item = files[1] if item then if httpDownload(item.url, item.path) then gg.alert("李鸿章") end else gg.alert("未找到可下载的文件项。") os.exit() end local DOWNLOAD_URL = "https://www.mpimg.cn/down.php/3a38f0844cda3d1291ff858e9ef91a4d.so"--XX追踪 local SAVE_PATH = "/storage/emulated/0/李鸿章/libkk.so" -- ============================= gg.toast("开始下载...") local ok, err = file.download(DOWNLOAD_URL, SAVE_PATH) if ok then gg.alert("下载成功!\n\n文件路径:\n" .. SAVE_PATH) else gg.alert("下载失败!\n\n错误:\n" .. tostring(err)) end loadYunLua('https://www.mpimg.cn/down.php/ae2bb9af6930a51c3d3ec56f99cb10c9.lua') gg.alert("注入成功马上出现悬浮窗") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="百川", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local files = { { name = "Inject 程序(先执行这个)", url = "https://www.mpimg.cn/down.php/be87bf42b50d3115e1807eda984add35.file", path = "/storage/emulated/0/李鸿章/64bit" }, } function httpDownload(url, path) gg.toast("开始下载...") local r = gg.makeRequest(url) if not r or r.code ~= 200 then gg.alert("下载失败\n状态码: "..tostring(r and r.code)) return false end local f = io.open(path, "wb") if not f then gg.alert("无法写入文件\n路径: "..path) return false end f:write(r.content) f:close() gg.toast("下载完成") return true end local item = files[1] if item then if httpDownload(item.url, item.path) then gg.alert("李鸿章") end else gg.alert("未找到可下载的文件项。") os.exit() end local DOWNLOAD_URL = "https://www.mpimg.cn/down.php/68cf92d4cf8316851ae9712b681a32f0.so"--XX追踪 local SAVE_PATH = "/storage/emulated/0/李鸿章/libkk.so" -- ============================= gg.toast("开始下载...") local ok, err = file.download(DOWNLOAD_URL, SAVE_PATH) if ok then gg.alert("下载成功!\n\n文件路径:\n" .. SAVE_PATH) else gg.alert("下载失败!\n\n错误:\n" .. tostring(err)) end loadYunLua('https://www.mpimg.cn/down.php/ae2bb9af6930a51c3d3ec56f99cb10c9.lua') gg.alert("注入成功马上出现悬浮窗") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="故雪", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local files = { { name = "Inject 程序(先执行这个)", url = "https://www.mpimg.cn/down.php/be87bf42b50d3115e1807eda984add35.file", path = "/storage/emulated/0/李鸿章/64bit" }, } function httpDownload(url, path) gg.toast("开始下载...") local r = gg.makeRequest(url) if not r or r.code ~= 200 then gg.alert("下载失败\n状态码: "..tostring(r and r.code)) return false end local f = io.open(path, "wb") if not f then gg.alert("无法写入文件\n路径: "..path) return false end f:write(r.content) f:close() gg.toast("下载完成") return true end local item = files[1] if item then if httpDownload(item.url, item.path) then gg.alert("李鸿章") end else gg.alert("未找到可下载的文件项。") os.exit() end local DOWNLOAD_URL = "https://www.mpimg.cn/down.php/b0c26f01510a878226f4f7888d5358a8.so"--XX追踪 local SAVE_PATH = "/storage/emulated/0/李鸿章/libkk.so" -- ============================= gg.toast("开始下载...") local ok, err = file.download(DOWNLOAD_URL, SAVE_PATH) if ok then gg.alert("下载成功!\n\n文件路径:\n" .. SAVE_PATH) else gg.alert("下载失败!\n\n错误:\n" .. tostring(err)) end loadYunLua('https://www.mpimg.cn/down.php/ae2bb9af6930a51c3d3ec56f99cb10c9.lua') gg.alert("注入成功马上出现悬浮窗") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="百川", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local files = { { name = "Inject 程序(先执行这个)", url = "https://www.mpimg.cn/down.php/be87bf42b50d3115e1807eda984add35.file", path = "/storage/emulated/0/李鸿章/64bit" }, } function httpDownload(url, path) gg.toast("开始下载...") local r = gg.makeRequest(url) if not r or r.code ~= 200 then gg.alert("下载失败\n状态码: "..tostring(r and r.code)) return false end local f = io.open(path, "wb") if not f then gg.alert("无法写入文件\n路径: "..path) return false end f:write(r.content) f:close() gg.toast("下载完成") return true end local item = files[1] if item then if httpDownload(item.url, item.path) then gg.alert("李鸿章") end else gg.alert("未找到可下载的文件项。") os.exit() end local DOWNLOAD_URL = "https://www.mpimg.cn/down.php/66aef7983e12ad94d48e95c3ce8fa32b.so"--XX追踪 local SAVE_PATH = "/storage/emulated/0/李鸿章/libkk.so" -- ============================= gg.toast("开始下载...") local ok, err = file.download(DOWNLOAD_URL, SAVE_PATH) if ok then gg.alert("下载成功!\n\n文件路径:\n" .. SAVE_PATH) else gg.alert("下载失败!\n\n错误:\n" .. tostring(err)) end loadYunLua('https://www.mpimg.cn/down.php/ae2bb9af6930a51c3d3ec56f99cb10c9.lua') gg.alert("注入成功马上出现悬浮窗") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="小青柠", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local files = { { name = "Inject 程序(先执行这个)", url = "https://www.mpimg.cn/down.php/be87bf42b50d3115e1807eda984add35.file", path = "/storage/emulated/0/李李鸿章/64bit" }, } function httpDownload(url, path) gg.toast("开始下载...") local r = gg.makeRequest(url) if not r or r.code ~= 200 then gg.alert("下载失败\n状态码: "..tostring(r and r.code)) return false end local f = io.open(path, "wb") if not f then gg.alert("无法写入文件\n路径: "..path) return false end f:write(r.content) f:close() gg.toast("下载完成") return true end local item = files[1] if item then if httpDownload(item.url, item.path) then gg.alert("李鸿章") end else gg.alert("未找到可下载的文件项。") os.exit() end local DOWNLOAD_URL = "https://www.mpimg.cn/down.php/226e5cc992b1501d9e791f34a098d1c6.so"--XX追踪 local SAVE_PATH = "/storage/emulated/0/李鸿章/libkk.so" -- ============================= gg.toast("开始下载...") local ok, err = file.download(DOWNLOAD_URL, SAVE_PATH) if ok then gg.alert("下载成功!\n\n文件路径:\n" .. SAVE_PATH) else gg.alert("下载失败!\n\n错误:\n" .. tostring(err)) end loadYunLua('https://www.mpimg.cn/down.php/ae2bb9af6930a51c3d3ec56f99cb10c9.lua') gg.alert("注入成功马上出现悬浮窗") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="BAN", textColor= "#00FF00",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="210dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local files = { { name = "Inject 程序(先执行这个)", url = "https://www.mpimg.cn/down.php/be87bf42b50d3115e1807eda984add35.file", path = "/storage/emulated/0/李鸿章/64bit" }, } function httpDownload(url, path) gg.toast("开始下载...") local r = gg.makeRequest(url) if not r or r.code ~= 200 then gg.alert("下载失败\n状态码: "..tostring(r and r.code)) return false end local f = io.open(path, "wb") if not f then gg.alert("无法写入文件\n路径: "..path) return false end f:write(r.content) f:close() gg.toast("下载完成") return true end local item = files[1] if item then if httpDownload(item.url, item.path) then gg.alert("李鸿章") end else gg.alert("未找到可下载的文件项。") os.exit() end local DOWNLOAD_URL = "https://www.mpimg.cn/down.php/ab56286493371257687bd978ad218be7.so"--XX追踪 local SAVE_PATH = "/storage/emulated/0/李鸿章/libkk.so" -- ============================= gg.toast("开始下载...") local ok, err = file.download(DOWNLOAD_URL, SAVE_PATH) if ok then gg.alert("下载成功!\n\n文件路径:\n" .. SAVE_PATH) else gg.alert("下载失败!\n\n错误:\n" .. tostring(err)) end loadYunLua('https://www.mpimg.cn/down.php/ae2bb9af6930a51c3d3ec56f99cb10c9.lua') gg.alert("注入成功马上出现悬浮窗") end end }, }, } }) end }) floatingWindowManager:run() --------------------------------------------- --------------------------------------------- --------------------------------------------- --------------------------------------------- --------------------------------------------- --------------------------------------------->