draw.text("TNT内部一体脚本",200,200)--显示字体第一个200是左右第二200是上下 draw.setColor("#00dffc")--16色颜色配置 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 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 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 readPointer = function(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 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 function fastsearch(search, write) gg.setVisible(false) gg.clearResults() gg.setRanges(search[1][3]) gg.searchNumber(search[1][1], search[1][2]) if gg.getResultsCount() == 0 then gg.toast("Not Found") return false else local result = gg.getResults(gg.getResultsCount()) gg.clearResults() for i = 2, #search do local mtp = {} for w, r in ipairs(result) do mtp[#mtp + 1] = { address = r.address + search[i][2], flags = search[i][3] } end mtp = gg.getValues(mtp) local hook = {} for w, r in ipairs(mtp) do if r.value == search[i][1] then hook[#hook + 1] = result[w] end end result = hook end if #result > 0 then local tb = {{}, {}} for i, v in ipairs(result) do --- 遍历每个结果 for _, vv in ipairs(write) do local p = {address = v.address + vv[2], flags = vv[3], value = vv[1], freeze = vv[4]} if vv[4] then --- true 就是冻结 table.insert(tb[2], p) else table.insert(tb[1], p) end end end gg.addListItems(tb[2]) gg.setValues(tb[1]) gg.toast("获取成功" .. (#tb[1] + #tb[2]) .. "条结果") else gg.toast("Not Found") end end end function PS() 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 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 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("found "..#data.." 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) else gg.toast("not found", false) return false end else gg.toast("Not Found") return false end end ----------------------------------------------------------------------------------------------------------------------------------------- local floatingWindowManager = require('floatingWindowManager') floatingWindowManager:init() local layouts = { [0] = nil, { LinearLayout, orientation = 'vertical', { Button, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_margin = '5dp', text = '64位防封区', textSize = '16sp', onClick = function() floatingWindowManager:start('TNT全防界面电报☞@qingfunbyy') end }, { Button, background = floatingWindowManager:getStateListDrawable(), layout_width = 'match_parent', layout_margin = '5dp', text = '64位全火功能', textSize = '16sp', onClick = function() floatingWindowManager:start('TNT功能界面电报☞@qingfunbyy') end }, getTitle = function() return '主页' end, getIconDrawable = function() return luajava.getDrawable('@android:drawable/ic_menu_home') end }, { LinearLayout, orientation = 'vertical', { Button, text = '选择PUBG进程', onClick = function() gg.setProcessX() end }, getTitle = function() return '设置' end, getIconDrawable = function() return luajava.getDrawable('@android:drawable/ic_menu_preferences') end }, } local view = luajava.getViewPagerMagicIndicator(layouts) local frameLayout = luajava.loadlayout({ FrameLayout, layout_width = '200dp', -- 宽高200dp的正方形组件 layout_height = '200dp', {view} }) floatingWindowManager:newWindow('TNT全防', { onCreate = function(floatingWindow) floatingWindow:addView(frameLayout) end }) floatingWindowManager:newWindow('TNT全防界面电报☞@qingfunbyy', { 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 = '10dp', { Switch, layout_width = 'match_parent', text = '全局离线[蓝圈开/撤离关]', onCheckedChange = function(CompoundButton, state) if state then a1() else local t = {"libgcloud.so", "Cd"} string.toMusic('已关闭全局离线') end end }, { Switch, layout_width = 'match_parent', text = '蓝圈防踢防禁', onCheckedChange = function(CompoundButton, state) if state then a2() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '『第一套』大厅开启(新防-全机型通用)', onCheckedChange = function(CompoundButton, state) if state then a3() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '『第二套』大厅开启', onCheckedChange = function(CompoundButton, state) if state then a4() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '『第三套』大厅开启', onCheckedChange = function(CompoundButton, state) if state then a5() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '『第四套』大厅开启', onCheckedChange = function(CompoundButton, state) if state then a6() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '『第五套』大厅开启', onCheckedChange = function(CompoundButton, state) if state then a7() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '防追封[下线开]', onCheckedChange = function(CompoundButton, state) if state then a8() else string.toMusic('无法关闭') end end } } }) end }) function a1() string.toMusic('全局离线开启成功') end function a2() string.toMusic('已开启篮圈防踢防禁') end function a3() string.toMusic('第一套开启成功') end function a4() string.toMusic('第二套开启成功') end function a5() string.toMusic('第三套开启成功') end function a6() end function a7() string.toMusic('第五套开启成功') end function a8() string.toMusic('下线防追封开启成功') end local view = luajava.getViewPagerMagicIndicator(layouts) local frameLayout = luajava.loadlayout({ FrameLayout, layout_width = '200dp', -- 宽高200dp的正方形组件 layout_height = '200dp', {view} }) floatingWindowManager:newWindow('TNT功能界面电报☞@qingfunbyy', { 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 = '10dp', { Switch, layout_width = 'match_parent', text = '攀爬穿墙[安全]', onCheckedChange = function(CompoundButton, state) if state then b1() else string.toMusic('已关闭攀爬穿墙') end end }, { Switch, layout_width = 'match_parent', text = '开启2.5加速[内存]', onCheckedChange = function(CompoundButton, state) if state then b2() else string.toMusic('已关闭开启2.5加速') end end }, { Switch, layout_width = 'match_parent', text = '午后[基址]', onCheckedChange = function(CompoundButton, state) if state then b3() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '防抖[基址]', onCheckedChange = function(CompoundButton, state) if state then b4() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '聚点[基址]', onCheckedChange = function(CompoundButton, state) if state then b5() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '瞬击[基址]', onCheckedChange = function(CompoundButton, state) if state then b6() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '除雾[基址]', onCheckedChange = function(CompoundButton, state) if state then b7() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '基址加速[3图和5图极限帧不拉回]', onCheckedChange = function(CompoundButton, state) if state then b8() else string.toMusic('已关闭基址加速') end end }, { Switch, layout_width = 'match_parent', text = '300w范围小减伤[内存]', onCheckedChange = function(CompoundButton, state) if state then b9() else string.toMusic('无法关闭') end end }, { Switch, layout_width = 'match_parent', text = '蹲下路飞虚体向左[内存]', onCheckedChange = function(CompoundButton, state) if state then b10() else string.toMusic('无法关闭') end end } } }) end }) function b1() string.toMusic('攀爬穿墙开启成功') end function b2() string.toMusic('人物2.5倍加速开启成功') end function b3() string.toMusic("基址无后开启成功") end function b4() string.toMusic("基址防抖2开启成功") end function b5() string.toMusic("基址聚点开启成功") end function b6() string.toMusic("基址瞬击开启成功") end function b7() string.toMusic("基址除雾开启成功") end function b8() string.toMusic("基址加速开启成功") end function b9() string.toMusic("300万减伤范围开启成功") end function b10( ) string.toMusic("蹲下路飞虚体向左开启成功") end -- 运行悬浮窗 floatingWindowManager:run()