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 BC(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value end function getvalue(address, flags) return gg.getValues({{address = address, flags = flags}})[1].value end function WBC(addr, types, i, freeze) if i then gg.setValues({{address = addr, flags = types, value = i}}) end if freeze then gg.addListItems({{ address = addr, flags = types, value = i or getvalue(addr, types), -- 没有i就用当前地址的值 freeze = true }}) elseif freeze == false then gg.addListItems({{address = addr, flags = types, freeze = false}}) end end function Unfreeze() local t = gg.getListItems() for k, v in pairs(t) do t[k].freeze = false end gg.addListItems(t) 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 TX() UE4bss = gg.getRangesList("libUE4.so:bss")[1].start kzq = BC(BC(BC(UE4bss+0x566F70)+0x30)+0x540) zs = BC(kzq+0x618) end function SS() UE4 = gg.getRangesList("libUE4.so")[1].start UE4bss = gg.getRangesList("libUE4.so:bss")[1].start kzq = BC(BC(UE4bss+0x566F70)+0x30) ys = BC(kzq+0x540)--颜色 end function djtx() menu = gg.choice({ '大X特效',--3 '双X特效',--3 '细X特效',--3 '细长特效',--3 '全屏特效'}, 2026,os.date'') if menu == 1 then tx1() end if menu == 2 then tx2() end if menu == 3 then tx3() end if menu == 4 then tx4() end if menu == 5 then tx5() end end function tx1() TX() WBC(zs+0x14,16,1600) WBC(zs+0x54,16,1600) WBC(zs+0x94,16,1600) WBC(zs+0xD4,16,1600) WBC(zs+0x10,16,300) WBC(zs+0x50,16,300) WBC(zs+0x90,16,300) WBC(zs+0xD0,16,300) end function tx2() TX() WBC(zs+0x10,16,9999) WBC(zs+0x50,16,9999) WBC(zs+0x90,16,9999) WBC(zs+0xD0,16,9999) end function tx3() TX() WBC(zs+0x14,16,1600) WBC(zs+0x54,16,1600) WBC(zs+0x94,16,1600) WBC(zs+0xD4,16,1600) WBC(zs+0x10,16,150) WBC(zs+0x50,16,150) WBC(zs+0x90,16,150) WBC(zs+0xD0,16,150) end function tx4() TX() WBC(zs+0x14,16,1600) WBC(zs+0x54,16,1600) WBC(zs+0x94,16,1600) WBC(zs+0xD4,16,1600) end function tx5() TX() WBC(zs+0x14,16,9999) WBC(zs+0x54,16,9999) WBC(zs+0x94,16,9999) WBC(zs+0xD4,16,9999) WBC(zs+0x10,16,9999) WBC(zs+0x50,16,9999) WBC(zs+0x90,16,9999) WBC(zs+0xD0,16,9999) end function jzys() menu = gg.choice({ '红色特效',--1 '红蓝特效',--2 '红黄特效',--3 '黑红特效',--4 '蓝红特效',--4 '蓝紫特效',--4 '绿黄特效',--4 '青黄特效'},--5 2026,os.date'') if menu == 1 then txbs1() end if menu == 2 then txbs2() end if menu == 3 then txbs3() end if menu == 4 then txbs4() end if menu == 5 then txbs5() end if menu == 6 then txbs6() end if menu == 7 then txbs7() end if menu == 8 then txbs8() end end function txbs1() SS() WBC(ys+0x64c,16,1) WBC(ys+0x650,16,0) WBC(ys+0x654,16,0) end function txbs2() SS() WBC(ys+0x64c,16,0) WBC(ys+0x650,16,0) WBC(ys+0x654,16,1) end function txbs3() SS() WBC(ys+0x64c,16,1) WBC(ys+0x650,16,1) WBC(ys+0x654,16,0) end function txbs4() SS() WBC(ys+0x658,16,0) WBC(ys+0x65C,16,0) WBC(ys+0x660,16,0) WBC(ys+0x64c,16,1) WBC(ys+0x650,16,0) WBC(ys+0x654,16,0) end function txbs5() SS() WBC(ys+0x658,16,1) WBC(ys+0x65C,16,0) WBC(ys+0x660,16,0) WBC(ys+0x664,16,1) WBC(ys+0x64c,16,1) WBC(ys+0x650,16,0) WBC(ys+0x654,16,0) end function txbs6() SS() WBC(ys+0x658,16,1) WBC(ys+0x65C,16,0) WBC(ys+0x660,16,0) WBC(ys+0x664,16,1) WBC(ys+0x64c,16,1) WBC(ys+0x650,16,0) WBC(ys+0x654,16,1) end function txbs7() SS() WBC(ys+0x658,16,0) WBC(ys+0x65C,16,0) WBC(ys+0x660,16,1) WBC(ys+0x664,16,0) WBC(ys+0x64c,16,1) WBC(ys+0x650,16,1) WBC(ys+0x654,16,0) end function txbs8() SS() WBC(ys+0x658,16,1) WBC(ys+0x65C,16,0) WBC(ys+0x660,16,1) WBC(ys+0x664,16,1) WBC(ys+0x64c,16,1) WBC(ys+0x650,16,1) WBC(ys+0x654,16,0) end function B1() qmnb = { {["memory"] = 32}, {["name"] = "范围开启成功"}, {["value"] = 7.201348781585693, ["type"] = 16}, {["lv"] = 15.75, ["offset"] = 12, ["type"] = 16} } qmxg = { {["value"]=55,["offset"] =12,["type"] =16} } xqmnb(qmnb) string.toMusic("范围开启成功") end function B2() qmnb = { {["memory"] = 32}, {["name"] = "范围开启成功"}, {["value"] = 7.201348781585693, ["type"] = 16}, {["lv"] = 15.75, ["offset"] = 12, ["type"] = 16} } qmxg = { {["value"]=65,["offset"] =12,["type"] =16} } xqmnb(qmnb) string.toMusic("范围开启成功") end gg.setConfig("快速冻结", 1) gg.setConfig("冻结间隔",1) local floatingWindowManager = require('floatingWindowManager') floatingWindowManager:init() gg.setConfig("快速冻结", 1) gg.setConfig("冻结间隔",1) floatingWindowManager:newWindow(('小航范围'):format(floatingWindowManager.version), { onCreate = function(floatingWindow) floatingWindow:addlayout({ ScrollView, layout_margin = '0dp', layout_width = 'match_parent', layout_height = 'match_parent', { LinearLayout, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_height = 'match_parent', orientation = 'vertical', padding = '5dp', { Button, background = { GradientDrawable, cornerRadius='10dp', color='#5000000', }, layout_width = 'match_parent', layout_margin = '1dp', text = '配置进程', textColor= "#00FFFF", textSize = '16sp', onClick = function() gg.setProcessX() gg.setConfig("快速冻结", 1) gg.setConfig("冻结间隔",1) string.toMusic("选择进程") end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='#5000000', }, layout_width = 'match_parent', layout_margin = '1dp', text = '范围区域', textColor= "#00FFFF", textSize = '16sp', onClick = function() floatingWindowManager:start('小航[范围]') end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='#5000000', }, layout_width = 'match_parent', layout_margin = '1dp', text = '腾讯防闪', textColor= "#00FFFF", textSize = '16sp', onClick = function() local t = {"libanogs.so:bss", "Cb"} local tt = {0x4CD0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 4096, freeze = true}}) 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 = '0dp', { TextView, text = "局内一把一开:", textSize = "12sp", textColor = "#FFFFFF" }, {LinearLayout, padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '1dp', { Switch, layout_marginLeft = '0dp',--间距王 text="局内防卡伤",--7 textColor= "#01FFFF", layout_height="30dp",--长度 layout_width="200dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#00000000",--背景颜色代码 cornerRadius = 28--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then cloud = gg.getRangesList("libanogs.so")[1].start WBC(cloud+0x44D85C,4,-698416192) WBC(cloud+0x44F56C,4,-698416192) WBC(cloud+0x44F748,4,-698416192) WBC(cloud+0x44F768,4,-698416192) WBC(cloud+0x44F768,4,-698416192) WBC(cloud+0x520280,4,-698416192) string.toMusic("防卡伤开启成功") end end }, }, { TextView, text = "范围[局内一把一开]:", textSize = "12sp", textColor = "#FFFFFF" }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '1dp'}, layout_marginTop = '1dp',--间距 { Switch, layout_marginLeft = '0dp',--间距王 text="加速专用范围", textColor= "#01FFFF", layout_height="30dp",--长度 layout_width="200dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#00000000",--背景颜色代码 cornerRadius = 28--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程3' if state then local thread1 = luajava.startThread(B1) floatingWindow:setCache(cacheName, thread1) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '1dp'}, layout_marginTop = '1dp',--间距 { Switch, layout_marginLeft = '0dp',--间距王 text="飞天专用范围", textColor= "#01FFFF", layout_height="30dp",--长度 layout_width="200dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#00000000",--背景颜色代码 cornerRadius = 28--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程6' if state then local thread1 = luajava.startThread(B2) floatingWindow:setCache(cacheName, thread1) end end }, }, { TextView, text = "特效颜色[局内一把一开]:", textSize = "12sp", textColor = "#FFFFFF" }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '1dp'}, layout_marginTop = '1dp',--间距 { Switch, layout_marginLeft = '0dp',--间距王 text="打击特效",--7 textColor= "#01FFFF", layout_height="30dp",--长度 layout_width="200dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#00000000",--背景颜色代码 cornerRadius = 28--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程5' if state then local thread1 = luajava.startThread(djtx) floatingWindow:setCache(cacheName, thread1) else TX() WBC(zs+0x14,16,46) WBC(zs+0x54,16,46) WBC(zs+0x94,16,46) WBC(zs+0xD4,16,46) WBC(zs+0x10,16,10) WBC(zs+0x50,16,10) WBC(zs+0x90,16,10) WBC(zs+0xD0,16,10) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '1dp'}, layout_marginTop = '1dp',--间距 { Switch, layout_marginLeft = '0dp',--间距王 text="击中颜色", textColor= "#01FFFF", layout_height="30dp",--长度 layout_width="200dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#00000000",--背景颜色代码 cornerRadius = 28--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程6' if state then local thread1 = luajava.startThread(jzys) floatingWindow:setCache(cacheName, thread1) else SS() WBC(ys+0x658,16,1) WBC(ys+0x65C,16,1) WBC(ys+0x660,16,0) WBC(ys+0x664,16,0) WBC(ys+0x64c,16,1) WBC(ys+0x650,16,1) WBC(ys+0x654,16,1) end end }, }, } }) end }) floatingWindowManager:run()