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 Unfreeze() local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) 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.addListItems(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.addListItems(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.addListItems(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end 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 if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end function DTNB(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0x80b5dbff,Search[1][4] or Type,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) end gg.searchNumber(Search[1][2],Search[1][4] or Type,false,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][3] 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=Search[k][3] or Type end tmp=gg.getValues(tmp) for i,v in ipairs(tmp) do if v.flags==16 or v.flags==64 then values=tostring(v.value):sub(1,6) num=tostring(num):sub(1,6) else values=v.value end if tostring(values)~=tostring(num) then result[i].isUseful=false end end end for i,v in ipairs(result) do if (v.isUseful) then data[#data+1]=v.address end end if (#data > 0) then local t,t_={},{} local base=Search[1][3] for i=1,#data do for k,w in ipairs(Get) do offset=w[2] - base if w[1]==false then t_[#t_+1]={} t_[#t_].address=data[i]+offset t_[#t_].flags=Type th_=(th_) and th_+1 or 1 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[1] tg_=(tg_) and tg_+1 or 1 if (w[4]==true) then local item={} item[#item+1]=t[#t] item[#item].freeze=w[4] gg.addListItems(item) end end end end tg=(tg_) and "修改"..tg_.."数据" or "" th=(th_) and "" or "" gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) gg.toast(""..Name..tg) tg_,th_=nil,nil else gg.toast("头部提升",false) return false end else gg.toast("提升") return false end 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 gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("25;23;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.getResults(2000) gg.editAll("160", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.processResume() gg.getResults(2000) gg.editAll("180", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("30.5;25", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.getResults(2000) gg.editAll("140", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("9.201618;30.5;25", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(10) gg.editAll("280", gg.TYPE_FLOAT) gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("23;25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(10) gg.editAll("110", gg.TYPE_FLOAT) gg.clearResults() gg.getResults(1) gg.searchNumber("10;45", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(0) gg.getResults(1) gg.searchNumber("10", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(0) gg.getResults(100) gg.editAll("9999", gg.TYPE_FLOAT) gg.setRanges(gg.REGION_BAD) gg.searchNumber("-88.66608428955;26:512", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(10) gg.editAll("151.5", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_BAD) gg.searchNumber("-88.66608428955;26:512", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("26", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(2) gg.editAll("-460", gg.TYPE_FLOAT) gg.clearResults() gg.searchNumber("-88.73961639404;28:512", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(2) gg.editAll("-560", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("9.20161819458;23;25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("25;30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1) gg.editAll("66", gg.TYPE_FLOAT) gg.searchNumber("30.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1) gg.editAll("66", gg.TYPE_FLOAT) gg.clearResults() DTNB({{false,88000.0,0,16,nil,nil}},{{35000,0,16,false}},16,32,"头部部位") DTNB({{false,90000.0,0,16,nil,nil}},{{35000,0,16,false}},16,32,"头部提升") DTNB({{false,23.0,0,16,nil,nil},{25.0,4,16},{30.5,8,16}},{{100,4,16,false},{100,8,16,false}},16,32,"头部提升") DTNB({{false,-1883348481058764210,0,32,nil,nil}},{{-1883348485055444540,0,32,false}},32,16384,"头部部位") gg.clearResults() gg.setRanges(32)--头部伤害 local dataType = 16 local search = {{9.20161819458,0},{25.0,28},{30.5,32},} local modify = {{180.0,24},{180.0,28},{180.0,32},} so=gg.getRangesList('libUE4.so')[1].start py=0X2739E68--子弹坠落 setvalue(so+py,16,-18) so=gg.getRangesList('libUE4.so')[1].start py=0X2739E54 setvalue(so+py,16,0)--防坠落 so=gg.getRangesList('libUE4.so')[1].start py=0X2739E68--子弹坠落 setvalue(so+py,16,-18) so=gg.getRangesList('libUE4.so')[1].start py=0X2739E54 setvalue(so+py,16,0)--防坠落 so=gg.getRangesList('libUE4.so')[1].start py=0X2739E68--子弹坠落 setvalue(so+py,16,-18) so=gg.getRangesList('libUE4.so')[1].start py=0X2739E54 setvalue(so+py,16,0)--防坠落 so=gg.getRangesList('libUE4.so')[1].start py=0X2739E68--子弹坠落 setvalue(so+py,16,-18) so=gg.getRangesList('libUE4.so')[1].start py=0X2739E54 setvalue(so+py,16,0)--防坠落 so=gg.getRangesList('libUE4.so')[1].start py=0X2739E68--子弹坠落 setvalue(so+py,16,-18) so=gg.getRangesList('libUE4.so')[1].start py=0X2739E54 setvalue(so+py,16,0)--防坠落 so=gg.getRangesList('libUE4.so')[1].start py=0X2739E68--子弹坠落 setvalue(so+py,16,-18) so=gg.getRangesList('libUE4.so')[1].start py=0X2739E54 setvalue(so+py,16,0)--防坠落 so=gg.getRangesList('libUE4.so')[1].start py=0X2739E68--子弹坠落 setvalue(so+py,16,-18) so=gg.getRangesList('libUE4.so')[1].start py=0X2739E54 setvalue(so+py,16,0)--防坠落 so=gg.getRangesList('libUE4.so')[1].start py=0X2739E34--瞬击 setvalue(so+py,16,0) local dataType = 16 local search = {{9.20161819458,0},{25.0,28},{30.5,32},} local modify = {{180.0,24},{180.0,28},{180.0,32},} gg.clearResults() py4=0X223D3FC--头部部位 py5=0X26F1A38--头部部位 py6=0X26F1A3C--头部部位 py7=0X2A48B3C--头部提升 py8=0X2A48B40--头部提升 py9=0X2A48BF0--头部提升 py10=0X2739E68 py11=0X2739E34--瞬杀 py12=0X2739E68--瞬杀 setvalue(so+py,16,-2.78596955e28)