Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function GetLibStart(address)
- XaLib = XaLib or {}
- local libstart, offset
- if #XaLib == 0 then
- for i, v in pairs({"libil2cpp","libunity"}) do
- for i, v in pairs(gg.getRangesList(v..".so")) do
- table.insert(XaLib,{
- name = v.name:match('[^/]+$'):gsub(".so",""),
- number = i,
- ["start"] = v["start"],
- ["end"] = v["end"]
- })
- end
- end
- end
- for _, v in pairs(XaLib) do
- if address > v["start"] and address < v["end"] then
- libstart, offset = {v.name,v.number}, (address - v.start)
- break
- end
- end
- return libstart, offset
- end
- function DumpClass(ClassName,DumpMode)--Dump
- local Field, Method, Xo = {}, {}
- local x64, c0 = gg.getTargetInfo().x64, string.char(0)
- local off1, typ = x64 and -16 or -8, x64 and 32 or 4
- local metadata = gg.getRangesList("global-metadata.dat")[1]
- if not DumpMode or type(DumpMode) ~= type(1) or DumpMode > 3 or DumpMode < 1 then return end
- gg.clearResults()
- gg.setRanges(gg.REGION_OTHER|gg.REGION_C_ALLOC|gg.REGION_ANONYMOUS)
- gg.searchNumber(":"..c0..ClassName..c0,1,nil,gg.SIGN_EQUAL,metadata["start"],metadata["end"])
- gg.searchPointer(0,typ)
- Xo = gg.getResults(gg.getResultsCount())
- for i, v in pairs(Xo) do v.address = v.address - 16 end
- gg.loadResults(Xo)
- gg.searchPointer(0,typ)
- Xo = gg.getResults(gg.getResultsCount())
- gg.clearResults()
- for i, v in pairs(Xo) do v.address = v.address - 24 - off1 end
- if DumpMode > 1 then--Methods
- local xx1, xx2 = {}, {}
- for i, v in pairs(gg.getValues(Xo)) do
- if v.value > metadata["start"] and v.value < metadata["end"] then
- table.insert(xx1,{address = v.value, flags = 1})--MethodName
- table.insert(xx2,{address = v.address + off1, flags = typ})--address
- end
- end
- xx2 = gg.getValues(xx2)
- for i, v in pairs(gg.getValues(xx1)) do
- local text, x1 = "", {}
- for i = 0, 127 do table.insert(x1,{address = v.address + i,flags = 1}) end
- for i, v in pairs(gg.getValues(x1)) do
- if v.value < 1 then break end
- text = text..string.char(v.value)
- end
- local address = x64 and xx2[i].value or tonumber("0x"..string.sub(tostring(string.format("%X",tonumber(xx2[i].value)) ), -8,-1))
- local start, offset = GetLibStart(address)
- if #text > 0 and text ~= ClassName and start[1] == "libil2cpp" then
- Method[text] = {start = start[2], offset = offset, address = address}
- end
- end
- end
- if DumpMode == 1 or DumpMode == 3 then--Fields
- local xx1, xx2 = {}, {}
- for i, v in pairs(Xo) do v.address = v.address - 8 end
- for i, v in pairs(gg.getValues(Xo)) do
- if v.value > metadata["start"] and v.value < metadata["end"] then
- table.insert(xx1,{address = v.value, flags = 1})--FieldName
- table.insert(xx2,{address = v.address + 24, flags = 4})--offset
- end
- end
- local xx2 = gg.getValues(xx2)
- local last = -9
- for i, v in pairs(gg.getValues(xx1)) do
- text, x1 = "", {}
- for i = 0, 127 do table.insert(x1,{address = v.address + i,flags = 1}) end
- for i, v in pairs(gg.getValues(x1)) do
- if v.value < 1 then break end
- text = text..string.char(v.value)
- end
- if #text > 0 and text:find("[A-Za-z]") and xx2[i].value > -1 then
- if xx2[i].value ~= 0 and xx2[i].value - last < 1 then
- else
- last = xx2[i].value
- Field[text] = {offfser = xx2[i].value}
- end
- end
- end
- end
- if DumpMode == 3 then
- return Field, Method
- elseif DumpMode == 2 then
- return Method
- elseif DumpMode == 1 then
- return Field
- end
- end
- function valueFromClass(Class, offset, refineNumber)
- local x64 = gg.getTargetInfo().x64
- local metadata = gg.getRangesList("global-metadata.dat")[1]
- local typlist = {D = "DWORD", F = "FLOAT", E = "DOUBLE", W = "WORD", B = "BYTE", Q = "QWORD", X = "XOR"}
- local c0 = string.char(0)
- local PointerSize, typ = (x64 and 8 or 4), (x64 and 32 or 4)
- local unsignedFixers = {[4] = 0xFFFFFFFF, [8] = -1}
- local xOffset, Xn, min, max, Xnum = {}, 0, 3e38, 0
- local x1, x2, Xr = {}, {}, {}
- gg.setRanges(gg.REGION_ANONYMOUS|gg.REGION_OTHER|gg.REGION_C_ALLOC)
- gg.clearResults()
- if metadata then
- gg.searchNumber(":"..c0..Class..c0,1,nil,gg.SIGN_EQUAL,metadata["start"],metadata["end"])
- elseif not metadata then
- gg.searchNumber(":"..c0..Class..c0,1)
- end
- gg.searchPointer(0,typ)
- for i, v in pairs(gg.getResults(gg.getResultsCount())) do
- table.insert(x1,{address = v.address + (x64 and 0x30 or 0x18),flags = typ})
- table.insert(x1,{address = v.address + (x64 and 0x38 or 0x1C),flags = typ})
- end
- x1 = gg.getValues(x1)
- for i = 1, #x1, 2 do x1[i], x1[i+1] = #(tostring(x1[i].value)):gsub("%-","") > (x64 and 11 or 5) and x1[i].value == x1[i+1].value and x1[i] or nil, nil end
- gg.clearResults()
- gg.setRanges(gg.REGION_ANONYMOUS)
- for i, v in pairs(x1) do
- if v.value then gg.searchNumber(v.value,typ) end
- for i, v in pairs(gg.getResults(gg.getResultsCount())) do table.insert(Xr,v) end
- gg.clearResults()
- end
- x1 = {}
- for v in offset:gmatch("%S+") do
- if v:find("0[Xx].-") then
- Xn, min, max = Xn + 1, min > tonumber(v) and tonumber(v) or min, max < tonumber(v) and tonumber(v) or max
- Xnum = max == tonumber(v) and Xn or Xnum
- end
- table.insert(xOffset,(v:find("0[Xx].-") and v or typlist[v:sub(1,1)]))
- end
- for i, v in pairs(Xr) do
- for i, v2 in pairs(xOffset) do
- if not v2:find("0[Xx].-") then
- for v3 = i - 1, 1, -1 do
- if not xOffset[v3]:find("0[Xx].-") then break end
- table.insert(x1,{address = v.address + xOffset[v3], offset = xOffset[v3], flags = _G["gg"]["TYPE_"..v2]})
- end
- end
- end
- end
- for i = (Xn - Xnum) + 1, #x1, Xn do
- local Xclass, Xadds, fixedPointer = {}, {}, x1[i].address - (x1[i].address%PointerSize)
- for off = 0, max, PointerSize do table.insert(Xadds,{address = fixedPointer - off,flags = typ}) end
- for _, v in pairs(gg.getValues(Xadds)) do table.insert(Xclass,{address = v.value + (PointerSize*2),flags = typ}) end
- for _, v in pairs(gg.getValues(Xclass)) do
- v.value = v.value < 0 and v.value & unsignedFixers[PointerSize] or v.value
- if metadata and (v.value > metadata["start"] and v.value < metadata["end"]) then
- if x1[i].address - Xadds[_].address == x1[i].offset then
- for v1 = 0, Xn - 1 do table.insert(x2,x1[i + (Xn - Xnum) + v1]) end
- end
- break
- elseif not metadata then
- for v1 = 0, Xn - 1 do table.insert(x2,x1[i + (Xn - Xnum) + v1]) end
- end
- end
- end
- gg.loadResults(x2)
- if refineNumber then
- if refineNumber:find("%:") and not refineNumber:find(".-:[0-9]") then
- refineNumber = refineNumber:match("(.-)%:")..refineNumber:match("%:.")..((max - min) + 1)
- end
- gg.refineNumber(refineNumber)
- end
- return gg.getResultsCount() > 0
- end
- function refineOffset(offset,load)
- local xOffset, x1 = {}, {}
- local x64 = gg.getTargetInfo().x64
- local PointerSize, typ = x64 and 8 or 4, x64 and 32 or 4
- local unsignedFixers = {[4] = 0xFFFFFFFF,[8] = -1}
- local metadata = gg.getRangesList("global-metadata.dat")[1]
- for v in offset:gmatch("%S+") do table.insert(xOffset,v) end
- for i, v in pairs(gg.getResults(gg.getResultsCount())) do
- local classname, adds = {}, {}
- for off = 0, xOffset[#xOffset], PointerSize do table.insert(adds,{address = (v.address - (v.address%PointerSize)) - off, flags = typ}) end
- for _, v1 in pairs(gg.getValues(adds)) do table.insert(classname,{address = v1.value + (PointerSize*2),flags = typ}) end
- for _, v1 in pairs(gg.getValues(classname)) do
- v1.value = v1.value < 0 and v1.value & unsignedFixers[PointerSize] or v1.value
- if v1.value > metadata["start"] and v1.value < metadata["end"] then
- for __, v2 in pairs(xOffset) do
- if v.address - adds[_].address == v2 then table.insert(x1,v) break end
- end
- break
- end
- end
- end
- return not load and x1 or gg.loadResults(x1)
- end
- function Update()
- local ClassList, DumpMethodList = {
- "PlayerDataStorage",
- "CheatHelper",
- "FreeDriveControl",
- "FuelTank",
- "TimeCheatingDetector",
- "DetectorsExamples",
- "MultiPlayer",
- "GeneralPlayerData",
- "CarOutInControl",
- "MultiPersonControl"
- }, {}
- local Alist, Mlist, Xlist, Error = {
- {"PlayerDataStorage","get_IsBanned"},
- {"CheatHelper","IsCheatActivated"},
- {"FreeDriveControl","resetAfter"},
- {"FuelTank","StopFullingFuel"},
- {"TimeCheatingDetector","add_CheatChecked"},
- {"TimeCheatingDetector","set_LastOnlineTimeResult"},
- {"TimeCheatingDetector","get_IsCheckingForCheat"},
- {"TimeCheatingDetector","set_IsCheckingForCheat"},
- {"TimeCheatingDetector","ForceCheck"},
- {"TimeCheatingDetector","IsReadyForForceCheck"},
- {"TimeCheatingDetector","CheckForCheat"},
- {"TimeCheatingDetector","remove_CheckPassed"},
- {"TimeCheatingDetector","SetErrorCallback"},
- {"DetectorsExamples","SpeedHackDetectorExample"},
- {"DetectorsExamples","InjectionDetectorExample"},
- {"DetectorsExamples","ObscuredCheatingDetectorExample"},
- {"DetectorsExamples","TimeCheatingDetectorExample"},
- {"DetectorsExamples","ForceTimeCheatingDetectorCheck"},
- {"MultiPlayer","IsRoomBanned"},
- {"MultiPlayer","toMainMenu"},
- {"MultiPlayer","CheckIfIDExistsInRoom"},
- {"MultiPlayer","ShouldBeRemovedFromRoom"},
- {"MultiPlayer","OnRemoveFromRoom"},
- {"MultiPlayer","OnReport"},
- {"MultiPlayer","KickedFromCar"},
- {"GeneralPlayerData","UpdateMoney"},
- },{--Alist^
- {"CarOutInControl","CanEnterAsDriver"},
- {"CarOutInControl","CanEnterAsPassenger"},
- {"MultiPersonControl","SendCarExit"},
- {"GeneralPlayerData","TowCarMultiplayer"},
- {"GeneralPlayerData","UnTowCarMultiplayer"},
- {"MultiPlayer","PlayerExitFromCar"}
- },{--Mlist^
- {"6e3;999::5",6e3,gg.TYPE_FLOAT,"libil2cpp"},
- {"1E7",1e7,gg.TYPE_FLOAT,"libunity"},
- {"0.81399995;-2::5",0.81399995,gg.TYPE_FLOAT,"libil2cpp"},
- {"-8e1;1E32::5",1e32,gg.TYPE_FLOAT,"libunity"},
- {"34e-2",34e-2,gg.TYPE_FLOAT,"libil2cpp"},
- },{}--Xlist^
- for _, v in pairs(ClassList) do DumpMethodList[v] = DumpClass(v,2) end
- Aoffset, Aoff = "{", "{"
- for i, v in pairs(Alist) do
- local x1 = DumpMethodList[v[1]]
- local x2 = x1 and x1[v[2]]
- if x2 then
- x1 = gg.getValues({{address = x2.address,flags = 4},{address = x2.address + 0x4,flags = 4}})
- Aoffset, Aoff =
- Aoffset.."{address=libil2cpp["..x2.start.."].start+"..x2.offset..",flags=4},{address=libil2cpp["..x2.start.."].start+"..(x2.offset + 0x4).." ,flags=4},",
- Aoff..x1[1].value..","..x1[2].value
- else
- print("更新失败[A]["..i.."]")
- end
- end
- Aoffset, Aoff = Aoffset.."}", Aoff.."}"
- Moffset, Moff = "{", "{"
- for i, v in pairs(Mlist) do
- Moffset, Moff = Moffset.."{", Moff.."{"
- local x1 = DumpMethodList[v[1]]
- local x2 = x1 and x1[v[2]]
- if x2 then
- local x1 = gg.getValues({{address = x2.address,flags = 4},{address = x2.address + 0x4,flags = 4}})
- Moffset, Moff =
- Moffset.."{address=libil2cpp["..x2.start.."].start+"..x2.offset..",flags=4},{address=libil2cpp["..x2.start.."].start+"..(x2.offset + 0x4).." ,flags=4},",
- Moff..x1[1].value..","..x1[2].value
- else
- table.insert(Error,"更新失败[M]["..i.."]")
- end
- Moffset, Moff = Moffset.."},", Moff.."},"
- end
- Moffset, Moff = Moffset.."}", Moff.."}"
- gg.setRanges(gg.REGION_CODE_APP)
- Xoffset, Xoff = "{", "{"
- for _, v in pairs(Xlist) do
- gg.clearResults()
- gg.searchNumber(v[1],v[3])
- gg.refineNumber(v[2],v[3])
- Xoffset, Xoff = Xoffset.."{", Xoff.."{"..v[2].."},"
- if gg.getResultsCount() > 0 then
- for i, v1 in pairs(gg.getResults(gg.getResultsCount())) do
- local XXlib, XXoffset = GetLibStart(v1.address)
- if XXlib and XXlib[1] == v[4] then
- Xoffset = Xoffset.."{address="..XXlib[1].."["..XXlib[2].."].start+"..XXoffset..",flags="..v[3].."},"
- end
- end
- else
- table.insert(Error,"更新失败[X]["..i.."]")
- end
- Xoffset = Xoffset.."},"
- gg.clearResults()
- end
- Xoffset, Xoff = Xoffset.."}", Xoff.."}"
- if #Error > 0 and gg.alert(table.concat(Error,"\n"),"继续","复制") == 2 then
- gg.copyText(table.concat(Error,"\n"))
- end
- Xout =
- "_=(function()\n"..
- "libil2cpp, libunity = gg.getRangesList('libil2cpp.so'), gg.getRangesList('libunity.so')\n"..
- "Mon = {'h200080D2','hC0035FD6'}\n"..
- "Aoffset, Moffset, Xoffset =\n"..
- Aoffset..",\n"..
- Moffset..",\n"..
- Xoffset.."\n"..
- "Aoff, Moff, Xoff =\n"..
- Aoff..",\n"..
- Moff..",\n"..
- Xoff.."\nend)([[\n\n"..Xinfo.."[Hack(0.3)]\n\n]])"
- gg.saveList(Qfile)
- io.open(Qfile,"w"):write(string.dump(load(Xout),true))
- return true
- end
- function SetValues(Xr,value,freeze)
- local a = 0
- if not value then return false end
- for i, v in pairs(Xr) do
- a = (a + 1)%(#value+1)
- a = a < 1 and 1 or a
- v.value, v.freeze = value[a], true
- end
- gg.addListItems(Xr)
- if not freeze then gg.removeListItems(Xr) end
- return true
- end
- function sleep(t)
- for i = 1, t do
- if gg.isVisible() then return false end
- gg.sleep(1)
- end
- return true
- end
- f1 = {
- function()
- repeat
- if not sleep(10) then break end
- SetValues(Xoffset[1],{math.random(-22000,16000)},true)
- until gg.isVisible()
- end,
- function()
- repeat
- if not sleep(25) then break end
- gg.toast("ON")
- SetValues(Xoffset[1],{math.random(-22000,16000)},true)
- if not sleep(25) then break end
- gg.toast("OFF")
- SetValues(Xoffset[1],Xoff[1],true)
- until gg.isVisible()
- end,
- function()
- repeat
- gg.toast(">")
- for i = Xoff[1][1] - 25, Xoff[1][1] + 25, 5 do
- if not sleep(50) then break end
- SetValues(Xoffset[1],{i},true)
- end
- gg.toast("<")
- for i = Xoff[1][1] + 25, Xoff[1][1] - 25, -5 do
- if not sleep(50) then break end
- SetValues(Xoffset[1],{i},true)
- end
- until gg.isVisible()
- SetValues(Xoffset[1],Xoff[1])
- end
- }
- function f5(new)
- R5 = (new > 2 or not R5) and {} or R5
- if new == 2 and #R5 < 1 or new > 2 then
- gg.setRanges(32)
- gg.clearResults()
- gg.searchNumber("-2097152000",4)
- R5 = gg.getResults(gg.getResultsCount())
- gg.clearResults()
- for i, v in pairs(R5) do v.address, v.flags = v.address + 0xA8, 16 end
- gg.loadResults(R5)
- gg.refineNumber(1e32)
- R5 = gg.getResults(gg.getResultsCount())
- gg.clearResults()
- end
- SetValues(R5,({{1e32},{1}})[(new < 1 and 1 or 2)])
- R5 = new < 1 and {} or R5
- end
- function f6(new)
- R6 = (new == 3 or not R6) and {} or R6
- if new > 0 and #R6 < 1 or new > 1 then
- valueFromClass("DynamicVehicle", "0xE0 F","-1~1")
- for i, v in pairs(gg.getResults(gg.getResultsCount())) do table.insert(R6,v) end
- gg.clearResults()
- last6 = nil
- end
- gg.loadResults(R6)
- if last6 then gg.refineNumber(10) end
- R6 = refineOffset("0xE0")
- gg.clearResults()
- SetValues(R6,({{-0.30500000715},{10}})[(new < 1 and 1 or 2)])
- R6, last6 = new < 1 and {} or R6, 1
- end
- function f7(input)
- R7 = R7 or {}
- if input:find("[0-9]") then
- if #R7 < 1 or input:find("[Xx]") then
- gg.removeListItems(R7)
- local x1
- R7 = {}
- gg.clearResults()
- gg.setRanges(32)
- gg.searchNumber("-2097152000",4)
- x1 = gg.getResults(gg.getResultsCount())
- for i, v in pairs(x1) do v.address, v.flags = v.address + 0xA8, 16 end
- gg.loadResults(x1)
- gg.refineNumber("1e32")
- x1 = {}
- for i, v in pairs(gg.getResults(gg.getResultsCount())) do
- table.insert(x1,{address = v.address - 0xA8,flags = 16})
- table.insert(x1,{address = x1[#x1].address + 0x68,flags = 16})
- table.insert(x1,{address = x1[#x1-1].address + 0x6C,flags = 16})
- table.insert(x1,{address = x1[#x1-2].address + 0x70,flags = 16})
- end
- gg.clearResults()
- x1 = gg.getValues(x1)
- for i = 4, #x1, 4 do
- if x1[i].flags == 16 and (x1[i-2].value ~= 0 or x1[i-1].value ~= 0 or x1[i].value ~= 0) then
- local address = x1[i-3].address
- table.insert(R7,{address = address + 0x6C,flags = 16,value = 0,freeze = true})
- end
- end
- end
- for i, v in pairs(R7) do v.value, v.freeze = tonumber(input), input:find("[Ff]") and true end
- gg.addListItems(R7)
- else
- gg.removeListItems(R7)
- end
- end
- function f8(value)
- R8 = R8 or {}
- if #R8 < 1 or value:find("[Xx]")then
- gg.clearResults()
- gg.setRanges(gg.REGION_ANONYMOUS)
- gg.searchNumber(1,64)
- R8 = gg.getResults(gg.getResultsCount())
- for i, v in pairs(R8) do v.address, v.flags = v.address - 0xC, 16 end
- gg.loadResults(R8)
- gg.sleep(300)
- gg.searchFuzzy("0", gg.SIGN_FUZZY_NOT_EQUAL, 16, 0, -1, 0)
- R8 = gg.getResults(gg.getResultsCount())
- for i, v in pairs(R8) do v.address, v.flags = v.address + 0xC, 64 end
- Xn = 1
- end
- gg.loadResults(R8)
- gg.refineNumber(Xn)
- R8, Xn = gg.getResults(gg.getResultsCount()), value:gsub("[A-Za-z]","")
- gg.clearResults()
- SetValues(R8,{Xn})
- end
- function f9(value)
- R9 = R9 or {}
- if #R10 < 1 or value:find("[Xx]") then
- valueFromClass("SellCarTrigger", "0x48 0x60 0x64 D","0~40;-2147483647~2147483647;-2147483647~2147483647::")
- refineOffset("0x60 0x64",true)
- gg.refineNumber("-2147483647~2147483647;-2147483647~2147483647::5")
- R9 = refineOffset("0x64")
- gg.clearResults()
- end
- local x1 = {}
- for i, v in pairs(R9) do
- table.insert(x1,{address = v.address - 0x4, flags = v.flags})
- table.insert(x1,v)
- end
- SetValues(x1,{0,value:gsub("[A-Za-z]","")},true)
- end
- function f10(Input)
- local c0 = string.char(0)
- R10, xtext = R10 or {}, {Input:match("(.-) "),Input:match(" (.*)"):gsub("%[[xX]%]",""):gsub("%[[Bb][Oo][Oo][Mm]%]",""):gsub("[[xX]]",""):gsub("[[Bb][Oo][Oo][Mm]]","")}
- if #xtext < 2 or #xtext[2] < 1 then return end
- gg.setRanges(gg.REGION_ANONYMOUS)
- if not Aaddress then
- gg.clearResults()
- gg.searchNumber("-2147483647~2147483647", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 1)
- Aaddress = gg.getResults(1)[1].address
- gg.clearResults()
- end
- if Input:find("[[%[][Xx][%]]]") or not R10[1] or #R10[1] == 0 then
- local test, x1, Max
- R10, Max = {}, 0
- gg.searchNumber(";"..c0..xtext[1]..c0)
- gg.refineNumber(";"..c0..xtext[1])
- test = gg.getResults(gg.getResultsCount())
- gg.refineNumber(0)
- x1 = gg.getResults(gg.getResultsCount())
- for i, v in pairs(x1) do v.address = v.address - 0x2 end
- for i, v in pairs(test) do
- if v.value == 0 and i ~= 1 then break end
- if v.value > 0 then Max = Max + 1 end
- end
- gg.loadResults(x1)
- gg.refineNumber(Max)
- R10[1], R10[2] = refineOffset("0x10"), {}
- for i, v in pairs(R10[1]) do
- table.insert(R10[2],{address = v.address + 0x2, flags = v.flags})
- end
- gg.clearResults()
- elseif Input:find("[[%[][Rr][]%]]") then
- gg.loadResults(R10[1])
- refineOffset("0x10",true)
- gg.refineNumber((Boom and 32767 or Max))
- SetValues(gg.getResults(#R10[1]),{1})
- gg.clearResults()
- return
- else
- gg.loadResults(R10[1])
- refineOffset("0x10",true)
- gg.refineNumber((Boom and 32767 or Max))
- R10 = {gg.getResults(#R10[1]),{}}
- for i, v in pairs(R10[1]) do
- table.insert(R10[2],{address = v.address + 0x2, flags = v.flags})
- end
- end
- local test, Xon10, Xr10, Xoffset = {}, {}, {}, ""
- Max = 0
- Boom = Input:find("[[%[][Bb][Oo][Oo][Mm][]%]]")
- for i = 1, #xtext[2] + 1 do
- table.insert(test,{address = Aaddress + (0x2 * i), flags = gg.TYPE_WORD})
- end
- gg.loadResults(test)
- gg.getResults(#test)
- gg.editAll(";"..xtext[2]..c0,gg.TYPE_WORD)
- for i, v in pairs(gg.getResults(#test)) do
- if v.value == 0 then Max = i - 1 break end
- table.insert(Xon10,v.value)
- end
- for i, v in pairs(R10[2]) do
- for i = 1, Max do
- table.insert(Xr10,{address = v.address + (2 * i), flags = v.flags})
- Xoffset = Xoffset.." "..string.format("0x%X",(0x12 + (2 * i)))
- end
- end
- gg.loadResults(Xr10)
- SetValues(R10[1],({{Max},{32767}})[(Boom and 2 or 1)])
- SetValues(refineOffset(Xoffset),Xon10)
- gg.clearResults()
- gg.toast("名字修改:"..xtext[1].." > "..xtext[2])
- end
- function f11(Input)
- if Input:find("[1-2] [1-9]") then
- local number, Svalue = tonumber(Input:match("(%S+)")), tonumber(Input:match(" (%S+)"))
- local Xvalue = number == 1 and 2.5 * Svalue or (3 * Svalue) - 6
- if number == 1 then
- SetValues(Xoffset[6],{Xvalue})
- SetValues(Xoffset[7],Xoff[7])
- else
- SetValues(Xoffset[6],Xoff[6])
- SetValues(Xoffset[7],{Xvalue})
- end
- else
- SetValues(Xoffset[6],Xoff[6])
- SetValues(Xoffset[7],Xoff[7])
- end
- end
- function f13()
- valueFromClass("UIInput","0x34 D","8~150")
- SetValues(gg.getResults(gg.getResultsCount()),{2147483647})
- gg.copyText(("҈"):rep(1200),true)
- gg.clearResults()
- end
- function f14()
- pass = 1
- repeat
- repeat until pass or gg.isVisible()
- pass = nil
- gg.setVisible(false)
- local menu = gg.prompt({"X(左右)(高速公路比赛方向)","Y(上下)","Z(前后)(城市1比赛方向)","X(上下)(高速公路比赛方向)","Y(左右)","Z(上下)(城市1比赛方向)","❄️X(左右)","❄️Y(上下)","❄️Z(前后)","❄️X(上下)","❄️Y(左右)","❄️Z(上下)","重置","返回"},last14,{"number","number","number","number","number","number","checkbox","checkbox","checkbox","checkbox","checkbox","checkbox","checkbox","checkbox","checkbox"})
- if menu then
- menu[1], menu[2], menu[3], menu[4], menu[5], menu[6] = tonumber(menu[1]) or 0, tonumber(menu[2]) or 0, tonumber(menu[3]) or 0, tonumber(menu[4]) or 0, tonumber(menu[5]) or 0, tonumber(menu[6]) or 0
- last14 = {menu[1],menu[2],menu[3],menu[4],menu[5],menu[6],menu[7],menu[8],menu[9],menu[10],menu[11],menu[12]}
- if menu[14] then break end
- if menu[13] or R14 == nil then
- gg.clearList()
- R14 = {x = {},y = {},z = {},X = {}, Y = {}, Z = {}}
- end
- if #R14.x < 1 then
- local x1, x2 = {}, {}
- gg.setRanges(32)
- gg.clearResults()
- gg.searchNumber("-2097152000",4)
- x1 = gg.getResults(gg.getResultsCount())
- gg.clearResults()
- for i, v in pairs(x1) do v.address, v.flags = v.address + 0xA8, 16 end
- for i, v in pairs(gg.getValues(x1)) do
- if v.value == 1.0000000331813535E32 or v.value == 10 then
- table.insert(x2,{address = v.address - 0xA8,flags = 16})
- table.insert(x2,{address = x2[#x2].address + 0x68,flags = 16})
- table.insert(x2,{address = x2[#x2-1].address + 0x6C,flags = 16})
- table.insert(x2,{address = x2[#x2-2].address + 0x70,flags = 16})
- else
- table.insert(x2,{address = 0x0,flags = 1})
- table.insert(x2,{address = 0x1,flags = 1})
- table.insert(x2,{address = 0x2,flags = 1})
- table.insert(x2,{address = 0x3,flags = 1})
- end
- end
- x2 = gg.getValues(x2)
- for i = 4, #x2, 4 do
- if x2[i].flags == 16 and (x2[i-2].value ~= 0 or x2[i-1].value ~= 0 or x2[i].value ~= 0) then
- local address = x2[i-3].address
- table.insert(R14.x,{address = address + 0x68,flags = 16,value = 0,freeze = true})
- table.insert(R14.y,{address = address + 0x6C,flags = 16,value = 0,freeze = true})
- table.insert(R14.z,{address = address + 0x70,flags = 16,value = 0,freeze = true})
- table.insert(R14.X,{address = address + 0x78,flags = 16,value = 0,freeze = true})
- table.insert(R14.Y,{address = address + 0x7C,flags = 16,value = 0,freeze = true})
- table.insert(R14.Z,{address = address + 0x80,flags = 16,value = 0,freeze = true})
- end
- end
- end
- for i, v in pairs(R14.x) do v.value = menu[1] end
- for i, v in pairs(R14.y) do v.value = menu[2] end
- for i, v in pairs(R14.z) do v.value = menu[3] end
- for i, v in pairs(R14.X) do v.value = menu[4] end
- for i, v in pairs(R14.Y) do v.value = menu[5] end
- for i, v in pairs(R14.Z) do v.value = menu[6] end
- gg.setValues(R14.x)
- gg.setValues(R14.y)
- gg.setValues(R14.z)
- gg.setValues(R14.X)
- gg.setValues(R14.Y)
- gg.setValues(R14.Z)
- if menu[7] then gg.addListItems(R14["x"]) else gg.removeListItems(R14["x"]) end
- if menu[8] then gg.addListItems(R14["y"]) else gg.removeListItems(R14["y"]) end
- if menu[9] then gg.addListItems(R14["z"]) else gg.removeListItems(R14["z"]) end
- if menu[10] then gg.addListItems(R14["X"]) else gg.removeListItems(R14["X"]) end
- if menu[11] then gg.addListItems(R14["Y"]) else gg.removeListItems(R14["Y"]) end
- if menu[12] then gg.addListItems(R14["Z"]) else gg.removeListItems(R14["Z"]) end
- end
- until nil
- pass = 1
- end
- function AntiBan(x)
- SetValues(Aoffset,(x == 1 and Mon or Aoff))
- end
- function Data()
- local x64 = gg.getTargetInfo().x64
- local Xversion = gg.getTargetInfo().versionName
- Qfile, Cfile = "/sdcard/Q/file/t.V _ V.t", "/sdcard/C/file/t.V _ V.t"
- if #gg.getRangesList("libil2cpp.so") < 1 then
- repeat os.exit() until nil
- elseif io.open(Cfile,"r") then
- local Check, Cfile = {
- {"CheckQfile","检测数据失败",true},
- {"LoadQfile","数据加载失败",true},
- {"StartAntiBan","防封加载失败",true},
- }, io.open(Cfile,"r"):read("*all")
- for i, v in pairs(Check) do
- if Cfile:find(v[1]) then
- gg.alert("⚠️发现脚本无法启动⚠️"..v[2],"继续")
- if v[3] then
- os.remove(Cfile)
- os.remove(Qfile)
- end
- break
- end
- end
- end
- gg.saveList(Cfile)
- io.open(Cfile,"w"):write("CheckQfile")
- local file = loadfile(Qfile) and io.open(Qfile,"r"):read("*all") or ""
- Code = file:match("CPM%[.-%]%[x.-%](%[.-%])") or "NaN"
- Qinfo = file:match("CPM%[.-%]%[x.-%]") or "CPM[NaN][NaN]"
- Xinfo = "CPM["..Xversion.."][x"..(x64 and 64 or 32).."]"
- io.open(Cfile,"w"):write("LoadQfile")
- if loadfile(Qfile) then loadfile(Qfile)() end
- gg.setVisible(false)
- if Qinfo ~= Xinfo or not Aoffset or Code ~= "[Hack(0.3)]"then
- Qinfo = "请更新脚本\n"..Qinfo.." > "..Xinfo
- else
- io.open(Cfile,"w"):write("StartAntiBan")
- SetValues(Aoffset,Mon)
- end
- gg.toast(Qinfo)
- os.remove(Cfile)
- end
- function Start()
- pass = 1
- repeat
- repeat until pass or gg.isVisible()
- pass = nil
- gg.setVisible(false)
- UserInput = gg.prompt({
- "隐形 | 闪现 | 扫地[0;3]",--x
- "(强制上车)1主 | 2副 | 3主+霸占 | 4副+霸占 | 5主副 | 6主副+霸占[0;6]",--x
- "(拖车)半无限拖车 | 锁定被拖车辆[0;2]",--x
- "旋转 | 摇摆[0;2]",--x
- "(穿墙)房外启动 | 房内启动 | 重新搜寻[0;3]",--x
- "不倒翁 | 继续搜寻 | 重新搜寻[0;3]",--x
- "重力(上下) + (全车虚空 | 防挂) x重搜 f冻结 清空关闭功能",--x
- "人物加速 x重搜",--x
- "免费买车 x重搜",--x
- "原名 新名 [x]重搜 [boom]聊天室字体异常 [r]修复连接伺服器异常",--x
- "(漂浮) 房外启动-仅限车",--x
- "踢人下车",--x
- "聊天室炸弹",--x
- "重力",--x
- "更新脚本",--x
- "退出"--x
- },last,{
- "number",
- "number",
- "number",
- "number",
- "number",
- "number",
- "text",
- "text",
- "text",
- "text",
- "text",
- "checkbox",
- "checkbox",
- "checkbox",
- "checkbox",
- "checkbox"
- })
- if UserInput then
- last = {}
- for i, v in pairs({1,2,3,4,5,6,7,8,9,10,11,12,13}) do table.insert(last,UserInput[v]) end
- if UserInput[16] then Xc = exit break end
- if UserInput[15] or Qinfo ~= Xinfo then
- if gg.alert("是否要更新","是","否") == 1 then
- if Qinfo == Xinfo then SetValues(Aoffset,Aoff) end
- Xc = update
- break
- end
- end
- if Qinfo == Xinfo then
- SetValues(Xoffset[1],({[0]=Xoff[1],{-6000},{-6000},Xoff[1]})[tonumber(UserInput[1])])--1
- SetValues(Moffset[1],({[0]=Moff[1],Mon,Moff[1],Mon,Moff[1],Mon,Mon})[tonumber(UserInput[2])])--2
- SetValues(Moffset[2],({[0]=Moff[2],Moff[2],Mon,Moff[2],Mon,Mon,Mon})[tonumber(UserInput[2])])--2
- SetValues(Moffset[3],({[0]=Moff[3],Moff[3],Moff[3],Mon,Mon,Mon,Mon})[tonumber(UserInput[2])])--2
- SetValues(Moffset[4],({[0]=Moff[4],Mon,Moff[4]})[tonumber(UserInput[3])])--3
- SetValues(Moffset[5],({[0]=Moff[5],Moff[5],Mon})[tonumber(UserInput[3])])--3
- SetValues(Xoffset[2],({[0]=Xoff[2],{-20},{-1}})[tonumber(UserInput[4])])--4
- SetValues(Xoffset[4],({[0]=Xoff[4],{1},Xoff[4]})[tonumber(UserInput[5])])--5
- SetValues(Xoffset[3],({[0]=Xoff[3],{-0.1}})[(#UserInput[7] ~= 0 and 1 or 0)])--7
- SetValues(Moffset[6],({[0]=Moff[6],Mon})[(UserInput[12] and 1 or 0)])--12
- end
- f5(tonumber(UserInput[5]))--5
- f6(tonumber(UserInput[6]))--6
- f7(UserInput[7])--7
- if UserInput[8]:find("[0-9]") then f8(UserInput[8]) end--8
- if UserInput[9]:find("[0-9]") then f9(UserInput[9]) end--9
- if UserInput[10]:find(".- .-") then f10(UserInput[10]) end--10
- f11(UserInput[11])
- if UserInput[13] then f13() end--13
- if UserInput[15] then f15() end--13
- end
- if Qinfo == Xinfo and last then
- if tonumber(last[1]) > 0 then f1[tonumber(last[1])]() end--1
- end
- until nil
- end
- function Oalert(string)
- Xc = gg.alert(string,"重启","退出") == 2 and exit or restart
- end
- update, restart, exit = 1, 2, 3
- repeat
- Xc = nil
- if not pcall(load(Data)) then Oalert("获取数据错误") end
- if not Xc and not pcall(load(Start)) then Oalert("运行失败") end
- if Xc == update and not pcall(load(Update)) then Oalert("更新失败") end
- until Xc == exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement