function mnnb(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 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 = string.char(228,191,174,229,164,141) 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(68,84).._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) 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 --动态基址配置 function BaseAddressWrite(data) local so = gg.getRangesList(data.so) if so[1] ~= nil then local t = {} for i = 1, #data do t[#t+1] = {} t[#t].address = so[1].start + data[i].offset t[#t].value = data[i].value t[#t].flags = data[i].type end gg.setValues(t) else gg.toast("❌搜索不到") end end --仿Xs基址 gg.alert("By支持") --By.HaoGe --[[0x1E5C5C+0x20+0x200 gg.clearResults()--探头虚体 gg.setRanges(32) gg.searchNumber('-90.0;3.58732407e-43;1.08040112e-42:109',16) gg.refineNumber('-90',16) local ttz=gg.getResults(1)--探头值 ]] lhsl = readPointer('libUE4.so:bss', {0x62678,0xA8,0x2DC,0x24}, 1) --牛13东西 local ttsl = readPointer('libUE4.so:bss', {0x1FE88C,0x0,0xC,0x634,0x294,0x540,0x4C4,0x10,0x38,0x0}, 1) --探头锁链 local jznbsl = readPointer('libUE4.so:bss', {0x1E5C5C,0x20,0x200}, 1) --矩阵南北 local jzdxsl = readPointer('libUE4.so:bss', {0x1E5C5C,0x20,0x20C}, 1) --矩阵东西 local jzsxsl = readPointer('libUE4.so:bss', {0x1E5C5C,0x20,0x22C}, 1) --矩阵上下 zbxsl = readPointer('libUE4.so:bss', {0x1FE76C,0x74,0x94,0x140,0x150}, 1) --坐标x实体 zbysl = readPointer('libUE4.so:bss', {0x1FE76C,0x74,0x94,0x140,0x154}, 1) --坐标y实体 zbzsl = readPointer('libUE4.so:bss', {0x1FE76C,0x74,0x94,0x140,0x158}, 1) --坐标z实体 ttlf={} ttlf[1]={} ttlf[1].address=ttsl ttlf[1].flags=16 ttlf[2]={} ttlf[2].address=jznbsl ttlf[2].flags=16 ttlf[3]={} ttlf[3].address=jzdxsl ttlf[3].flags=16 ttlf[4]={} ttlf[4].address=jzsxsl ttlf[4].flags=16 ttlf[5]={} ttlf[5].address=zbxsl ttlf[5].flags=16 ttlf[6]={} ttlf[6].address=zbysl ttlf[6].flags=16 ttlf[7]={} ttlf[7].address=zbzsl ttlf[7].flags=16 gg.addListItems(ttlf)--保存 jznb=gg.getValues(ttlf)[2].value--矩阵方位南北 jzdx=gg.getValues(ttlf)[3].value--矩阵方位东西 jzsx=gg.getValues(ttlf)[4].value--矩阵方位上下 zbx=gg.getValues(ttlf)[5].value--坐标x zby=gg.getValues(ttlf)[6].value--坐标y zbz=gg.getValues(ttlf)[7].value--坐标z while true do--开始循环 --if gg.isVisible(true) then gg.removeListItems(ttlf) gg.setVisible(false) gg.toast("暂停") gg.sleep(1000) end tt=gg.getValues(ttlf)[1].value--探头 if tt == -1 then--左探头 gg.edits(lhsl, {{0, 16, 0, false}}) local data = {--0x62678,0xA8,0x2DC,0x24 ["so"] = "libUE4.so", {["value"] = 0, ["offset"] = 0x26F1700, ["type"] = 16},--空中强定 --{["value"] = 0, ["offset"] = 0xCB7BE4, ["type"] = 16},--灵魂出窍 } BaseAddressWrite(data) if jzsx>-0.8 and jzsx<0.3 then--视角中 if jznb>-1.2 and jznb<-0.7 then--南 gg.edits(zbxsl, {{zbx-80, 16, 0, true}}) gg.edits(zbysl, {{zby+250, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) else if jznb>0.7 and jznb<1.2 then--北 gg.edits(zbxsl, {{zbx+80, 16, 0, true}}) gg.edits(zbysl, {{zby-250, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) else if jzdx>-1.2 and jzdx<-0.5 then--西 gg.edits(zbxsl, {{zbx-250, 16, 0, true}}) gg.edits(zbysl, {{zby-80, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) else if jzdx>0.5 and jzdx<1.2 then--东 gg.edits(zbxsl, {{zbx+250, 16, 0, true}}) gg.edits(zbysl, {{zby+80, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) end end end end--东南西北结束 end--视角中结束 if jzsx>0.5 then--视角上 gg.edits(zbxsl, {{zbx, 16, 0, true}}) gg.edits(zbysl, {{zby, 16, 0, true}}) gg.edits(zbzsl, {{zbz+600, 16, 0, true}}) end--视角上结束 if jzsx<-0.8 then--视角下 gg.edits(zbxsl, {{zbx, 16, 0, true}}) gg.edits(zbysl, {{zby, 16, 0, true}}) gg.edits(zbzsl, {{zbz-300, 16, 0, true}}) end--视角下结束 end--左探头结束 if tt == 1 then--右探头 gg.edits(lhsl, {{0, 16, 0, false}}) local data = {--0x62678,0xA8,0x2DC,0x24 ["so"] = "libUE4.so", {["value"] = 0, ["offset"] = 0x26F1700, ["type"] = 16},--空中强定 --{["value"] = 0, ["offset"] = 0xCB7BE4, ["type"] = 16},--灵魂出窍 } BaseAddressWrite(data) if jzsx>-0.8 and jzsx<0.3 then--视角中 if jznb>-1.2 and jznb<-0.7 then--南 gg.edits(zbxsl, {{zbx-80, 16, 0, true}}) gg.edits(zbysl, {{zby+250, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) else if jznb>0.7 and jznb<1.2 then--北 gg.edits(zbxsl, {{zbx+80, 16, 0, true}}) gg.edits(zbysl, {{zby-250, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) else if jzdx>-1.2 and jzdx<-0.5 then--西 gg.edits(zbxsl, {{zbx-250, 16, 0, true}}) gg.edits(zbysl, {{zby-80, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) else if jzdx>0.5 and jzdx<1.2 then--东 gg.edits(zbxsl, {{zbx+250, 16, 0, true}}) gg.edits(zbysl, {{zby+80, 16, 0, true}}) gg.edits(zbzsl, {{zbz+5, 16, 0, true}}) end end end end--东南西北结束 end--视角中结束 if jzsx>0.5 then--视角上 gg.edits(zbxsl, {{zbx, 16, 0, true}}) gg.edits(zbysl, {{zby, 16, 0, true}}) gg.edits(zbzsl, {{zbz+600, 16, 0, true}}) end--视角上结束 if jzsx<-0.8 then--视角下 gg.edits(zbxsl, {{zbx, 16, 0, true}}) gg.edits(zbysl, {{zby, 16, 0, true}}) gg.edits(zbzsl, {{zbz-300, 16, 0, true}}) end--视角下结束 end--左探头结束 if tt == 0 then--不探头 gg.edits(lhsl, {{10000, 16, 0, false}}) local data = { ["so"] = "libUE4.so", {["value"] = -3.74440972e28, ["offset"] = 0X26F1700, ["type"] = 16},--空中强定 --{["value"] = -7.88044907e22, ["offset"] = 0xCB7BE4, ["type"] = 16},--灵魂出窍 } BaseAddressWrite(data) gg.removeListItems(ttlf)--解冻 jznb=gg.getValues(ttlf)[2].value--矩阵方位南北 jzdx=gg.getValues(ttlf)[3].value--矩阵方位东西 jzsx=gg.getValues(ttlf)[4].value--矩阵方位上下 zbx=gg.getValues(ttlf)[5].value--坐标x zby=gg.getValues(ttlf)[6].value--坐标y zbz=gg.getValues(ttlf)[7].value--坐标z end--不探头结束 end--循环结束