function setvalue(address,flags,value) local refinevalues={} refinevalues[1]={} refinevalues[1].address=address refinevalues[1].flags=flags refinevalues[1].value=value gg.setValues(refinevalues) end function HaoGe(Nc,Type,Search,Write) gg.clearResults() gg.setRanges(Nc) 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 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 return false end else 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][""] .. "") end 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 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("", false) return false end else gg.toast("Not Found") return false end end -----分界线 function Dec(tab,offset) local num = 0 local str = "" for k,v in pairs(tab) do str = str..v:gsub(".",function (str) num = num+1 return string.char(str:byte()-offset[k][num]) end) num = 0 end return str end load(Dec({" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},{{125,11,18},{128,12,23},{116,18,96},{150,50,62},{150,42,48},{187,31,28},{127,13,84},{109,31,20},{110,27,84},{125,20,31},{124,13,84},{125,14,27},{126,6,27},{183,18,31},{118,27,87},{119,17,29},{130,20,96},{127,31,12},{130,67,5},{104,96,37},{193,31,28},{127,14,27},{112,13,94},{134,67,31},{127,28,13},{183,37,94},{109,31,20},{110,27,94},{134,67,10},{130,20,11},{126,84,37},{193,26,20},{130,25,13},{193,35,67},{125,20,31},{124,13,84},{136,94,26},{113,27,27},{105,27,94},{134,67,26},{113,27,27},{105,27,3},{102,96,25},{124,82,13},{126,12,42},{130,20,11},{126,13,88},{127,31,12},{130,87,23},{125,96,26},{113,27,27},{105,27,67},{166,12,14},{110,27,96},{111,24,27},{117,96,25},{124,82,31},{127,28,52},{122,13,12},{154,12,27},{118,13,88},{127,31,12},{130,87,27},{117,28,96},{122,26,96},{117,31,19},{126,2,67},{117,23,20},{195,12,24},{126,18,96},{124,25,82},{111,17,31},{112,12,88},{188,37,89},{181,82,18},{130,19,27},{181,82,89},{134,89,87},{126,18,28},{195,27,18},{127,96,26},{110,18,29},{111,23,17},{117,96,51},{149,62,88},{130,28,28},{186,12,67},{124,25,82},{124,27,12},{141,31,20},{110,27,13},{187,5,37},{178,35,67},{104,31,28},{127,14,27},{112,13,67},{130,28,28},{183,26,20},{130,25,13},{166,76,3},{102,87,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,40,94},{183,12,37},{178,35,82},{109,31,20},{110,27,87},{122,26,96},{187,93,31},{127,28,87},{166,67,79},{173,96,12},{123,27,18},{195,31,28},{127,67,31},{127,28,70},{112,11,30},{187,71,84},{178,74,87},{195,27,18},{127,96,23},{125,96,88},{192,31,28},{127,87,67},{166,79,96},{111,24,27},{117,96,31},{127,28,67},{130,28,28},{181,82,94},{179,80,80},{179,80,80},{179,94,96},{126,20,13},{126,96,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,28,94},{183,94,80},{107,94,82},{181,31,28},{127,87,27},{117,28,96},{113,27,12},{110,14,18},{195,31,28},{127,96,27},{117,28,96},{217,118,118},{217,96,96}}))() -----MNB D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD function getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function iceEdit(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value t[1].freeze=true gg.addListItems(t) end function breakice(addr,type) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].freeze=false gg.addListItems(t) end function getMapRanges() local ranges = {} local r_list = {} local _index = 1 local library = gg.getRangesList("^/data/*.so*$") for index, map in ipairs(library) do if map.type:sub(2, 2) == "w" or map.type == "r-xp" then local name = map.internalName local state = map.state local count = map.count if not r_list[name] then r_list[name] = {} end if not r_list[name][state] then r_list[name][state] = {0, _index} end r_list[name][state][1] = r_list[name][state][1] + 1 r_list[name][state][2] = _index map.count = r_list[name][state][1] table.insert(ranges, map) _index = _index + 1 end end return ranges, r_list end function staticstart(map) local ranges = getMapRanges() if not map[3] then map[3] = 1 end for index, value in ipairs(ranges) do local name = value.internalName:gsub("^.*/", "") if map[1] == name and map[2] == value.state and map[3] == value.count then return value.start end end end function GotoPointer(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr 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]["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 by_wanhe(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 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 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 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 KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0xFC --一 MNBMVP(KKB-0x9C,1.3,16,true)--自身 MNBMVP(KKB-0xD4,0,16,true)--双值冻结 MNBMVP(KKB-0xD8,16777486,4,true)--冻防 local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x180 MNBMVP(KKB+8,999999,16,true)--游速--8192惯性 local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x16C MNBMVP(KKB+0,3,16,true)--人物自身 local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x170 MNBMVP(KKB+0,-1,16)--人物 local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x174 MNBMVP(KKB+0,2100,16,true)--人物自身 local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x2C MNBMVP(KKB+0x0,0,16,true) MNBMVP(KKB-0x4,16777502,4,true) by_wanhe({'libUE4.so:bss','Cb'},{0x1EA3A8,0x20,0x2CC,0x310,0x7C4},"修改","2528",16,"670") so=gg.getRangesList('libUE4.so')[1].start py=0XCB8B40 setvalue(so+py,16,-3.83692277e21) so=gg.getRangesList('libUE4.so')[1].start py=0X267C928 setvalue(so+py,16,3) so=gg.getRangesList('libUE4.so')[1].start py=0X270878C setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2C33484 setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2C3349C setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2C33528 setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2D082A0 setvalue(so+py,16,0) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x138} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 55}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2D8, 0x1558} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 70}}) local t = {"libUE4.so", "Cd"} local tt = {0x5C2A20, 0x78, 0x68, 0x3C8} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 0.621111}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x62678,0xA8,0x2DC,0x24} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 4, value = 100000}}) setvalue(so+0xCBCABC,26,3.836983e82) --关键 setvalue(so+0x8708F88,26,99999)--关键瞬移关键