draw3 = require('draw3') draw3 = require('draw3') text1 = draw3.text('',300,350) text2 = draw3.text(os.date'',300,300) draw.setColor("#00FF00") draw.setSize(42)--文字大小 draw.setSize(42)--文字大小 gg.sleep(200) -- 把以上代码复制到你脚本最前面即可 -------开头语音 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.."个值by.科比") 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]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end local ALL = [==[ v1.0 -> 优化指针链条判断 v1.1 -> 添加多功能模板,可查看,修改,冻结,载入 v1.3 -> 修复了同一个so名称下有多个基址头,而只判断第一个基址头偏移的问题点 v1.4 -> 修复了在64位环境下偏移异常的问题 ]==] 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 print(rest) 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 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.."个值by.科比") 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 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 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 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 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 -- telegram: @XZNB886 -- 仙执PUBG local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x269CDB36) 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 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 cglib = require('cglib') local windowManager = require('windowManager') vibra = context:getSystemService(Context.VIBRATOR_SERVICE) changan = {} local changan = changan local android = import("android.*") write = file.write function panduan(rec) fille, err = io.open(rec) if fille == nil then return false else return true end end read = file.read function checkimg(tmp) if panduan("/sdcard/猪猪/图片/" .. tmp) ~= true then gg.toast("正在加载资源" .. tmp) download( "https://wanfeng-yyds-1317447113.cos.ap-guangzhou.myqcloud.com/" .. tmp, "/sdcard/猪猪/图片/" .. tmp ) end end function 获取图片(txt) ntxt = string.sub(string.gsub(txt, "/", "."), -10, -1) if string.find(tostring(txt), "http") ~= nil then if panduan("/sdcard/猪猪/图片/" .. ntxt) == false then download(txt, "/sdcard/猪猪/图片/" .. ntxt) end txt = "/sdcard/猪猪/图片/" .. ntxt end return luajava.getBitmapDrawable(txt) end ckimg = { "com.xflog", "xflog", "arlogo.png", "gclose" } for i = 1, #ckimg do checkimg(ckimg[i]) end context = app.context window = context:getSystemService("window") function getLayoutParams() LayoutParams = WindowManager.LayoutParams layoutParams = luajava.new(LayoutParams) if Build.VERSION.SDK_INT >= 26 then layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY else layoutParams.type = LayoutParams.TYPE_PHONE end layoutParams.format = PixelFormat.RGBA_8888 layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE layoutParams.gravity = Gravity.TOP | Gravity.LEFT layoutParams.width = LayoutParams.WRAP_CONTENT layoutParams.height = LayoutParams.WRAP_CONTENT return layoutParams end function getj6() jianbian6 = luajava.new(GradientDrawable) jianbian6:setCornerRadius(20) jianbian6:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian6:setColors({0xffffffff,0xffffffff}) jianbian6:setStroke(0, "0xdd000000") return jianbian6 end hanshu = function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.x y = mainLayoutParams.y elseif Action == MotionEvent.ACTION_MOVE then isMove = true mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) end end slctb1 = luajava.loadlayout({ GradientDrawable, color = "#661E1C27", cornerRadius = 20 }) slcta1 = luajava.loadlayout({ GradientDrawable, color = "#331E1C27", cornerRadius = 20 }) function getSelector3() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slcta1) selector:addState({ -android.R.attr.state_pressed }, slctb1) return selector end slctb = luajava.loadlayout({ GradientDrawable, color = "#001E1C27", cornerRadius = 0 }) slcta = luajava.loadlayout({ GradientDrawable, color = "0xff0086F1", cornerRadius = 4 }) slctc = luajava.loadlayout({ GradientDrawable, color = "#ffffffff", cornerRadius = 16 }) slctd = luajava.loadlayout({ GradientDrawable, color = "#ddE0E0E0", cornerRadius = 16 }) slcte = luajava.loadlayout({ GradientDrawable, color = "#11ffffff", cornerRadius = 12 }) slctf = luajava.loadlayout({ GradientDrawable, color = "#aa1E1C27", cornerRadius = 12 }) changan.controlFlip = function(control,time) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360}) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.REVERSE) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() end) end function getSelector() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slcta) selector:addState({ -android.R.attr.state_pressed }, slctb) return selector end function getSelector2() selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, slctd) selector:addState({ -android.R.attr.state_pressed }, slctc) return selector end jianbian = luajava.new(GradientDrawable) jianbian:setCornerRadius(30) jianbian:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian2 = luajava.new(GradientDrawable) jianbian2:setCornerRadius(30) jianbian2:setGradientType(GradientDrawable.LINEAR_GRADIENT) local isswitch YoYoImpl = luajava.getYoYoImpl() changan.menu = function(sview) if isswitch then return false end for i = 1, #stab do _ENV["jmb" .. i] = getSelector() end isswitch = true cebian = { LinearLayout, id = "侧边", gravity = "center", visibility = "gone", layout_height = "wrap_content", layout_width = "match_parent", } gund = { LinearLayout, background = getblue(), gravity = "center", orientation = "horizontal", layout_height = "wrap_content", layout_width = "wrap_content", } for i = 1, #stab do _ENV["jm" .. i] = luajava.loadlayout({ LinearLayout, id = "jm" .. i, layout_height = "28dp", layout_width = "68dp", gravity = "center", layout_marginTop = "2dp", layout_marginBottom = "2dp", background = _ENV["jmb" .. i], onClick = function() 切换(i) end, { TextView, id = "jm" .. i .. "t", gravity = "center", textColor = "#0086F1", text = stab[i] }, }) gund[#gund + 1] = _ENV["jm" .. i] if i < #stab then gund[#gund + 1] = luajava.loadlayout({ LinearLayout, layout_height = "match_parent", layout_width = "1.3dp", background = "#0086F1", }) end end cebian[#cebian + 1] = { HorizontalScrollView, gravity = "center", fillViewport = "true", layout_height = "wrap_content", layout_width = "wrap_content", gund, } cebian = luajava.loadlayout(cebian) for i = 1, #stab do _ENV["layout" .. i] = luajava.loadlayout({ ScrollView, fillViewport = "true", padding = "3dp", id = "layout" .. i, visibility = "gone", padding = "10dp", layout_width = "wrap_content", layout_height = "wrap_content", orientation = "vertical", { LinearLayout, id = "layoutm" .. i, gravity = "top", layout_width = "250dp", orientation = "vertical", gravity = "center_horizontal", }, }) end ckou = { LinearLayout, id = "chuangk", padding = "4dp", visibility = "gone", layout_width = "wrap_content", layout_height = "wrap_content", orientation = "vertical", cebian, } for i = 1, #stab do ckou[#ckou + 1] = _ENV["layout" .. i] end ckou = luajava.loadlayout(ckou) title = luajava.loadlayout({ TextView, id = "title", visibility = "gone", text = stitle, textColor = "#000000", gravity = "center", textSize = "22sp", layout_marginTop = "20dp", layout_width = "280dp", }) levitate = luajava.loadlayout({ ImageView, id = "control", background = 获取图片(xfcpic), --src = 0x7F02006B, --layout_width = "50dp", --layout_height = "50dp", layout_width = "40dp", layout_height = "40dp", }) floatWindow = { LinearLayout, id = "motion", orientation = "vertical", { FrameLayout, layout_width = "wrap_content", { LinearLayout, gravity = "center", levitate, }, { ImageView, id = "exit", layout_gravity = "right", visibility = "gone", src = "/sdcard/猪猪/图片/gclose", --src = 0x7F0200A8, layout_width = "20dp",--20 layout_height = "20dp", layout_marginTop = "10dp", layout_marginRight = "20dp", }, { LinearLayout, layout_width = "wrap_content", orientation = "vertical", gravity = "center_vertical", layout_height = "wrap_content", { LinearLayout, layout_width = "wrap_content", layout_height = "wrap_content", orientation = "horizontal", gravity = "center", title, }, }, }, ckou, } local function invoke() local ok local RawX, RawY, x, y mainLayoutParams = getLayoutParams() floatWindow = luajava.loadlayout(floatWindow) local function invoke2() block("start") for k = 1, #sview do for i = 1, #sview[k] do _ENV["layoutm" .. k]:addView(sview[k][i]) end end window:addView(floatWindow, mainLayoutParams) block("end") end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) block("join") control.onClick = 隐藏 exit.onClick = 隐藏 local isMove motion.onTouch = hanshu control.onTouch = hanshu exit.onTouch = hanshu end invoke(swib1, swib2) gg.setVisible(false) luajava.setFloatingWindowHide(true) 切换(1) end function changan.line() rest = luajava.loadlayout({ LinearLayout, layout_width = "fill_parent", layout_height = "1dp", background = "#C2CAD7", }) return rest end function changan.line2() rest = luajava.loadlayout({ LinearLayout, layout_width = "180dp", layout_height = "5dp", layout_marginLeft = "35dp", background = "#0087FF", layout_marginTop = "10dp", }) return rest end function getblue() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(6) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5}) jianbians:setStroke(4, "0xff0086F1") return jianbians end function getShape3() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(10) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5}) jianbians:setStroke(4, "0x77000000") return jianbians end function getShape5() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(4) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ 0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5}) jianbians:setOrientation(GradientDrawable.Orientation.TL_BR) jianbians:setStroke(2, "0x77000000") return jianbians end function getShape() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(90) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ 0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5 }) jianbians:setStroke(0, "0xffffffff") return jianbians end function getShape2() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(10) jianbians:setShape(GradientDrawable.RECTANGLE) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ 0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5 }) jianbians:setStroke(8, "0xff000000") return jianbians end corbk = true 当前ui = 1 显示 = 0 beij = luajava.new(GradientDrawable) beij:setCornerRadius(25) beij:setGradientType(GradientDrawable.LINEAR_GRADIENT) beij:setColors({ 0x660043FF,0x99FF84EB }) beij:setStroke(0, "0x44FFffff") beij2 = luajava.loadlayout({ GradientDrawable, color = "#001E1C27", cornerRadius = 10 }) function visi(tid, ttid) local tview = luajava.getIdValue(tid) local ttview = luajava.getIdValue(ttid) if not tview then return 0 end if tonumber(tostring(tview:getVisibility())) == 8.0 then tview:setVisibility(View.VISIBLE) ttview:setBackground(luajava.getBitmapDrawable("/sdcard/猪猪/图片/com.xflog")) else tview:setVisibility(View.GONE) ttview:setBackground(luajava.getBitmapDrawable("/sdcard/猪猪/图片/xflog")) end end function changan.box2(views, boxi) local tid = "box" .. guid() local ttid = tid .. "678" firadio = { LinearLayout, layout_width = "250dp", layout_height = "wrap_content", layout_marginTop = "2dp", layout_marginBottom = "2dp", orientation = "vertical", } if type(views[1]) == "string" or type(views[1]) == "number" then firadio[#firadio + 1] = { LinearLayout, layout_width = "fill_parent", layout_height = "28dp", gravity = "center_vertical", layout_marginTop = "2dp", layout_marginBottom = "4dp", onClick = function() visi(tid, ttid) end, background = getSelector3(), { ImageView, layout_marginLeft = "10dp", id = luajava.newId(ttid), src = 0x7F02000C, layout_width = "20dp", layout_height = "20dp", layout_marginTop = "0dp", }, { TextView, text = views[1], textSize = "16sp", layout_marginLeft = "15dp", layout_width = "100dp", textColor = "#ffffff", gravity = "left", }, } else gg.alert("changan.box第一个参数必须是string") os.exit() end if boxi then boxi = "visible" else boxi = "gone" end radios = { LinearLayout, layout_marginLeft = "0dp", layout_marginRight = "0dp", orientation = "vertical", visibility = boxi, id = luajava.newId(tid), padding = "0dp", layout_width = "fill_parent", } for i = 2, #views do radios[#radios + 1] = views[i] end firadio[#firadio + 1] = radios return luajava.loadlayout(firadio) end function changan.box(views) local tid = "box" .. guid() local ttid = tid .. "6" firadio = { LinearLayout, gravity = "center", layout_width = "fill_parent", layout_height = "wrap_content", orientation = "vertical", } if type(views[1]) == "string" or type(views[1]) == "number" then if views[1] ~= "" then tsiz = "14sp" else tsiz = "0sp" end firadio[#firadio + 1] = { LinearLayout, layout_height = "wrap_content", layout_width = "fill_parent", { TextView, text = views[1], textSize = tsiz, layout_width = "match_parent", textColor = "#000000", gravity = "center", }, } else end radios = { LinearLayout, layout_marginLeft = "0dp", layout_marginRight = "0dp", orientation = "vertical", padding = "0dp", background = getj6(), layout_width = "fill_parent", } for i = 2, #views do radios[#radios + 1] = views[i] if i ~= #views then radios[#radios + 1] = changan.line() end end firadio[#firadio + 1] = radios return luajava.loadlayout(firadio) end 当前ui = 1 function 切换(x) 当前ui = x luajava.runUiThread(function() for i = 1, #stab do _ENV["jm" .. i]:setBackground(_ENV["jmb" .. i]) _ENV["jm" .. i .. "t"]:setTextColor(0xff0086F1) _ENV["layout" .. i]:setVisibility(View.GONE) end _ENV["layout" .. 当前ui]:setVisibility(View.VISIBLE) _ENV["jm" .. 当前ui]:setBackground(slcta) _ENV["jm" .. 当前ui .. "t"]:setTextColor(0xffffffff) end) end changan.controlBig = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 0, 0.4, 0.7, 1 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 0, 0.4, 0.7, 1 }):setDuration(time):start() end) end changan.controlChange = function(control,colors) luajava.runUiThread(function() if type(colors) ~= "table" then end import "android.animation.ObjectAnimator" import "android.animation.ArgbEvaluator" import "android.animation.ValueAnimator" import "android.graphics.Color" colorAnim = ObjectAnimator:ofInt(control,"textColor", colors) colorAnim:setDuration(7000) colorAnim:setEvaluator(ArgbEvaluator()) colorAnim:setRepeatCount(ValueAnimator.INFINITE) colorAnim:setRepeatMode(ValueAnimator.REVERSE) colorAnim:start() end) end changan.controlRotetion = function(control,time) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", { 0, 360 }) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.REVERSE) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() end) end xuanzhuandonghua = nil -- 全局变量用于保存动画对象 changan.controlRotation2 = function(control, time) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", { 0, 360 }) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() end) end -- 停止旋转动画 changan.stopRotation = function() if xuanzhuandonghua then xuanzhuandonghua:cancel() end end changan.controlFlip2 = function(control,time) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua1 = ObjectAnimator:ofFloat(control, "rotationY", {0, 360}) xuanzhuandonghua1:setRepeatCount(0) xuanzhuandonghua1:setRepeatMode(Animation.REVERSE) xuanzhuandonghua1:setDuration(time) xuanzhuandonghua1:start() end) end changan.controlWater = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 1, 0.8, 0.9, 1 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 1,0.8,0.9,1 }):setDuration(time):start() end) end changan.controlSmall = function(control,time) luajava.runUiThread(function() import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(control,"scaleX", { 1, 0.7, 0.4, 0 }):setDuration(time):start() ObjectAnimator():ofFloat(control,"scaleY", { 1, 0.7, 0.4, 0 }):setDuration(time):start() end) end YoYoImpl = luajava.getYoYoImpl() function 隐藏() luajava.runUiThread(function() if tonumber(tostring(exit:getVisibility())) == 8.0 then control:setVisibility(View.GONE) chuangk:setVisibility(View.VISIBLE) exit:setVisibility(View.VISIBLE) title:setVisibility(View.VISIBLE) cebian:setVisibility(View.VISIBLE) mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL window:updateViewLayout(floatWindow, mainLayoutParams) _ENV["layout" .. 当前ui]:setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow) floatWindow:setBackground(beij) changan.controlBig(floatWindow,400) else control:setVisibility(View.VISIBLE) mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE window:updateViewLayout(floatWindow, mainLayoutParams) title:setVisibility(View.GONE) cebian:setVisibility(View.GONE) floatWindow:setBackground(beij2) chuangk:setVisibility(View.GONE) exit:setVisibility(View.GONE) YoYoImpl:with("FadeIn"):duration(200):playOn(floatWindow) _ENV["layout" .. 当前ui]:setVisibility(View.GONE) changan.controlFlip(floatWindow,400) end end) end function 退出() window:removeView(floatWindow) luajava.setFloatingWindowHide(false) bloc("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 chazhi = {} chajv = {} function changan.seek(name, bian, smin, smax, nows) _ENV[bian] = nows thum = getShape3() thum:setSize(80, 80) 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 = "fill_parent", layout_height = "36dp", { LinearLayout, layout_width = "fill_parent", layout_hight = "fill_parent", layout_marginTop = "5dp", layout_marginBottom = "5dp", gravity = "center_vertical", { TextView, gravity = "top", textColor = "#00A4FF", textSize = "16sp", text = name .. ":" .. nows, id = luajava.newId(names), layout_width = "100dp", layout_marginLeft = "10dp", layout_marginRight = "0dp", }, { SeekBar, layout_width = "140dp", id = luajava.newId(name .. "seekbar"), min = truesmin, max = truesmax, progress = tnows, progressDrawable = { getShape5() }, thumb = thum, progressHeight = "2dp", 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 getShape(tmp0, tmp1, tmp2, tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(4, tmp3) return jianbians end function getShape2(tmp0, tmp1, tmp2, tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(8, tmp3) return jianbians end checkbg = getShape(45, { 0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5}, 4, 0xffffffff) checkbga = getShape(45, { 0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5 },4,0xffffffff) checkbg1 = getShape2(45, { 0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5 }, 4, 0xffffffff) checkbg2 = getShape2(45, { 0xdd91EAE4,0xaa86A8E7,0xdd7f7fd5 }, 4, 0xffffffff) function 开关3(name, func1, func2, nid) name = name .. guid() _ENV[name] = "关" 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 luajava.runUiThread(function() luajava.getIdValue(nid .. "k"):setVisibility(View.GONE) luajava.getIdValue(nid .. "g"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbga) end) _ENV[name] = "开" vibra:vibrate(10) pcall(func1) else luajava.runUiThread(function() luajava.getIdValue(nid .. "g"):setVisibility(View.GONE) luajava.getIdValue(nid .. "k"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setBackground(checkbg) end) _ENV[name] = "关" vibra:vibrate(10) pcall(func2) end end end end function changan.switch(name, func1, func2, yans) nid = name .. guid() if not yans then yans = "#00A4FF" end local func = 开关3(name, func1, func2, nid) if not name then name = "未设置" end rest = luajava.loadlayout({ LinearLayout, layout_width = "fill_parent", layout_height = "36dp", gravity = "center_vertical", { LinearLayout, layout_width = "fill_parent", layout_height = "35dp", gravity = "center_vertical", { TextView, gravity = "top", text = name, textColor = yans, textSize = "16sp", layout_width = "170dp", layout_marginLeft = "10dp", layout_marginRight = "10dp", }, { FrameLayout, id = luajava.newId(nid), background = checkbg, onClick = function() luajava .newThread(function() func() end) :start() end, layout_width = "43dp", layout_height = "wrap_content", padding = "1dp", { LinearLayout, layout_gravity = "left", id = luajava.newId(nid .. "k"), background = checkbg1, onClick = function() luajava .newThread(function() func() end) :start() end, layout_width = "21dp", layout_height = "21dp", }, { LinearLayout, visibility = "gone", layout_gravity = "right", id = luajava.newId(nid .. "g"), background = checkbg2, onClick = function() luajava .newThread(function() func() end) :start() end, layout_width = "21dp", layout_height = "21dp", }, }, }, }) return rest end function changan.edit(name) _ENV[name] = name .. guid() if not name then name = "点击输入文字" end rest = luajava.loadlayout({ LinearLayout, layout_width = "fill_parent", layout_height = "40dp", { FrameLayout, layout_width = "fill_parent", layout_hight = "fill_parent", gravity = "center", { EditText, gravity = "top", background = getShape(), hint = name, textColor = "#383C3F", gravity = "center", textSize = "15sp", id = luajava.newId(_ENV[name]), layout_width = "fill_parent", }, { LinearLayout, layout_width = "220dp", layout_height = "2dp", layout_gravity = "center", background = "#0087FF", layout_marginTop = "10dp", }, }, }) luajava.getIdValue(_ENV[name]):setHintTextColor(0xff787878) return rest end function changan.radio(radio) firadio = { LinearLayout, layout_width = "fill_parent", layout_hight = "fill_parent", padding = "10dp", orientation = "vertical", } if type(radio[1]) == "string" or type(radio[1]) == "number" then firadio[#firadio + 1] = { TextView, text = radio[1] } end radios = { RadioGroup, background = getShape(), layout_width = "fill_parent" } for i = 2, #radio do radios[#radios + 1] = { RadioButton, layout_width = "fill_parent", text = radio[i][1], onClick = function() luajava .newThread(function() pcall(radio[i][2]) end) :start() end, } end firadio[#firadio + 1] = radios return luajava.loadlayout(firadio) end function changan.button(txt, func, yans) if not yans then yans = "#00A4FF" end if not txt then txt = "未设置" end return luajava.loadlayout({ LinearLayout, layout_width = "fill_parent", layout_hight = "45dp", background = getSelector2(), onClick = function() luajava.newThread(func):start() end, { LinearLayout, layout_width = "fill_parent", layout_hight = "wrap_content", gravity = "center_horizontal", layout_marginTop = "15dp", layout_marginBottom = "15dp", { TextView, textStyle = "bold", textColor = yans, text = txt, textSize = "16sp", layout_width = "wrap_content" }, }, }) end function changan.text(txt, color, size) if not txt then txt = "未设置文字" end if not color then color = "#ffffff" end if not size then size = "18sp" end return luajava.loadlayout({ TextView, text = txt, textSize = size, textColor = color, layout_width = "wrap_content", }) end corb = true function changan.setedit(name, txt) txt = tostring(txt) luajava.runUiThread(function() luajava.getIdValue(_ENV[name]):setText(txt) end) end function changan.getedit(name) edit = tostring(luajava.getIdValue(_ENV[name]):getText()) return edit 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] = "开" pcall(func1) else _ENV[name] = "关" pcall(func2) 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 setvalue(address, flags, value) local CatWill={} CatWill[1]={} CatWill[1].address=address CatWill[1].flags=flags CatWill[1].value=value gg.setValues(CatWill) 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 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]) 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 --========================================================================= local c1 setOnAudioListener(function() if not isUserdata(floatWindow) then return end local c2 = os.time() if not c1 or c2 - c1 > 1 then c1 = c2 luajava.runUiThread(function() local isGONE=floatWindow:getVisibility() == floatWindow.GONE if isGONE then floatWindow:setVisibility(floatWindow.VISIBLE) luajava.startThread(huizhi_1234) else floatWindow:setVisibility(floatWindow.GONE) draw.remove() end end) end end) function huizhi_1234() end huizhi_1234() stitle = " 小畅元气骑士内部 X\n" stab = {"防封专区", "功能专区", "内购专区"} xfcpic = "https://www.mengchongfk.com/upload/33/74e5955a2c3843a61674fe3c3588d3.jpg" changan.menu({ { changan.box({ "", changan.button("❄选择服区", function() string.toMusic('请选择游戏进程') gg.setProcessX() end), --[[ changan.button("设置输入框", function() changan.setedit("输入演示", "修改了输入框内容") end),]] --end, "#000000"), changan.switch("防闪①", function() if gg.getRangesList("libdiscord_connect_sdk_android.so")[1] then local t = {} t[1] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B1F4; -- 数值地址:0x7DBEAEF1F4 t[2] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B1F8; -- 数值地址:0x7DBEAEF1F8 t[3] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B1FC; -- 数值地址:0x7DBEAEF1FC t[4] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B200; -- 数值地址:0x7DBEAEF200 t[5] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B204; -- 数值地址:0x7DBEAEF204 t[6] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B208; -- 数值地址:0x7DBEAEF208 t[7] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B210; -- 数值地址:0x7DBEAEF210 t[8] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B214; -- 数值地址:0x7DBEAEF214 t[9] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B218; -- 数值地址:0x7DBEAEF218 t[10] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B21C; -- 数值地址:0x7DBEAEF21C t[11] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B220; -- 数值地址:0x7DBEAEF220 t[12] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B224; -- 数值地址:0x7DBEAEF224 t[13] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B228; -- 数值地址:0x7DBEAEF228 t[14] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x26B23C; -- 数值地址:0x7DBEAEF23C gg.addListItems({ [1] = { address = t[1], flags = 4, value = -698416192, freeze = true, }, [2] = { address = t[2], flags = 4, value = -698416192, freeze = true, }, [3] = { address = t[3], flags = 4, value = -698416192, freeze = true, }, [4] = { address = t[4], flags = 4, value = -698416192, freeze = true, }, [5] = { address = t[5], flags = 4, value = -698416192, freeze = true, }, [6] = { address = t[6], flags = 4, value = -698416192, freeze = true, }, [7] = { address = t[7], flags = 4, value = -698416192, freeze = true, }, [8] = { address = t[8], flags = 4, value = -698416192, freeze = true, }, [9] = { address = t[9], flags = 4, value = -698416192, freeze = true, }, [10] = { address = t[10], flags = 4, value = -698416192, freeze = true, }, [11] = { address = t[11], flags = 4, value = -698416192, freeze = true, }, [12] = { address = t[12], flags = 4, value = -698416192, freeze = true, }, [13] = { address = t[13], flags = 4, value = -698416192, freeze = true, }, [14] = { address = t[14], flags = 4, value = -698416192, freeze = true, }, }) gg.toast("开启成功") end string.toMusic('Logo开启成功') end, function() end), changan.switch("大厅①", function() string.toMusic('大厅①开启成功') end, function() end), changan.switch("防黑屏", function() string.toMusic('大厅②开启成功') end, function() end), changan.switch("循环过检测", function() so=gg.getRangesList('libgcloud.so')[1].start py=0X4231C4 setvalue(so+py,4,1000000001) so=gg.getRangesList('libgcloud.so')[1].start py=0X496224 setvalue(so+py,4,1000000001) string.toMusic('全局离线开启成功') end, function() so=gg.getRangesList('libgcloud.so')[1].start py=0X4231C4 setvalue(so+py,4,-943238507) so=gg.getRangesList('libgcloud.so')[1].start py=0X496224 setvalue(so+py,4,-943238507) string.toMusic('全局离线关闭成功') end), }), changan.box({ "", changan.button("退出脚本", function() 退出() end, "#DB202C"), changan.button("收起悬浮窗", 隐藏), --changan.switch("退出", 退出), }), },{ changan.box2({ "安全功能", changan.box({ "", changan.switch("联机队友卡顿", function() so=gg.getRangesList('libUE4.so')[1].start py=0X32B1608 setvalue(so+py,16,2) string.toMusic('人物广角开启成功') end, function() end), changan.switch("加强宠物", function() so=gg.getRangesList('libUE4.so')[1].start py=0X32B1608 setvalue(so+py,16,2) string.toMusic('枪械据点开启成功') end, function() end), changan.switch("加强自身", function() so=gg.getRangesList('libUE4.so')[1].start py=0x88c0fb4 setvalue(so+py,4,505872707) string.toMusic('枪械防抖开启成功') end, function() end), changan.switch("无限技能", function() so=gg.getRangesList('libUE4.so')[1].start py=0x8B59130 setvalue(so+py,16,8.95671814e-21) string.toMusic('枪械瞬击开启成功') end, function() end), changan.switch("加强暴击", function() so=gg.getRangesList('libUE4.so')[1].start py=0x7A4ACC0 setvalue(so+py,16,1.41233867e-13) string.toMusic('基址除雾开启成功') end, function() end), changan.switch("加强队友", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x6920E0, 0x34} 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 = {0x6920E8, 0x0} 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 = {0x6920F8, 0x74} 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 = {0x692100, 0x40} 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 = {0x692110, 0xB4} 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 = {0x692118, 0x80} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 120, freeze = true}}) string.toMusic('锁定帧率开启成功') end, function() end), }), }), changan.box2({ "帧率功能", changan.box({ "", changan.switch("120帧", function() so=gg.getRangesList('libUE4.so')[1].start py=0x53f7248 setvalue(so+py,16,8.8411673e-21) string.toMusic('枪械无后开启成功') end, function() end), changan.switch("流畅度", function() so=gg.getRangesList('libUE4.so')[1].start py=0x89cf470 setvalue(so+py,16,-3.4564993e10) string.toMusic('人物加速开启成功') end, function() so=gg.getRangesList('libUE4.so')[1].start py=0x89cf470 setvalue(so+py,16,8.50279631e-21) string.toMusic('人物加速关闭成功') end), }), }), }, { changan.box({ "内购专区", changan.box({ "", changan.switch("连接服务器", function() local t = {"libanogs.so:bss", "Cb"} local tt = {0x180} 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 = {0x4E8} 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 = {0x590} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 64, freeze = true}}) string.toMusic('半杀67开启成功') end, function() end), changan.switch("联机防踢", function() if gg.getRangesList("libGCloudVoice.so")[1] then local t = {} t[1] = gg.getRangesList("libGCloudVoice.so")[1]["start"] + 0x4032D4; -- 数值地址:0x77C39122D4 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libopenplatform.so")[1] then local t = {} t[1] = gg.getRangesList("libopenplatform.so")[1]["start"] + 0x9EE7C; -- 数值地址:0x77C30A4E7C gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libINTLCompliance.so")[1] then local t = {} t[1] = gg.getRangesList("libINTLCompliance.so")[1]["start"] + 0x10F488; -- 数值地址:0x77C2E59488 t[2] = gg.getRangesList("libINTLCompliance.so")[1]["start"] + 0x10F518; -- 数值地址:0x77C2E59518 t[3] = gg.getRangesList("libINTLCompliance.so")[1]["start"] + 0x10F540; -- 数值地址:0x77C2E59540 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, [3] = { address = t[3], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libswappy.so")[1] then local t = {} t[1] = gg.getRangesList("libswappy.so")[1]["start"] + 0xEF2A8; -- 数值地址:0x77C2D332A8 t[2] = gg.getRangesList("libswappy.so")[1]["start"] + 0xEF338; -- 数值地址:0x77C2D33338 t[3] = gg.getRangesList("libswappy.so")[1]["start"] + 0xEF360; -- 数值地址:0x77C2D33360 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, [3] = { address = t[3], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libc++_shared.so")[1] then local t = {} t[1] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD4D58; -- 数值地址:0x77B3697D58 t[2] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD4E00; -- 数值地址:0x77B3697E00 t[3] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD4E78; -- 数值地址:0x77B3697E78 t[4] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD4EF0; -- 数值地址:0x77B3697EF0 t[5] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD4F68; -- 数值地址:0x77B3697F68 t[6] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD4FE0; -- 数值地址:0x77B3697FE0 t[7] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD5058; -- 数值地址:0x77B3698058 t[8] = gg.getRangesList("libc++_shared.so")[1]["start"] + 0xD50D0; -- 数值地址:0x77B36980D0 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, [3] = { address = t[3], flags = 4, value = 0, freeze = true, }, [4] = { address = t[4], flags = 4, value = 0, freeze = true, }, [5] = { address = t[5], flags = 4, value = 0, freeze = true, }, [6] = { address = t[6], flags = 4, value = 0, freeze = true, }, [7] = { address = t[7], flags = 4, value = 0, freeze = true, }, [8] = { address = t[8], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libdiscord_connect_sdk_android.so")[1] then local t = {} t[1] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x50B800; -- 数值地址:0x7791E8F800 t[2] = gg.getRangesList("libdiscord_connect_sdk_android.so")[1]["start"] + 0x50D2AC; -- 数值地址:0x7791E912AC gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libINTLFoundation.so")[1] then local t = {} t[1] = gg.getRangesList("libINTLFoundation.so")[1]["start"] + 0x231C1C; -- 数值地址:0x77C26D5C1C t[2] = gg.getRangesList("libINTLFoundation.so")[1]["start"] + 0x231CAC; -- 数值地址:0x77C26D5CAC t[3] = gg.getRangesList("libINTLFoundation.so")[1]["start"] + 0x231CD4; -- 数值地址:0x77C26D5CD4 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, [3] = { address = t[3], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libijkffmpeg.so")[1] then local t = {} t[1] = gg.getRangesList("libijkffmpeg.so")[1]["start"] + 0x688; -- 数值地址:0x77C2701688 t[2] = gg.getRangesList("libijkffmpeg.so")[1]["start"] + 0x2E1AF0; -- 数值地址:0x77C29E2AF0 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libgcloud.so")[1] then local t = {} t[1] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x590A2C; -- 数值地址:0x77C41B0A2C t[2] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x590ACC; -- 数值地址:0x77C41B0ACC t[3] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x590B94; -- 数值地址:0x77C41B0B94 t[4] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x595B7C; -- 数值地址:0x77C41B5B7C t[5] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x59ABFC; -- 数值地址:0x77C41BABFC t[6] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x5A0820; -- 数值地址:0x77C41C0820 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, [3] = { address = t[3], flags = 4, value = 0, freeze = true, }, [4] = { address = t[4], flags = 4, value = 0, freeze = true, }, [5] = { address = t[5], flags = 4, value = 0, freeze = true, }, [6] = { address = t[6], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libgcloudcore.so")[1] then local t = {} t[1] = gg.getRangesList("libgcloudcore.so")[1]["start"] + 0x13D38; -- 数值地址:0x77C4654D38 t[2] = gg.getRangesList("libgcloudcore.so")[1]["start"] + 0x151264; -- 数值地址:0x77C4792264 t[3] = gg.getRangesList("libgcloudcore.so")[1]["start"] + 0x1512C4; -- 数值地址:0x77C47922C4 t[4] = gg.getRangesList("libgcloudcore.so")[1]["start"] + 0x151378; -- 数值地址:0x77C4792378 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, [3] = { address = t[3], flags = 4, value = 0, freeze = true, }, [4] = { address = t[4], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libanogs.so")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x4477D0; -- 数值地址:0x77C4C507D0 t[2] = gg.getRangesList("libanogs.so")[1]["start"] + 0x449154; -- 数值地址:0x77C4C52154 t[3] = gg.getRangesList("libanogs.so")[1]["start"] + 0x44CCA4; -- 数值地址:0x77C4C55CA4 t[4] = gg.getRangesList("libanogs.so")[1]["start"] + 0x44E624; -- 数值地址:0x77C4C57624 t[5] = gg.getRangesList("libanogs.so")[1]["start"] + 0x520AA8; -- 数值地址:0x77C4D29AA8 t[6] = gg.getRangesList("libanogs.so")[1]["start"] + 0x5243A0; -- 数值地址:0x77C4D2D3A0 t[7] = gg.getRangesList("libanogs.so")[1]["start"] + 0x524D44; -- 数值地址:0x77C4D2DD44 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, [3] = { address = t[3], flags = 4, value = 0, freeze = true, }, [4] = { address = t[4], flags = 4, value = 0, freeze = true, }, [5] = { address = t[5], flags = 4, value = 0, freeze = true, }, [6] = { address = t[6], flags = 4, value = 0, freeze = true, }, [7] = { address = t[7], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libgnustl_shared.so")[1] then local t = {} t[1] = gg.getRangesList("libgnustl_shared.so")[1]["start"] + 0x19C8; -- 数值地址:0x77C4DC99C8 t[2] = gg.getRangesList("libgnustl_shared.so")[1]["start"] + 0xEF98; -- 数值地址:0x77C4DD6F98 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libanort.so")[1] then local t = {} t[1] = gg.getRangesList("libanort.so")[1]["start"] + 0x14895C; -- 数值地址:0x77E82A995C t[2] = gg.getRangesList("libanort.so")[1]["start"] + 0x14A2DC; -- 数值地址:0x77E82AB2DC gg.addListItems({ [1] = { address = t[1], flags = 4, value = 0, freeze = true, }, [2] = { address = t[2], flags = 4, value = 0, freeze = true, }, }) string.toMusic('全杀67开启成功') end end, function() end), changan.switch("无限货币", function() end, function() end), changan.switch("无限皮肤", function() so=gg.getRangesList('libanogs.so')[1].start py=0x15A70 setvalue(so+py,4,0) so=gg.getRangesList('libanogs.so')[1].start py=0x43E5DC setvalue(so+py,4,0) string.toMusic('过特征开启成功') end, function() end), }), }), changan.box2({ "自选内购", changan.box({ "", changan.switch("无限氪金", function() end, function() end), changan.button("收起悬浮窗", 隐藏), l }), }), }, { }, }) jm1 : setBackground(slcta ) gg.setVisible(false ) luajava.setFloatingWindowHide(true ) ---bloc不要动 动了脚本功能会失效 bloc = luajava.getBlock() bloc("join")