--无敌爆头 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"] .. "开启成功") else gg.toast(qmnb[2]["name"] .. "开启成功") end end end end function edit(orig, ret) _om = orig[1].memory or orig[1][1] _ov = orig[3].value or orig[3][1] _on = orig[2].name or orig[2][1] gg.clearResults() gg.setRanges(_om) gg.searchNumber(_ov, orig[3].type or orig[3][2]) sz = gg.getResultCount() if sz < 1 then gg.toast(_on .. "开启成功") else sl = gg.getResults(720) for i = 1, sz do ist = true for v = 4, #orig do if ist == true and sl[i].value == _ov then cd = {{}} cd[1].address = sl[i].address + (orig[v].offset or orig[v][2]) cd[1].flags = orig[v].type or orig[v][3] szpy = gg.getValues(cd) cdlv = orig[v].lv or orig[v][1] cdv = szpy[1].value if cdlv == cdv then pdjg = true ist = true else pdjg = false ist = false end end end if pdjg == true then szpy = sl[i].address for x = 1, #(ret) do xgpy = szpy + (ret[x].offset or ret[x][2]) xglx = ret[x].type or ret[x][3] xgsz = ret[x].value or ret[x][1] xgdj = ret[x].freeze or ret[x][4] xgsj = {{address = xgpy, flags = xglx, value = xgsz}} if xgdj == true then xgsj[1].freeze = xgdj gg.addListItems(xgsj) else gg.setValues(xgsj) end end xgjg = true end end if xgjg == true then gg.toast(_on .. "开启成功") else gg.toast(_on .. "开启成功") 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 gg.toast("开启成功" .. #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("", false) return false end else gg.toast("") return false end end qmnb = { {["memory"] = 32}, {["name"] = "头部"}, {["value"] = 4740038608910024704, ["type"] = 32}, {["lv"] = 4752423507886342144, ["offset"] = 4, ["type"] = 32}, {["lv"] = 1106509824, ["offset"] = 8, ["type"] = 32}, } qmxg = { {["value"] = 80, ["offset"] = 0, ["type"] = 16},--23 {["value"] = 115, ["offset"] = 4, ["type"] = 16},--25 {["value"] = 184, ["offset"] = 8, ["type"] = 16},--30.5 } xqmnb(qmnb) gg.toast("修伤") qmnb = { {["memory"] = 32}, {["name"] = "hook"}, {["value"] = 4771563806291656704, ["type"] = 32}, {["lv"] = 1110966272, ["offset"] = 4, ["type"] = 32}, {["lv"] = 4692750811718056832, ["offset"] = -4, ["type"] = 32}, } qmxg = { {["value"] = 9999, ["offset"] = 0, ["type"] = 16}, } xqmnb(qmnb) Name = "修复" local Nc = 16392 local Lx = 4 local Sz1 = {{1115750516, 0}, {1036831949, -176}} local Sz2 = {{1114636288, -176}} gg.toast("开启成功") gg.searchNumber("-298284466", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(15) gg.editAll("0", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("90000", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("90000", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("500000", gg.TYPE_FLOAT) gg.clearResults() gg.toast("增强") gg.getResults(999) gg.editAll("371;365", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("15;28;16;26;8;18", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("-3.77830899e28;-3.74440972e28;-3.71834013e28;-1.7334334e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.refineNumber("-5.77775931e27", 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.refineNumber("-534315007", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 0) gg.setRanges(gg.REGION_ANONYMOUS) gg.clearResults() Name = "好了" local Nc = 32 local Lx = 16 local Sz1 = {{71500, 0}, {0.10000000149, 36}} local Sz2 = {{400000, 0}} Name = "好了" local Nc = 32 local Lx = 16 local Sz1 = {{88000, 0}, {0.08600000292, 36}} local Sz2 = {{400000, 0}} Name = "好了" local Nc = 32 local Lx = 16 local Sz1 = {{87000, 0}, {0.09600000083, 36}} local Sz2 = {{400000, 0}} Name = "好了" local Nc = 32 local Lx = 16 local Sz1 = {{91500, 0}, {0.07500000298, 36}} local Sz2 = {{400000, 0}} Name = "hook" local Nc = 32 local Lx = 16 local Sz1 = {{71500, 0}, {0.109, 36}} local Sz2 = {{400000, 0}} 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 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 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) 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.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 LSQ_Chain(so, offset, format, value, type, Function) 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 ranges[#ranges+1] = v end end return ranges end local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then 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 return Format(rest, format, value, type, Function) end return os.exit() end 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 S_Pointer(t_So, t_Offset, _bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _t = _bit and 32 or 4 local _S = nil for i, v in pairs(S_list) do local name = v.internalName:gsub('^.*/', '') if t_So[1] == name and t_So[2] == v.state then _S = v break end end if not _S then return nil end local addr = _S.start + t_Offset[1] for i = 2, #t_Offset do local val = gg.getValues({{address=addr, flags=_t}})[1].value if not ti.x64 then val = val & 0xFFFFFFFF end addr = val + t_Offset[i] end return tonumber(addr) 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 HaoGe(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0xFFFFFFFF,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 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[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 gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) else return false end else return false end end function mnnb(Search, Write,Neicun,Mingcg,Shuzhiliang) gg.clearResults() gg.setRanges(Neicun) gg.setVisible(false) gg.searchNumber(Search[1][1], Search[1][3]) 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 = Search[k][3] end tmp = gg.getValues(tmp) for i, v in ip(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] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for i=1, Shuzhiliang do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = w[3] t[#t].value = w[1] if (w[4] == 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 Shuang(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1] ~= false then gg.searchAddress(Search[1][1], 0xFFFFFFFF, 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() if count == 0 then return false end local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][3] 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] = {address = v.address + offset, flags = Search[k][3] or Type} end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do local val = v.value if v.flags == 16 or v.flags == 64 then val = tostring(val):sub(1, 6) num = tostring(num):sub(1, 6) end if tostring(val) ~= 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 return false end local t, t_ = {}, {} for i = 1, #data do for k, w in ipairs(Get) do local offset = w[2] - base if w[1] == false then t_[#t_ + 1] = {address = data[i] + offset, flags = Type} else t[#t + 1] = {address = data[i] + offset, flags = w[3] or Type, value = w[1]} if w[4] == true then gg.addListItems({{address = data[i] + offset, flags = w[3] or Type, freeze = true}}) end end end end if #t > 0 then gg.setValues(t) end if #t_ > 0 then t_ = gg.getValues(t_) gg.loadResults(t_) end return true end --g36c改十字弩 gg.clearResults() gg.setRanges(32) gg.searchNumber("10101000", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1000) gg.editAll("10700100", gg.TYPE_DWORD) Shuang( {{false,23.0,0,16,nil,nil},{25.0,4,16},{30.5,8,16}}, {{80,0,16,false},{115,4,16,false},{184,8,16,false}}, 16,32,"范围" ) local libUE4 = gg.getRangesList('libUE4.so')[1].start setvalue(libUE4 + 0x116E53C, 16, 0) setvalue(libUE4 + 0x116E568, 16, 0) setvalue(libUE4 + 0x116E56C, 16, 0) setvalue(libUE4 + 0x116E570, 16, 0) local ptrList = { {0xACB54, 0x90}, {0xBFF44, 0xF0}, {0xD226C, 0x34}, {0xD57C4, 0x78}, {0xDB0E4, 0xA8}, {0xE2A88, 0x60}, {0xE7E4C, 0x1C}, {0xE8134, 0x4C}, {0xFE8C4, 0xBC} } for _, off in ipairs(ptrList) do local addr = S_Pointer({"libUE4.so:bss", "Cb"}, off) if addr then setvalue(addr, 4, 1634692266) end end gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("90000", gg.TYPE_FLOAT) gg.searchNumber("90000", gg.TYPE_FLOAT) local res = gg.getResults(100) if #res > 0 then gg.editAll("500000", gg.TYPE_FLOAT) end gg.clearResults() gg.setRanges(gg.REGION_BAD) gg.searchNumber("-88.66608428955;26:512", gg.TYPE_FLOAT) gg.searchNumber("26", gg.TYPE_FLOAT) res = gg.getResults(2) if #res > 0 then gg.editAll("-460", gg.TYPE_FLOAT) end gg.clearResults() gg.searchNumber("-88.73961639404;28:512", gg.TYPE_FLOAT) gg.searchNumber("28", gg.TYPE_FLOAT) res = gg.getResults(2) if #res > 0 then gg.editAll("-560", gg.TYPE_FLOAT) end gg.clearResults() local libter = gg.getRangesList("libtersafe.so") if libter and #libter > 0 then local st = libter[1].start setvalue(st + 0x404000, 4, 131842) setvalue(st + 0x40402C, 4, 131842) end local ptr2List = {0xC, 0x44, 0x7C, 0xB4} local base2 = {0x1E5C2C, 0x0, 0x20, 0x32C, 0x380} for _, p in ipairs(ptr2List) do local addr = S_Pointer({"libUE4.so:bss", "Cb"}, {base2[1],base2[2],base2[3],base2[4],base2[5],p}, true) if addr then setvalue(addr, 16, -105) end end gg.clearList() gg.setRanges(gg.REGION_C_DATA | gg.REGION_CODE_APP) gg.searchNumber('0.10000000149;64.50088500977', gg.TYPE_FLOAT) gg.refineNumber('0.10000000149', gg.TYPE_FLOAT) res = gg.getResults(50) if #res > 0 then gg.editAll('0', gg.TYPE_FLOAT) end so=gg.getRangesList("libUE4.so")[1].start py=0xDC7580 setvalue(so+py,4,0) py=0xDC760C setvalue(so+py,4,0) py=0xDC7778 setvalue(so+py,4,0) so=gg.getRangesList('libUE4.so')[1].start py=0X194AC5C setvalue(so+py,4,0) so=gg.getRangesList('libUE4.so')[1].start py=0X30278C8 setvalue(so+py,4,0) so=gg.getRangesList('libUE4.so')[1].start py=0X320DDE8 setvalue(so+py,4,0) so=gg.getRangesList('libUE4.so')[1].start py=0X326F680 setvalue(so+py,4,0) so=gg.getRangesList('libUE4.so')[1].start py=0X330FF18 setvalue(so+py,4,0) so=gg.getRangesList('libUE4.so')[1].start py=0X3B301FC setvalue(so+py,4,0) so=gg.getRangesList("libUE4.so")[1].start py=0x2739E34 setvalue(so+py,16,3.1415926) gg.clearResults() --by.双/XMYM