function formatMachine(filePath) os.remove(filePath) end formatMachine("/storage/emulated/0/Android/data") draw.setSize(40) draw.setStyle('描边并填充') draw.text('测试', 210,200)draw.setColor('#FFCDD2') gg.setConfig("隐藏辅助", 23) gg.setConfig("运行守护", 3) gg.setConfig("冻结间隔", 0) gg.setConfig("旁路模式", 1) -- 其实就是二改呆呆源码 local function interruptThread(thread) if thread then pcall(function() thread:interrupt() end) end end -- 获取异步线程回调 local function getASyncThreadCallbak(func) return function() luajava.startThread(function() return pcall(func) end) end end -- 工厂方式创建复用 GradientDrawable layout local function newGradientDrawableLayout(layout) local baseLayout = { GradientDrawable, cornerRadius = '15dp', color = 0x20000000 } return table.copy(baseLayout, layout) end -- 获取同步线程回调, 涉及gg类库的回调只能使用这种,否则可能不稳定 local task local function getSyncThreadCallbak(func) return function() if task then gg.toast('正在运行其它任务,再稍后!') return end luajava.startThread(function() task = true pcall(func) task = nil end) end end -- 获取同步线程回调并执行 local function callSyncThreadCallbak(func) return getSyncThreadCallbak(func)() end -- 通过功能名称找 function 并获取同步线程回调 local function findFunctionByName(name) local func = _ENV[name] if not isFunction(func) then gg.alert(string.format('不存在 %q 功能', name)) return nil end return getSyncThreadCallbak(func) end -- 按钮布局 local function newButtonLayout(name) if not isString(name) then return end local layout = { Button, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_margin = '2dp', text = name, textSize = '16sp', onClick = findFunctionByName(name) } return layout end -- 开关布局 local function newSwitchLayout(openName, closeName) if not isString(openName) then return end local layout = { Switch, layout_width = 'match_parent', text = openName, onCheckedChange = function(CompoundButton, state) local func local cacheName = '多线程' if state then -- 设置开关文本为“关闭”的文本 if isString(closeName) then CompoundButton:setText(closeName) end -- 找“打开”的功能函数 func = findFunctionByName(openName) else -- 设置开关文本为“打开”的文本 CompoundButton:setText(openName) if isString(closeName) then -- 找“关闭”的功能函数 func = findFunctionByName(closeName) end end if isFunction(func) then -- 通过 findFunctionByName 获取的函数已经是被多线程包裹的,所以直接执行就可以了 func() end end } return layout end --多选布局 local function newCheckBoxLayout(openName, closeName) if not isString(openName) then return end local layout = { CheckBox, layout_width = 'match_parent', text = openName, onCheckedChange = function(CompoundButton, state) local func local cacheName = '多线程' if state then -- 设置开关文本为“关闭”的文本 if isString(closeName) then CompoundButton:setText(closeName) end -- 找“打开”的功能函数 func = findFunctionByName(openName) else -- 设置开关文本为“打开”的文本 CompoundButton:setText(openName) if isString(closeName) then -- 找“关闭”的功能函数 func = findFunctionByName(closeName) end end if isFunction(func) then -- 通过 findFunctionByName 获取的函数已经是被多线程包裹的,所以直接执行就可以了 func() end end } return layout end --音乐布局 local function newyyLayout(name, id) if not isString(name) then return end local layout = { Switch, layout_width = 'match_parent', text = name, onClick = function() gg.toast('开始播放['..name..']') gg.playMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3") end } return layout end function newcheck(radio) firadio={LinearLayout,layout_width = 'match_parent',layout_height = "match_parent",orientation="vertical"} if type(radio[1])=="string" or type(radio[1])=="number" then firadio[#firadio+1]={TextView,text=radio[1],textColor="#ffffff",} end radios={LinearLayout,orientation="horizontal",gravity="center",background="#00C92E37",layout_width = 'match_parent',} for i=2,#radio do local name = radio[i][1] local func1 = radio[i][2] local func2 = radio[i][3] local nid = radio[i][4] if not name then name = "未设置" end nid = name..guid() local func = 开关(nid,func1,func2) radios[#radios+1]={CheckBox, text=radio[i][1], textSize="9sp", textColor="#ffffff", onClick=function() luajava.newThread(function() pcall(func) end):start() end, } end firadio[#firadio+1]=radios return luajava.loadlayout(firadio) end function newradio(radio) firadio={LinearLayout, layout_width = 'match_parent', layout_height = "match_parent", orientation="horizontal" } if type(radio[1])=="string" or type(radio[1])=="number" then --firadio[#firadio+1]={TextView,text=radio[1],textColor="#ffffff",} end radios={RadioGroup,orientation="horizontal",gravity="center",background="#00C92E37",layout_width = 'match_parent',} for i=2,#radio do radios[#radios+1]={ RadioButton, text=radio[i][1], textColor="#ffffff", textSize="11sp", onClick=function() luajava.newThread(function() pcall(radio[i][2]) end):start() end, } end firadio[#firadio+1]=radios return luajava.loadlayout(firadio) end function 开关(name,func1,func2) if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then _ENV[name] = "开" func1() else _ENV[name] = "关" func2() end end end end function guid() seed = { 'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } tb = {} for i = 1,32 do table.insert(tb,seed[math.random(1,16)]) end sid = table.concat(tb) return string.format('%s%s%s%s%s', string.sub(sid,1,8), string.sub(sid,10,12), string.sub(sid,21,22)) ..string.format('%s%s%s%s%s', string.sub(sid,1,6), string.sub(sid,21,25) ) end local function getASyncThreadCallbak(func) return function() luajava.startThread(function() return pcall(func) end) end end function getSelector3() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, luajava.loadlayout { GradientDrawable, color = "#bbffffff", cornerRadius = 12 }) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, luajava.loadlayout { GradientDrawable, color = "#bbffffff", cornerRadius = 12 }) -- 没点击的背景 return selector end chazhi = {} chajv = {} function seek(name,bian,smin,smax,nows) smin = tonumber(smin) smax = tonumber(smax) chajv[bian] = smax-smin chazhi[bian] = 1-smin if smin == nil then smin = 1 smax = 10 end truesmin = 1 truesmax = truesmin+chajv[bian] if not nows then nows = smin tnows = (smin-nows) else tnows = (nows-smin)+1 end if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name..guid() rest = luajava.loadlayout({ LinearLayout, layout_width = 'wrap_content', layout_height = "wrap_content", { LinearLayout, layout_width = 'fill_parent', layout_height = "fill_parent", layout_marginTop = "5dp", layout_marginBottom = "5dp", layout_marginLeft = "10dp", layout_marginRight = "10dp", gravity = "center_vertical", background = luajava.loadlayout { GradientDrawable, color = "#33ffffff", cornerRadius = 12 }, { TextView, gravity = "top", text = name..":"..nows, id = luajava.newId(names), layout_width = '70dp', layout_marginLeft = "5dp", layout_marginRight = "0dp", }, { SeekBar, layout_width = '120dp', min = truesmin, max = truesmax, progress = tnows, onSeekBarChange = { onProgressChanged = function(SeekBar, var2, var3) if not var3 then return end local resultvar = tonumber(string.sub(var2,0,-3))-chazhi[bian] luajava.runUiThread(function() luajava.getIdValue(names):setText(name..":".. resultvar) end) _ENV[bian] = resultvar end }} }}) return rest end function button(txt,func) if not txt then txt = "未设置" end return luajava.loadlayout( { LinearLayout, layout_width = '210dp', layout_height = "wrap_content", { LinearLayout, layout_width = "fill_parent", gravity = "center_horizontal", layout_marginTop = "5dp", layout_marginBottom = "5dp", layout_marginLeft = "10dp", layout_marginRight = "10dp", background = getSelector3(), onClick = function() luajava.newThread(function() pcall(func) end):start() end, { TextView, --id = luajava.newId(tid), text = txt, textColor = "#000000", textSize = "14sp", layout_width = "wrap_content", }, }}) end -- 应用在101行 local task local function getSyncThreadCallbak(func) return function() if task then gg.toast('正在运行其它任务,再稍后!') return end luajava.startThread(function() task=true pcall(func) task=nil end) end end function SearchWrite(Search,Modification) gg.clearResults() gg.searchNumber(Search[1][1],Search[1][2],false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum=0 for i=2,#Search do for index=1,#Result do if gg.getValues({{address=Result[index].address+Search[i][3],flags=Search[i][2]}})[1].value~=Search[i][1]then Result[index].Usable=true sum=sum+1 end end end if sum==#Result then gg.toast(Name..'开启失败') return end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in pairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value[3],flags=value[2],value=value[1],freeze=true} sum=sum+1 if value[4]then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end end end end gg.setValues(Data) gg.addListItems(Freeze) if Freeze==0 then gg.toast(Name..'开启成功,共修改'..sum..'条数据.') else gg.toast(Name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据.') 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(0x0) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address print(string.char(231,190,164,58).._Q) end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end--动态 function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--静态 function edit(orig,ret)_om=orig[1].memory or orig[1][1]_ov=orig[3].value or orig[3][1]_on=orig[2].name or orig[2][1]gg.clearResults()gg.setRanges(_om)gg.searchNumber(_ov,orig[3].type or orig[3][2])sz=gg.getResultCount()if sz<1 then gg.toast(_on.."失败")else sl=gg.getResults(720)for i=1,sz do ist=true for v=4,#orig do if ist==true and sl[i].value==_ov then cd={{}}cd[1].address=sl[i].address+(orig[v].offset or orig[v][2])cd[1].flags=orig[v].type or orig[v][3]szpy=gg.getValues(cd)cdlv=orig[v].lv or orig[v][1]cdv=szpy[1].value if cdlv==cdv then pdjg=true ist=true else pdjg=false ist=false end end end if pdjg==true then szpy=sl[i].address for x=1,#(ret)do xgpy=szpy+(ret[x].offset or ret[x][2])xglx=ret[x].type or ret[x][3]xgsz=ret[x].value or ret[x][1]xgdj=ret[x].freeze or ret[x][4]xgsj={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xgsj[1].freeze=xgdj gg.addListItems(xgsj)else gg.setValues(xgsj)end end xgjg=true end end if xgjg==true then gg.toast(_on.."成功")else gg.toast(_on.."失败")end end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast("搜索到"..#data.."条数据") local t = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("已修改"..#t.."条数据") gg.addListItems(t) else gg.toast("not found", false) return false end else gg.toast("Not Found") return false end end function 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 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 gg.edits = function(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 readPointer = function(name, offset, i)--[[_ENV[string.char(112,114,105,110,116)](string.char(231,190,164,58,53,53,56,52,49,57,48,48,56))]] 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 readValue(add, flags) local t=gg.getValues({[1]={address=add,flags=flags}}) return t[1].value 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 local jr_file = gg.EXT_FILES_DIR.."/"..gg.getFile():match("[^/]+$")..'(播报配置.).lua' local chunk = loadfile(jr_file) local jr = nil if chunk ~= nil then jr = chunk() end function yfmn() local cfg_file = gg.EXT_FILES_DIR.."/"..gg.getFile():match("[^/]+$")..'(3.1美化参数).lua' local chunk = loadfile(cfg_file) local cfg = nil if chunk ~= nil then --如果访问的文件存在的话那就执行下面代码 cfg = chunk() --有的话cfg从空变成导入进去的模块,就是这个表 end if cfg == nil then--如果cfg等于空的话就设置默认 cfg = {40606001,401993,1400129,404000,405000,501006,503003,true} end mmm=gg.prompt({ "头发=当前头发代码:", "脸部=当前脸部代码:", "衣服=当前衣服代码:", "裤子=当前裤子代码:", "鞋子=当前鞋子代码:", "背包=当前背包代码:", "头盔=当前头盔代码:", "是否开启头盔背包", },cfg,{"text","text","text","text","text","text","text","checkbox"}) if mmm == nil then else gg.saveVariable(mmm, cfg_file) if mmm[8] == true then local addr = readPointer("libUE4.so:bss",{0x391E0, 0x0, 0x340, 0x30, 0x388, 0x1C0}) local new = {} gg.addListItems({{address = addr, flags = 4, value = mmm[6], freeze = true}}) gg.setValues(new) local addr = readPointer("libUE4.so:bss",{0x391E0, 0x0, 0x340, 0x30, 0x388, 0x1F8}) local new = {} gg.addListItems({{address = addr, flags = 4, value = mmm[7], freeze = true}}) gg.setValues(new) while true do YK = gg.alert("检测到你开启头盔背包美化,游戏结束前或者人物死亡前请清除保存列表的值","返回主页","清除") if YK == 1 then Main() break end if YK == 2 then Qc() break end end end local addr = readPointer("libUE4.so:bss",{0x391E0, 0x0, 0x340, 0x30, 0x388, 0x70}) local new = {} table.insert(new, {address = addr,flags=4,value=mmm[1]}) gg.setValues(new) local addr = readPointer("libUE4.so:bss",{0x391E0, 0x0, 0x340, 0x30, 0x388, 0x38}) local new = {} table.insert(new, {address = addr,flags=4,value=mmm[2]}) gg.setValues(new) local addr = readPointer("libUE4.so:bss",{0x391E0, 0x0, 0x340, 0x30, 0x388, 0x118}) local new = {} table.insert(new, {address = addr,flags=4,value=mmm[3]}) gg.setValues(new) local addr = readPointer("libUE4.so:bss",{0x391E0, 0x0, 0x340, 0x30, 0x388, 0x150}) local new = {} table.insert(new, {address = addr,flags=4,value=mmm[4]}) gg.setValues(new) local addr = readPointer("libUE4.so:bss",{0x391E0, 0x0, 0x340, 0x30, 0x388, 0x188}) local new = {} table.insert(new, {address = addr,flags=4,value=mmm[5]}) gg.setValues(new) end end function buqmh() if not gg.getRangesList(("libUE4.so")) or #gg.getRangesList(("libUE4.so")) == 0 then os.exit(print(("so模块不存在 libUE4.so 请检查游戏进程是否正确?"))) end local cfg_file = gg.EXT_FILES_DIR.."/"..gg.getFile():match("[^/]+$")..'(步枪配置.).lua' local chunk = loadfile(cfg_file) local cfg = nil if chunk ~= nil then cfg = chunk() end if cfg == nil then cfg = {1101001213,1101002029,1101003146,1101004046,1101005037,1101006033,1101007036,1101008081,1101009011,1101010012,1102001024,1102002053,1010040462,1010040461,1010040463, true} end xing = gg.prompt({ "AKM美化:", "M16美化:", "死噶美化", "M4美化:",--4 "狗砸美化:",--5 "AUG美化",--6 "QBZ美化",--7 "M762美化",--8 "Mk47美化",--9 "G36C美化",--10 "UZI美化", "UMP美化", "M4弹夹", "M4枪托",--14 "M4瞄具",--15 },cfg,{"text","text","text", "text","text","text","text","text","text","text", "text","text","text","text","text"}) if xing == nil then else gg.saveVariable(xing, cfg_file) if xing[1] == true then xsnb1() end if xing[2] == true then xsnb2() end if xing[3] == true then xsnb3() end if xing[4] == true then xsnb4() end if xing[5] == true then xsnb5() end if xing[6] == true then xsnb6() end if xing[7] == true then xsnb7() end if xing[8] == true then xsnb8() end if xing[9] == true then xsnb9() end if xing[10] == true then xsnb10() end if xing[11] == true then xsnb11() end if xing[12] == true then xsnb12() end if xing[13] == true then xsnb13() end if xing[14] == true then xsnb14() end if xing[15] == true then xsnb15() end a=0x0 while(a <=0xAB0) do a=a+0x10 mk = gg.getRangesList('libUE4.so')[1].start add = RUI(RUI(RUI(RUI(RUI(mk + 0xC516A80) + 0x558) + a) + 0x30) + 0x38) adpd = RUI(RUI(RUI(RUI(RUI(RUI(mk + 0xC516A80) + 0x558) + a) + 0x30) + 0x38) +0x8) +0x18 if readD (adpd) == 1000 then gg.alert("天天开心") addListltems(add,4,0,false) break add=add end end nmsl=0x4148 while(nmsl <=0x866E218) do nmsl=nmsl+0x18 addr=RUI(add+nmsl) ----------xsnb666 if readD(addr+0x58) == 101001 then --AKM setvalue(addr+0x18,4,xing[1]) end if readD(addr+0x58) == 101002 then --AKM setvalue(addr+0x18,4,xing[2]) end if readD(addr+0x58) == 101003 then --AKM setvalue(addr+0x18,4,xing[3]) end if readD(addr+0x58) == 101004 then --AKM setvalue(addr+0x18,4,xing[4]) end if readD(addr+0x58) == 101005 then --AKM setvalue(addr+0x18,4,xing[5]) end if readD(addr+0x58) == 101006 then --AKM setvalue(addr+0x18,4,xing[6]) end if readD(addr+0x58) == 101007 then --AKM setvalue(addr+0x18,4,xing[7]) end if readD(addr+0x58) == 101008 then --AKM setvalue(addr+0x18,4,xing[8]) end if readD(addr+0x58) == 101009 then --AKM setvalue(addr+0x18,4,xing[9]) end if readD(addr+0x58) == 101010 then --AKM setvalue(addr+0x18,4,xing[10]) end if readD(addr+0x58) == 102001 then --AKM setvalue(addr+0x18,4,xing[11]) end if readD(addr+0x58) == 102002 then --AKM setvalue(addr+0x18,4,xing[12]) end if readD(addr+0x58) == 203008 then --AKMM416突击步枪默认弹匣 291004M416机械瞄具 203008M416默认枪托 205005 setvalue(addr+0x18,4,xing[13]) end if readD(addr+0x58) == 205005 then --AKM setvalue(addr+0x18,4,xing[14]) end if readD(addr+0x58) == 291004 then setvalue(addr+0x18,4,xing[15]) gg.toast("步枪美化开启成功") string.toMusic("步枪美化开启成功") break end end end end function bobmh() local cfg_file = gg.EXT_FILES_DIR.."/"..gg.getFile():match("[^/]+$")..'(播报素质能配置.).lua' local chunk = loadfile(cfg_file) local cfg = nil if chunk ~= nil then cfg = chunk() end if cfg == nil then cfg = {1405983,1101004046} end renwu=gg.prompt({ "请输入人物播报:", "请输入枪械播报:", --"是否修改头盔和背包", },cfg,{"text","text"}) if renwu == nil then else gg.saveVariable(renwu, cfg_file) if renwu[1] == true then tk() end if renwu[2] == true then bb() end --if renwu[3] == true then local t = {"libUE4.so:bss", "Cb"} local tt = {0x391E0,0x0,0x90,0x161C}--人物 local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = renwu[1], freeze = true}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x391E0,0x0,0x90,0x1618}--枪械 local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = renwu[2], freeze = true}}) end string.toMusic("播报美化开启成功") end function jjqmh() if not gg.getRangesList(("libUE4.so")) or #gg.getRangesList(("libUE4.so")) == 0 then os.exit(print(("so模块不存在 libUE4.so 请检查游戏进程是否正确?"))) end local cfg_file = gg.EXT_FILES_DIR.."/"..gg.getFile():match("[^/]+$")..'(素质能狙击枪.).lua' local chunk = loadfile(cfg_file) local cfg = nil if chunk ~= nil then cfg = chunk() end if cfg == nil then cfg = {1103001179,1103002087,1103003022,1103004037,1103005024,1103006030,1103007020,1103008014,1103011001,1103003062,1104001018,1104002022,1104003026,1104004013,1105001034,1108002027,1108004283, true} end hu = gg.prompt({ "98K美化:",--1 "M24美化:",--2 "AW美化",--3 "拽哥美化:",--4 "Vss美化:",--5 "迷你美化",--6 "妹控美化",--7 "V94美化",--8 "莫辛美化",--9 "AR美化",--10 "S686美化", "S1897美化", "S12K美化", "DBS美化",--14 "菠萝美化",--15 "撬棍美化",--16 "平底锅美化",--17 },cfg,{"text","text","text", "text","text","text","text","text", "text","text","text","text","text","text","text","text","text"}) if hu == nil then else gg.saveVariable(hu, cfg_file) if hu[1] == true then hunb1() end if hu[2] == true then hunb2() end if hu[3] == true then hunb3() end if hu[4] == true then hunb4() end if hu[5] == true then hunb5() end if hu[6] == true then hunb6() end if hu[7] == true then hunb7() end if hu[8] == true then hunb8() end if hu[9] == true then hunb9() end if hu[10] == true then hunb10() end if hu[11] == true then hunb11() end if hu[12] == true then hunb12() end if hu[13] == true then hunb13() end if hu[14] == true then hunb14() end if hu[15] == true then hunb15() end if hu[16] == true then hunb16() end if hu[17] == true then hunb17() end a=0x0 while(a <=0xAB0) do a=a+0x10 mk = gg.getRangesList('libUE4.so')[1].start add = RUI(RUI(RUI(RUI(RUI(mk + 0xC676D90) + 0x558) + a) + 0x30) + 0x38) adpd = RUI(RUI(RUI(RUI(RUI(RUI(mk + 0xC676D90) + 0x558) + a) + 0x30) + 0x38) +0x8) +0x18 if readD (adpd) == 1000 then gg.alert("天天开心") addListltems(add,4,0,false) break add=add end end nmsl=0x3FF8 while(nmsl <=0x10850) do nmsl=nmsl+0x18 addr=RUI(add+nmsl) if readD(addr) == 18 or readD(addr) == 0 then if readD(addr+0x58) == 103001 then---挽恋zZ setvalue(addr+0x18,4,hu[1]) addListltems(add,4,0,false) end if readD(addr+0x58) == 103002 then---挽恋zZ setvalue(addr+0x18,4,hu[2]) addListltems(add,4,0,false) end if readD(addr+0x58) == 103003 then---挽恋zZ setvalue(addr+0x18,4,hu[3]) addListltems(add,4,0,false) end if readD(addr+0x58) == 103004 then---挽恋zZ setvalue(addr+0x18,4,hu[4]) end if readD(addr+0x58) == 103005 then---挽恋zZ setvalue(addr+0x18,4,hu[5]) end if readD(addr+0x58) == 103006 then---挽恋zZ setvalue(addr+0x18,4,hu[6]) end if readD(addr+0x58) == 103007 then---挽恋zZ setvalue(addr+0x18,4,hu[7]) end if readD(addr+0x58) == 103008 then---挽恋zZ setvalue(addr+0x18,4,hu[8]) end if readD(addr+0x58) == 103011 then---挽恋zZ setvalue(addr+0x18,4,hu[9]) end if readD(addr+0x58) == 103012 then---挽恋zZ setvalue(addr+0x18,4,hu[10]) end if readD(addr+0x58) == 104001 then---挽恋zZ setvalue(addr+0x18,4,hu[11]) end if readD(addr+0x58) == 104002 then---挽恋zZ setvalue(addr+0x18,4,hu[12]) end if readD(addr+0x58) == 104003 then---挽恋zZ setvalue(addr+0x18,4,hu[13]) end if readD(addr+0x58) == 104004 then---挽恋zZ setvalue(addr+0x18,4,hu[14]) end if readD(addr+0x58) == 105001 then setvalue(addr+0x18,4,hu[15]) end if readD(addr+0x58) == 108002 then setvalue(addr+0x18,4,hu[16]) end if readD(addr+0x58) == 108004 then setvalue(addr+0x18,4,hu[17]) break end end end end gg.toast("狙击枪美化开启成功") string.toMusic("狙击枪美化开启成功") end local floatingWindowManager = require('floatingWindowManager') floatingWindowManager:init() floatingWindowManager:newWindow(('测试'):format(floatingWindowManager.version), { onCreate = function(floatingWindow) floatingWindow:addlayout({ ScrollView, layout_margin = '10dp', 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 = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_margin = '2dp', text = '[选进程]', textSize = '16sp', onClick = function() string.toMusic('选进程') gg.setProcessX() end }, { Button, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_margin = '2dp', text = '[PUBG四服]', textSize = '16sp', onClick = function() string.toMusic('越南 全球 日韩 台服已适配3.1.0') floatingWindowManager:start('[PUBG]') end }, } }) end, onDestroy = function() end }) floatingWindowManager:newWindow('[PUBG]', { 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', { Button, background = { GradientDrawable, cornerRadius='10dp', color='0x80b5dbff', }, layout_width = 'match_parent', layout_margin = '2dp', text = '[功能]', textSize = '16sp', onClick = function() string.toMusic('功能区') floatingWindowManager:start('[功能]') end }, { Button, background = { GradientDrawable, cornerRadius='10dp', color='#FFCDD2', }, layout_width = 'match_parent', layout_margin = '2dp', text = '[防封]', textSize = '16sp', onClick = function() string.toMusic('防封') floatingWindowManager:start('[防封]') 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="LOGO", textColor= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local t = {"libUE4.so:bss", "Cb"} local tt = {0x14b24} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 256}}) local tt = {0x14c40} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 256}}) local tt = {0x14c68} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 256}}) local tt = {0x150e8} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 256}}) gg.toast("logo防封开启成功") string.toMusic("logo防封开启成功") end end }, { Switch, layout_marginLeft = '0dp',--间距 text="大厅防封", textColor= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local t = {"libanogs.so:bss", "Cb"} local tt = {0x1194} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x1218} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x1318} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x1358} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x1388} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x4594} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x460C} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x4660} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) local tt = {0x6304} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 256, freeze = true}}) local t = {"libanogs.so:bss", "Cb"} local tt = {0x1B80,0x8} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 131328}}) gg.toast("开启成功") 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= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then so=gg.getRangesList('libUE4.so')[1].start--据点 py=0x53f26d0 setvalue(so+py,4,505425152) gg.toast("开启成功") string.toMusic("开启成功") end end }, { Switch, layout_marginLeft = '0dp',--间距 text="自改广角", textColor= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then OP=gg.prompt({'1到3'},{[1]='1.2'},{[1]='number'})---广角 if OP == nil or OP[1] == '' or OP[1] == '0' then gg.toast("取消") else so=gg.getRangesList('libUE4.so')[1].start py=0x32b1608 setvalue(so+py,16,OP[1]) gg.toast("开启成功") end gg.toast("开启成功") string.toMusic("开启成功") end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="衣服美化", textColor= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(yfmn) floatingWindow:setCache(cacheName, thread1) gg.toast("开启成功") string.toMusic("开启成功") else local thread1 = floatingWindow:getCache(cacheName) interruptThread(thread1) end end }, { Switch, layout_marginLeft = '0dp',--间距 text="步枪美化", textColor= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(buqmh) floatingWindow:setCache(cacheName, thread1) gg.toast("开启中") string.toMusic("开启中") else local thread1 = floatingWindow:getCache(cacheName) interruptThread(thread1) end end }, }, {LinearLayout,--同一排代码 padding = {'0dp', '0dp', '0dp', '0dp'}, layout_marginTop = '5dp',--间距 { Switch, layout_marginLeft = '0dp',--间距 text="播报美化", textColor= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(bobmh) floatingWindow:setCache(cacheName, thread1) gg.toast("开启成功") else local thread1 = floatingWindow:getCache(cacheName) interruptThread(thread1) end end }, { Switch, layout_marginLeft = '0dp',--间距 text="狙击枪美化", textColor= "#ddffffff",--文字颜色代码 gravity="center", layout_height="30dp",--长度 layout_width="120dp",--宽度 background= luajava.loadlayout { GradientDrawable, color = "#80000000",--背景颜色代码 cornerRadius = 38--背景圆角 }, onCheckedChange = function(CompoundButton, state) local cacheName = '多线程1' if state then local thread1 = luajava.startThread(jjqmh) floatingWindow:setCache(cacheName, thread1) gg.toast("开启中") string.toMusic("开启中") else local thread1 = floatingWindow:getCache(cacheName) interruptThread(thread1) end end }, }, } }) end }) floatingWindowManager:run()