Advertisement
pinenxu

[Script]-Fun

May 25th, 2024 (edited)
1,466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.05 KB | Gaming | 0 0
  1. function GetLibStart(address)
  2.   XaLib = XaLib or {}
  3.   local libstart, offset
  4.   if #XaLib == 0 then
  5.     for i, v in pairs({"libil2cpp","libunity"}) do
  6.       for i, v in pairs(gg.getRangesList(v..".so")) do
  7.         table.insert(XaLib,{
  8.           name = v.name:match('[^/]+$'):gsub(".so",""),
  9.           number = i,
  10.           ["start"] = v["start"],
  11.           ["end"] = v["end"]
  12.         })
  13.       end
  14.     end
  15.   end
  16.   for _, v in pairs(XaLib) do
  17.     if address > v["start"] and address < v["end"] then
  18.       libstart, offset = {v.name,v.number}, (address - v.start)
  19.       break
  20.     end
  21.   end
  22.   return libstart, offset
  23. end
  24.  
  25. function DumpClass(ClassName,DumpMode)--Dump
  26.   local Field, Method, Xo = {}, {}
  27.   local x64, c0 = gg.getTargetInfo().x64, string.char(0)
  28.   local off1, typ = x64 and -16 or -8, x64 and 32 or 4
  29.   local metadata = gg.getRangesList("global-metadata.dat")[1]
  30.   if not DumpMode or type(DumpMode) ~= type(1) or DumpMode > 3 or DumpMode < 1 then return end
  31.   gg.clearResults()
  32.   gg.setRanges(gg.REGION_OTHER|gg.REGION_C_ALLOC|gg.REGION_ANONYMOUS)
  33.   gg.searchNumber(":"..c0..ClassName..c0,1,nil,gg.SIGN_EQUAL,metadata["start"],metadata["end"])
  34.   gg.searchPointer(0,typ)
  35.   Xo = gg.getResults(gg.getResultsCount())
  36.   for i, v in pairs(Xo) do v.address = v.address - 16 end
  37.   gg.loadResults(Xo)
  38.   gg.searchPointer(0,typ)
  39.   Xo = gg.getResults(gg.getResultsCount())
  40.   gg.clearResults()
  41.   for i, v in pairs(Xo) do v.address = v.address - 24 - off1 end
  42.   if DumpMode > 1 then--Methods
  43.     local xx1, xx2 = {}, {}
  44.     for i, v in pairs(gg.getValues(Xo)) do
  45.       if v.value > metadata["start"] and v.value < metadata["end"] then
  46.         table.insert(xx1,{address = v.value, flags = 1})--MethodName
  47.         table.insert(xx2,{address = v.address + off1, flags = typ})--address
  48.       end
  49.     end
  50.     xx2 = gg.getValues(xx2)
  51.     for i, v in pairs(gg.getValues(xx1)) do
  52.       local text, x1 = "", {}
  53.       for i = 0, 127 do table.insert(x1,{address = v.address + i,flags = 1}) end
  54.       for i, v in pairs(gg.getValues(x1)) do
  55.         if v.value < 1 then break end
  56.         text = text..string.char(v.value)
  57.       end
  58.       local address = x64 and xx2[i].value or tonumber("0x"..string.sub(tostring(string.format("%X",tonumber(xx2[i].value)) ), -8,-1))
  59.       local start, offset = GetLibStart(address)
  60.       if #text > 0 and text ~= ClassName and start[1] == "libil2cpp" then
  61.         Method[text] = {start = start[2], offset = offset, address = address}
  62.       end
  63.     end
  64.   end
  65.  
  66.   if DumpMode == 1 or DumpMode == 3 then--Fields
  67.     local xx1, xx2 = {}, {}
  68.     for i, v in pairs(Xo) do v.address = v.address - 8 end
  69.     for i, v in pairs(gg.getValues(Xo)) do
  70.       if v.value > metadata["start"] and v.value < metadata["end"] then
  71.         table.insert(xx1,{address = v.value, flags = 1})--FieldName
  72.         table.insert(xx2,{address = v.address + 24, flags = 4})--offset
  73.       end
  74.     end
  75.     local xx2 = gg.getValues(xx2)
  76.     local last = -9
  77.     for i, v in pairs(gg.getValues(xx1)) do
  78.       text, x1 = "", {}
  79.       for i = 0, 127 do table.insert(x1,{address = v.address + i,flags = 1}) end
  80.       for i, v in pairs(gg.getValues(x1)) do
  81.         if v.value < 1 then break end
  82.         text = text..string.char(v.value)
  83.       end
  84.       if #text > 0 and text:find("[A-Za-z]") and xx2[i].value > -1 then
  85.         if xx2[i].value ~= 0 and xx2[i].value - last < 1 then
  86.         else
  87.           last = xx2[i].value
  88.           Field[text] = {offfser = xx2[i].value}
  89.         end
  90.       end
  91.     end
  92.   end
  93.  
  94.   if DumpMode == 3 then
  95.     return Field, Method
  96.   elseif DumpMode == 2 then
  97.     return Method
  98.   elseif DumpMode == 1 then
  99.     return Field
  100.   end
  101. end
  102.  
  103. function valueFromClass(Class, offset, refineNumber)
  104.   local x64 = gg.getTargetInfo().x64
  105.   local metadata = gg.getRangesList("global-metadata.dat")[1]
  106.   local typlist = {D = "DWORD", F = "FLOAT", E = "DOUBLE", W = "WORD", B = "BYTE", Q = "QWORD", X = "XOR"}
  107.   local c0 = string.char(0)
  108.   local PointerSize, typ = (x64 and 8 or 4), (x64 and 32 or 4)
  109.   local unsignedFixers = {[4] = 0xFFFFFFFF, [8] = -1}
  110.   local xOffset, Xn, min, max, Xnum = {}, 0, 3e38, 0
  111.   local x1, x2, Xr = {}, {}, {}
  112.   gg.setRanges(gg.REGION_ANONYMOUS|gg.REGION_OTHER|gg.REGION_C_ALLOC)
  113.   gg.clearResults()
  114.   if metadata then
  115.     gg.searchNumber(":"..c0..Class..c0,1,nil,gg.SIGN_EQUAL,metadata["start"],metadata["end"])
  116.   elseif not metadata then
  117.     gg.searchNumber(":"..c0..Class..c0,1)
  118.   end
  119.   gg.searchPointer(0,typ)
  120.   for i, v in pairs(gg.getResults(gg.getResultsCount())) do
  121.     table.insert(x1,{address = v.address + (x64 and 0x30 or 0x18),flags = typ})
  122.     table.insert(x1,{address = v.address + (x64 and 0x38 or 0x1C),flags = typ})
  123.   end
  124.   x1 = gg.getValues(x1)
  125.   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
  126.   gg.clearResults()
  127.   gg.setRanges(gg.REGION_ANONYMOUS)
  128.   for i, v in pairs(x1) do
  129.     if v.value then gg.searchNumber(v.value,typ) end
  130.     for i, v in pairs(gg.getResults(gg.getResultsCount())) do table.insert(Xr,v) end
  131.     gg.clearResults()
  132.   end
  133.   x1 = {}
  134.   for v in offset:gmatch("%S+") do
  135.     if v:find("0[Xx].-") then
  136.       Xn, min, max = Xn + 1, min > tonumber(v) and tonumber(v) or min, max < tonumber(v) and tonumber(v) or max
  137.       Xnum = max == tonumber(v) and Xn or Xnum
  138.     end
  139.     table.insert(xOffset,(v:find("0[Xx].-") and v or typlist[v:sub(1,1)]))
  140.   end
  141.   for i, v in pairs(Xr) do
  142.     for i, v2 in pairs(xOffset) do
  143.       if not v2:find("0[Xx].-") then
  144.         for v3 = i - 1, 1, -1 do
  145.           if not xOffset[v3]:find("0[Xx].-") then break end
  146.           table.insert(x1,{address = v.address + xOffset[v3], offset = xOffset[v3], flags = _G["gg"]["TYPE_"..v2]})
  147.         end
  148.       end
  149.     end
  150.   end
  151.  
  152.   for i = (Xn - Xnum) + 1, #x1, Xn do
  153.     local Xclass, Xadds, fixedPointer = {}, {}, x1[i].address - (x1[i].address%PointerSize)
  154.     for off = 0, max, PointerSize do table.insert(Xadds,{address = fixedPointer - off,flags = typ}) end
  155.     for _, v in pairs(gg.getValues(Xadds)) do table.insert(Xclass,{address = v.value + (PointerSize*2),flags = typ}) end
  156.     for _, v in pairs(gg.getValues(Xclass)) do
  157.       v.value = v.value < 0 and v.value & unsignedFixers[PointerSize] or v.value
  158.       if metadata and (v.value > metadata["start"] and v.value < metadata["end"]) then
  159.         if x1[i].address - Xadds[_].address == x1[i].offset then
  160.           for v1 = 0, Xn - 1 do table.insert(x2,x1[i + (Xn - Xnum) + v1]) end
  161.         end
  162.         break
  163.       elseif not metadata then
  164.         for v1 = 0, Xn - 1 do table.insert(x2,x1[i + (Xn - Xnum) + v1]) end
  165.       end
  166.     end
  167.   end
  168.  
  169.   gg.loadResults(x2)
  170.  
  171.   if refineNumber then
  172.     if refineNumber:find("%:") and not refineNumber:find(".-:[0-9]") then
  173.       refineNumber = refineNumber:match("(.-)%:")..refineNumber:match("%:.")..((max - min) + 1)
  174.     end
  175.     gg.refineNumber(refineNumber)
  176.   end
  177.   return gg.getResultsCount() > 0
  178. end
  179.  
  180. function refineOffset(offset,load)
  181.   local xOffset, x1 = {}, {}
  182.   local x64 = gg.getTargetInfo().x64
  183.   local PointerSize, typ = x64 and 8 or 4, x64 and 32 or 4
  184.   local unsignedFixers = {[4] = 0xFFFFFFFF,[8] = -1}
  185.   local metadata = gg.getRangesList("global-metadata.dat")[1]
  186.   for v in offset:gmatch("%S+") do table.insert(xOffset,v) end
  187.   for i, v in pairs(gg.getResults(gg.getResultsCount())) do
  188.     local classname, adds = {}, {}
  189.     for off = 0, xOffset[#xOffset], PointerSize do table.insert(adds,{address = (v.address - (v.address%PointerSize)) - off, flags = typ}) end
  190.     for _, v1 in pairs(gg.getValues(adds)) do table.insert(classname,{address = v1.value + (PointerSize*2),flags = typ}) end
  191.     for _, v1 in pairs(gg.getValues(classname)) do
  192.       v1.value = v1.value < 0 and v1.value & unsignedFixers[PointerSize] or v1.value
  193.       if v1.value > metadata["start"] and v1.value < metadata["end"] then
  194.         for __, v2 in pairs(xOffset) do
  195.           if v.address - adds[_].address == v2 then table.insert(x1,v) break end
  196.         end
  197.         break
  198.       end
  199.     end
  200.   end
  201.   return not load and x1 or gg.loadResults(x1)
  202. end
  203.  
  204. function Update()
  205.   local ClassList, DumpMethodList = {
  206.     "PlayerDataStorage",
  207.     "CheatHelper",
  208.     "FreeDriveControl",
  209.     "FuelTank",
  210.     "TimeCheatingDetector",
  211.     "DetectorsExamples",
  212.     "MultiPlayer",
  213.     "GeneralPlayerData",
  214.     "CarOutInControl",
  215.     "MultiPersonControl"
  216.   }, {}
  217.   local Alist, Mlist, Xlist, Error = {
  218.     {"PlayerDataStorage","get_IsBanned"},
  219.     {"CheatHelper","IsCheatActivated"},
  220.     {"FreeDriveControl","resetAfter"},
  221.     {"FuelTank","StopFullingFuel"},
  222.     {"TimeCheatingDetector","add_CheatChecked"},
  223.     {"TimeCheatingDetector","set_LastOnlineTimeResult"},
  224.     {"TimeCheatingDetector","get_IsCheckingForCheat"},
  225.     {"TimeCheatingDetector","set_IsCheckingForCheat"},
  226.     {"TimeCheatingDetector","ForceCheck"},
  227.     {"TimeCheatingDetector","IsReadyForForceCheck"},
  228.     {"TimeCheatingDetector","CheckForCheat"},
  229.     {"TimeCheatingDetector","remove_CheckPassed"},
  230.     {"TimeCheatingDetector","SetErrorCallback"},
  231.     {"DetectorsExamples","SpeedHackDetectorExample"},
  232.     {"DetectorsExamples","InjectionDetectorExample"},
  233.     {"DetectorsExamples","ObscuredCheatingDetectorExample"},
  234.     {"DetectorsExamples","TimeCheatingDetectorExample"},
  235.     {"DetectorsExamples","ForceTimeCheatingDetectorCheck"},
  236.     {"MultiPlayer","IsRoomBanned"},
  237.     {"MultiPlayer","toMainMenu"},
  238.     {"MultiPlayer","CheckIfIDExistsInRoom"},
  239.     {"MultiPlayer","ShouldBeRemovedFromRoom"},
  240.     {"MultiPlayer","OnRemoveFromRoom"},
  241.     {"MultiPlayer","OnReport"},
  242.     {"MultiPlayer","KickedFromCar"},
  243.     {"GeneralPlayerData","UpdateMoney"},
  244.   },{--Alist^
  245.     {"CarOutInControl","CanEnterAsDriver"},
  246.     {"CarOutInControl","CanEnterAsPassenger"},
  247.     {"MultiPersonControl","SendCarExit"},
  248.     {"GeneralPlayerData","TowCarMultiplayer"},
  249.     {"GeneralPlayerData","UnTowCarMultiplayer"},
  250.     {"MultiPlayer","PlayerExitFromCar"}
  251.   },{--Mlist^
  252.     {"6e3;999::5",6e3,gg.TYPE_FLOAT,"libil2cpp"},
  253.     {"1E7",1e7,gg.TYPE_FLOAT,"libunity"},
  254.     {"0.81399995;-2::5",0.81399995,gg.TYPE_FLOAT,"libil2cpp"},
  255.     {"-8e1;1E32::5",1e32,gg.TYPE_FLOAT,"libunity"},
  256.     {"34e-2",34e-2,gg.TYPE_FLOAT,"libil2cpp"},
  257.   },{}--Xlist^
  258.  
  259.   for _, v in pairs(ClassList) do DumpMethodList[v] = DumpClass(v,2) end
  260.  
  261.   Aoffset, Aoff = "{", "{"
  262.   for i, v in pairs(Alist) do
  263.     local x1 = DumpMethodList[v[1]]
  264.     local x2 = x1 and x1[v[2]]
  265.     if x2 then
  266.       x1 = gg.getValues({{address = x2.address,flags = 4},{address = x2.address + 0x4,flags = 4}})
  267.       Aoffset, Aoff =
  268.         Aoffset.."{address=libil2cpp["..x2.start.."].start+"..x2.offset..",flags=4},{address=libil2cpp["..x2.start.."].start+"..(x2.offset + 0x4).." ,flags=4},",
  269.         Aoff..x1[1].value..","..x1[2].value
  270.     else
  271.       print("更新失败[A]["..i.."]")
  272.     end
  273.   end
  274.   Aoffset, Aoff = Aoffset.."}", Aoff.."}"
  275.  
  276.   Moffset, Moff = "{", "{"
  277.   for i, v in pairs(Mlist) do
  278.     Moffset, Moff = Moffset.."{", Moff.."{"
  279.     local x1 = DumpMethodList[v[1]]
  280.     local x2 = x1 and x1[v[2]]
  281.     if x2 then
  282.       local x1 = gg.getValues({{address = x2.address,flags = 4},{address = x2.address + 0x4,flags = 4}})
  283.       Moffset, Moff =
  284.         Moffset.."{address=libil2cpp["..x2.start.."].start+"..x2.offset..",flags=4},{address=libil2cpp["..x2.start.."].start+"..(x2.offset + 0x4).." ,flags=4},",
  285.         Moff..x1[1].value..","..x1[2].value
  286.     else
  287.       table.insert(Error,"更新失败[M]["..i.."]")
  288.     end
  289.     Moffset, Moff = Moffset.."},", Moff.."},"
  290.   end
  291.   Moffset, Moff = Moffset.."}", Moff.."}"
  292.  
  293.   gg.setRanges(gg.REGION_CODE_APP)
  294.   Xoffset, Xoff = "{", "{"
  295.   for _, v in pairs(Xlist) do
  296.     gg.clearResults()
  297.     gg.searchNumber(v[1],v[3])
  298.     gg.refineNumber(v[2],v[3])
  299.     Xoffset, Xoff = Xoffset.."{", Xoff.."{"..v[2].."},"
  300.     if gg.getResultsCount() > 0 then
  301.       for i, v1 in pairs(gg.getResults(gg.getResultsCount())) do
  302.         local XXlib, XXoffset = GetLibStart(v1.address)
  303.         if XXlib and XXlib[1] == v[4] then
  304.           Xoffset = Xoffset.."{address="..XXlib[1].."["..XXlib[2].."].start+"..XXoffset..",flags="..v[3].."},"
  305.         end
  306.       end
  307.     else
  308.       table.insert(Error,"更新失败[X]["..i.."]")
  309.     end
  310.     Xoffset = Xoffset.."},"
  311.     gg.clearResults()
  312.   end
  313.   Xoffset, Xoff = Xoffset.."}", Xoff.."}"
  314.   if #Error > 0 and gg.alert(table.concat(Error,"\n"),"继续","复制") == 2 then
  315.     gg.copyText(table.concat(Error,"\n"))
  316.   end
  317.   Xout =
  318.     "_=(function()\n"..
  319.     "libil2cpp, libunity = gg.getRangesList('libil2cpp.so'), gg.getRangesList('libunity.so')\n"..
  320.     "Mon = {'h200080D2','hC0035FD6'}\n"..
  321.     "Aoffset, Moffset, Xoffset =\n"..
  322.     Aoffset..",\n"..
  323.     Moffset..",\n"..
  324.     Xoffset.."\n"..
  325.     "Aoff, Moff, Xoff =\n"..
  326.     Aoff..",\n"..
  327.     Moff..",\n"..
  328.     Xoff.."\nend)([[\n\n"..Xinfo.."[Hack(0.3)]\n\n]])"
  329.   gg.saveList(Qfile)
  330.   io.open(Qfile,"w"):write(string.dump(load(Xout),true))
  331.   return true  
  332. end
  333.  
  334. function SetValues(Xr,value,freeze)
  335.   local a = 0
  336.   if not value then return false end
  337.   for i, v in pairs(Xr) do
  338.     a = (a + 1)%(#value+1)
  339.     a = a < 1 and 1 or a
  340.     v.value, v.freeze = value[a], true
  341.   end
  342.   gg.addListItems(Xr)
  343.   if not freeze then gg.removeListItems(Xr) end
  344.   return true
  345. end
  346.  
  347. function sleep(t)
  348.   for i = 1, t do
  349.     if gg.isVisible() then return false end
  350.     gg.sleep(1)
  351.   end
  352.   return true
  353. end
  354.  
  355. f1 = {
  356.   function()
  357.     repeat
  358.       if not sleep(10) then break end
  359.       SetValues(Xoffset[1],{math.random(-22000,16000)},true)
  360.     until gg.isVisible()
  361.   end,
  362.   function()
  363.     repeat
  364.       if not sleep(25) then break end
  365.       gg.toast("ON")
  366.       SetValues(Xoffset[1],{math.random(-22000,16000)},true)
  367.       if not sleep(25) then break end
  368.       gg.toast("OFF")
  369.       SetValues(Xoffset[1],Xoff[1],true)
  370.     until gg.isVisible()
  371.   end,
  372.   function()
  373.     repeat
  374.       gg.toast(">")
  375.       for i = Xoff[1][1] - 25, Xoff[1][1] + 25, 5 do
  376.         if not sleep(50) then break end
  377.         SetValues(Xoffset[1],{i},true)
  378.       end
  379.       gg.toast("<")
  380.       for i = Xoff[1][1] + 25, Xoff[1][1] - 25, -5 do
  381.         if not sleep(50) then break end
  382.         SetValues(Xoffset[1],{i},true)
  383.       end
  384.     until gg.isVisible()
  385.     SetValues(Xoffset[1],Xoff[1])
  386.   end
  387. }
  388.  
  389. function f5(new)
  390.   R5 = (new > 2 or not R5) and {} or R5
  391.   if new == 2 and #R5 < 1 or new > 2 then
  392.     gg.setRanges(32)
  393.     gg.clearResults()
  394.     gg.searchNumber("-2097152000",4)
  395.     R5 = gg.getResults(gg.getResultsCount())
  396.     gg.clearResults()
  397.     for i, v in pairs(R5) do v.address, v.flags = v.address + 0xA8, 16 end
  398.     gg.loadResults(R5)
  399.     gg.refineNumber(1e32)
  400.     R5 = gg.getResults(gg.getResultsCount())
  401.     gg.clearResults()
  402.   end
  403.   SetValues(R5,({{1e32},{1}})[(new < 1 and 1 or 2)])
  404.   R5 = new < 1 and {} or R5
  405. end
  406.  
  407. function f6(new)
  408.   R6 = (new == 3 or not R6) and {} or R6
  409.   if new > 0 and #R6 < 1 or new > 1 then
  410.     valueFromClass("DynamicVehicle", "0xE0 F","-1~1")
  411.     for i, v in pairs(gg.getResults(gg.getResultsCount())) do table.insert(R6,v) end
  412.     gg.clearResults()
  413.     last6 = nil
  414.   end
  415.   gg.loadResults(R6)
  416.   if last6 then gg.refineNumber(10) end
  417.   R6 = refineOffset("0xE0")
  418.   gg.clearResults()
  419.   SetValues(R6,({{-0.30500000715},{10}})[(new < 1 and 1 or 2)])
  420.   R6, last6 = new < 1 and {} or R6, 1
  421. end
  422.  
  423. function f7(input)
  424.   R7 = R7 or {}
  425.   if input:find("[0-9]") then
  426.     if #R7 < 1 or input:find("[Xx]") then
  427.       gg.removeListItems(R7)
  428.       local x1
  429.       R7 = {}
  430.       gg.clearResults()
  431.       gg.setRanges(32)
  432.       gg.searchNumber("-2097152000",4)
  433.       x1 = gg.getResults(gg.getResultsCount())
  434.       for i, v in pairs(x1) do v.address, v.flags = v.address + 0xA8, 16 end
  435.       gg.loadResults(x1)
  436.       gg.refineNumber("1e32")
  437.       x1 = {}
  438.       for i, v in pairs(gg.getResults(gg.getResultsCount())) do
  439.         table.insert(x1,{address = v.address - 0xA8,flags = 16})
  440.         table.insert(x1,{address = x1[#x1].address + 0x68,flags = 16})
  441.         table.insert(x1,{address = x1[#x1-1].address + 0x6C,flags = 16})
  442.         table.insert(x1,{address = x1[#x1-2].address + 0x70,flags = 16})
  443.       end
  444.       gg.clearResults()
  445.       x1 = gg.getValues(x1)
  446.       for i = 4, #x1, 4 do
  447.         if x1[i].flags == 16 and (x1[i-2].value ~= 0 or x1[i-1].value ~= 0 or x1[i].value ~= 0) then
  448.           local address = x1[i-3].address
  449.           table.insert(R7,{address = address + 0x6C,flags = 16,value = 0,freeze = true})
  450.         end
  451.       end
  452.     end
  453.     for i, v in pairs(R7) do v.value, v.freeze = tonumber(input), input:find("[Ff]") and true end
  454.     gg.addListItems(R7)
  455.   else
  456.     gg.removeListItems(R7)
  457.   end
  458. end
  459.  
  460. function f8(value)
  461.   R8 = R8 or {}
  462.   if #R8 < 1 or value:find("[Xx]")then
  463.     gg.clearResults()
  464.     gg.setRanges(gg.REGION_ANONYMOUS)
  465.     gg.searchNumber(1,64)
  466.     R8 = gg.getResults(gg.getResultsCount())
  467.     for i, v in pairs(R8) do v.address, v.flags = v.address - 0xC, 16 end
  468.     gg.loadResults(R8)
  469.     gg.sleep(300)
  470.     gg.searchFuzzy("0", gg.SIGN_FUZZY_NOT_EQUAL, 16, 0, -1, 0)
  471.     R8 = gg.getResults(gg.getResultsCount())
  472.     for i, v in pairs(R8) do v.address, v.flags = v.address + 0xC, 64 end
  473.     Xn = 1
  474.   end
  475.   gg.loadResults(R8)
  476.   gg.refineNumber(Xn)
  477.   R8, Xn = gg.getResults(gg.getResultsCount()), value:gsub("[A-Za-z]","")
  478.   gg.clearResults()
  479.   SetValues(R8,{Xn})
  480. end
  481.  
  482. function f9(value)
  483.   R9 = R9 or {}
  484.   if #R10 < 1 or value:find("[Xx]") then
  485.     valueFromClass("SellCarTrigger", "0x48 0x60 0x64 D","0~40;-2147483647~2147483647;-2147483647~2147483647::")
  486.     refineOffset("0x60 0x64",true)
  487.     gg.refineNumber("-2147483647~2147483647;-2147483647~2147483647::5")
  488.     R9 = refineOffset("0x64")
  489.     gg.clearResults()
  490.   end
  491.   local x1 = {}
  492.   for i, v in pairs(R9) do
  493.     table.insert(x1,{address = v.address - 0x4, flags = v.flags})
  494.     table.insert(x1,v)
  495.   end
  496.   SetValues(x1,{0,value:gsub("[A-Za-z]","")},true)
  497. end
  498.  
  499. function f10(Input)
  500.   local c0 = string.char(0)
  501.   R10, xtext = R10 or {}, {Input:match("(.-) "),Input:match(" (.*)"):gsub("%[[xX]%]",""):gsub("%[[Bb][Oo][Oo][Mm]%]",""):gsub("[[xX]]",""):gsub("[[Bb][Oo][Oo][Mm]]","")}
  502.   if #xtext < 2 or #xtext[2] < 1 then return end
  503.   gg.setRanges(gg.REGION_ANONYMOUS)
  504.   if not Aaddress then
  505.     gg.clearResults()
  506.     gg.searchNumber("-2147483647~2147483647", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 1)
  507.     Aaddress = gg.getResults(1)[1].address
  508.     gg.clearResults()
  509.   end
  510.   if Input:find("[[%[][Xx][%]]]") or not R10[1] or #R10[1] == 0 then
  511.     local test, x1, Max
  512.     R10, Max = {}, 0
  513.     gg.searchNumber(";"..c0..xtext[1]..c0)
  514.     gg.refineNumber(";"..c0..xtext[1])
  515.     test = gg.getResults(gg.getResultsCount())
  516.     gg.refineNumber(0)
  517.     x1 = gg.getResults(gg.getResultsCount())
  518.     for i, v in pairs(x1) do v.address = v.address - 0x2 end
  519.     for i, v in pairs(test) do
  520.       if v.value == 0 and i ~= 1 then break end
  521.       if v.value > 0 then Max = Max + 1 end
  522.     end
  523.     gg.loadResults(x1)
  524.     gg.refineNumber(Max)
  525.     R10[1], R10[2] = refineOffset("0x10"), {}
  526.     for i, v in pairs(R10[1]) do
  527.       table.insert(R10[2],{address = v.address + 0x2, flags = v.flags})
  528.     end
  529.     gg.clearResults()
  530.   elseif Input:find("[[%[][Rr][]%]]") then
  531.     gg.loadResults(R10[1])
  532.     refineOffset("0x10",true)
  533.     gg.refineNumber((Boom and 32767 or Max))
  534.     SetValues(gg.getResults(#R10[1]),{1})
  535.     gg.clearResults()
  536.     return
  537.   else
  538.     gg.loadResults(R10[1])
  539.     refineOffset("0x10",true)
  540.     gg.refineNumber((Boom and 32767 or Max))
  541.     R10 = {gg.getResults(#R10[1]),{}}
  542.     for i, v in pairs(R10[1]) do
  543.       table.insert(R10[2],{address = v.address + 0x2, flags = v.flags})
  544.     end
  545.   end
  546.   local test, Xon10, Xr10, Xoffset = {}, {}, {}, ""
  547.   Max = 0
  548.   Boom = Input:find("[[%[][Bb][Oo][Oo][Mm][]%]]")
  549.   for i = 1, #xtext[2] + 1 do
  550.     table.insert(test,{address = Aaddress + (0x2 * i), flags = gg.TYPE_WORD})
  551.   end
  552.   gg.loadResults(test)
  553.   gg.getResults(#test)
  554.   gg.editAll(";"..xtext[2]..c0,gg.TYPE_WORD)
  555.   for i, v in pairs(gg.getResults(#test)) do
  556.     if v.value == 0 then Max = i - 1 break end
  557.     table.insert(Xon10,v.value)
  558.   end
  559.   for i, v in pairs(R10[2]) do
  560.     for i = 1, Max do
  561.       table.insert(Xr10,{address = v.address + (2 * i), flags = v.flags})
  562.       Xoffset = Xoffset.." "..string.format("0x%X",(0x12 + (2 * i)))
  563.     end
  564.   end
  565.   gg.loadResults(Xr10)
  566.   SetValues(R10[1],({{Max},{32767}})[(Boom and 2 or 1)])
  567.   SetValues(refineOffset(Xoffset),Xon10)
  568.   gg.clearResults()
  569.   gg.toast("名字修改:"..xtext[1].." > "..xtext[2])
  570. end
  571.  
  572. function f11(Input)
  573.   if Input:find("[1-2] [1-9]") then
  574.     local number, Svalue = tonumber(Input:match("(%S+)")), tonumber(Input:match(" (%S+)"))
  575.     local Xvalue = number == 1 and 2.5 * Svalue or (3 * Svalue) - 6
  576.     if number == 1 then
  577.       SetValues(Xoffset[6],{Xvalue})
  578.       SetValues(Xoffset[7],Xoff[7])
  579.     else
  580.       SetValues(Xoffset[6],Xoff[6])
  581.       SetValues(Xoffset[7],{Xvalue})
  582.     end
  583.   else
  584.     SetValues(Xoffset[6],Xoff[6])
  585.     SetValues(Xoffset[7],Xoff[7])
  586.   end
  587. end
  588.  
  589. function f13()
  590.   valueFromClass("UIInput","0x34 D","8~150")
  591.   SetValues(gg.getResults(gg.getResultsCount()),{2147483647})
  592.   gg.copyText(("҈"):rep(1200),true)
  593.   gg.clearResults()
  594. end
  595.  
  596. function f14()
  597.   pass = 1
  598.   repeat
  599.     repeat until pass or gg.isVisible()
  600.     pass = nil
  601.     gg.setVisible(false)
  602.     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"})
  603.       if menu then
  604.         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
  605.         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]}
  606.  
  607.         if menu[14] then break end
  608.  
  609.         if menu[13] or R14 == nil then
  610.           gg.clearList()
  611.           R14 = {x = {},y = {},z = {},X = {}, Y = {}, Z = {}}
  612.         end
  613.  
  614.         if #R14.x < 1 then
  615.           local x1, x2 = {}, {}
  616.           gg.setRanges(32)
  617.           gg.clearResults()
  618.           gg.searchNumber("-2097152000",4)
  619.           x1 = gg.getResults(gg.getResultsCount())
  620.           gg.clearResults()
  621.           for i, v in pairs(x1) do v.address, v.flags = v.address + 0xA8, 16 end
  622.           for i, v in pairs(gg.getValues(x1)) do
  623.             if v.value == 1.0000000331813535E32 or v.value == 10 then
  624.               table.insert(x2,{address = v.address - 0xA8,flags = 16})
  625.               table.insert(x2,{address = x2[#x2].address + 0x68,flags = 16})
  626.               table.insert(x2,{address = x2[#x2-1].address + 0x6C,flags = 16})
  627.               table.insert(x2,{address = x2[#x2-2].address + 0x70,flags = 16})
  628.              else
  629.               table.insert(x2,{address = 0x0,flags = 1})
  630.               table.insert(x2,{address = 0x1,flags = 1})
  631.               table.insert(x2,{address = 0x2,flags = 1})
  632.               table.insert(x2,{address = 0x3,flags = 1})
  633.             end
  634.           end
  635.           x2 = gg.getValues(x2)
  636.           for i = 4, #x2, 4 do
  637.             if x2[i].flags == 16 and (x2[i-2].value ~= 0 or x2[i-1].value ~= 0 or x2[i].value ~= 0) then
  638.               local address = x2[i-3].address
  639.               table.insert(R14.x,{address = address + 0x68,flags = 16,value = 0,freeze = true})
  640.               table.insert(R14.y,{address = address + 0x6C,flags = 16,value = 0,freeze = true})
  641.               table.insert(R14.z,{address = address + 0x70,flags = 16,value = 0,freeze = true})
  642.               table.insert(R14.X,{address = address + 0x78,flags = 16,value = 0,freeze = true})
  643.               table.insert(R14.Y,{address = address + 0x7C,flags = 16,value = 0,freeze = true})
  644.               table.insert(R14.Z,{address = address + 0x80,flags = 16,value = 0,freeze = true})
  645.             end
  646.           end
  647.         end
  648.         for i, v in pairs(R14.x) do v.value = menu[1] end
  649.         for i, v in pairs(R14.y) do v.value = menu[2] end
  650.         for i, v in pairs(R14.z) do v.value = menu[3] end
  651.         for i, v in pairs(R14.X) do v.value = menu[4] end
  652.         for i, v in pairs(R14.Y) do v.value = menu[5] end
  653.         for i, v in pairs(R14.Z) do v.value = menu[6] end
  654.         gg.setValues(R14.x)
  655.         gg.setValues(R14.y)
  656.         gg.setValues(R14.z)
  657.         gg.setValues(R14.X)
  658.         gg.setValues(R14.Y)
  659.         gg.setValues(R14.Z)
  660.         if menu[7] then gg.addListItems(R14["x"]) else gg.removeListItems(R14["x"]) end
  661.         if menu[8] then gg.addListItems(R14["y"]) else gg.removeListItems(R14["y"]) end
  662.         if menu[9] then gg.addListItems(R14["z"]) else gg.removeListItems(R14["z"]) end
  663.         if menu[10] then gg.addListItems(R14["X"]) else gg.removeListItems(R14["X"]) end
  664.         if menu[11] then gg.addListItems(R14["Y"]) else gg.removeListItems(R14["Y"]) end
  665.         if menu[12] then gg.addListItems(R14["Z"]) else gg.removeListItems(R14["Z"]) end
  666.       end
  667.   until nil
  668.   pass = 1
  669. end
  670.  
  671. function AntiBan(x)
  672.   SetValues(Aoffset,(x == 1 and Mon or Aoff))
  673. end
  674.  
  675. function Data()
  676.   local x64 = gg.getTargetInfo().x64
  677.   local Xversion = gg.getTargetInfo().versionName
  678.   Qfile, Cfile = "/sdcard/Q/file/t.V _ V.t", "/sdcard/C/file/t.V _ V.t"
  679.   if #gg.getRangesList("libil2cpp.so") < 1 then
  680.     repeat os.exit() until nil
  681.   elseif io.open(Cfile,"r") then
  682.     local Check, Cfile = {
  683.       {"CheckQfile","检测数据失败",true},
  684.       {"LoadQfile","数据加载失败",true},
  685.       {"StartAntiBan","防封加载失败",true},
  686.     }, io.open(Cfile,"r"):read("*all")
  687.     for i, v in pairs(Check) do
  688.       if Cfile:find(v[1]) then
  689.         gg.alert("⚠️发现脚本无法启动⚠️"..v[2],"继续")
  690.         if v[3] then
  691.           os.remove(Cfile)
  692.           os.remove(Qfile)
  693.         end
  694.         break
  695.       end
  696.     end
  697.   end
  698.   gg.saveList(Cfile)
  699.   io.open(Cfile,"w"):write("CheckQfile")
  700.   local file = loadfile(Qfile) and io.open(Qfile,"r"):read("*all") or ""
  701.   Code = file:match("CPM%[.-%]%[x.-%](%[.-%])") or "NaN"
  702.   Qinfo = file:match("CPM%[.-%]%[x.-%]") or "CPM[NaN][NaN]"
  703.   Xinfo = "CPM["..Xversion.."][x"..(x64 and 64 or 32).."]"
  704.   io.open(Cfile,"w"):write("LoadQfile")
  705.   if loadfile(Qfile) then loadfile(Qfile)() end
  706.   gg.setVisible(false)
  707.   if Qinfo ~= Xinfo or not Aoffset or Code ~= "[Hack(0.3)]"then
  708.     Qinfo = "请更新脚本\n"..Qinfo.." > "..Xinfo
  709.   else
  710.     io.open(Cfile,"w"):write("StartAntiBan")
  711.     SetValues(Aoffset,Mon)
  712.   end
  713.   gg.toast(Qinfo)
  714.   os.remove(Cfile)
  715. end
  716.  
  717. function Start()
  718.   pass = 1
  719.   repeat
  720.     repeat until pass or gg.isVisible()
  721.     pass = nil
  722.     gg.setVisible(false)
  723.     UserInput = gg.prompt({
  724.       "隐形 | 闪现 | 扫地[0;3]",--x
  725.       "(强制上车)1主 | 2副 | 3主+霸占 | 4副+霸占 | 5主副 | 6主副+霸占[0;6]",--x
  726.       "(拖车)半无限拖车 | 锁定被拖车辆[0;2]",--x
  727.       "旋转 | 摇摆[0;2]",--x
  728.       "(穿墙)房外启动 | 房内启动 | 重新搜寻[0;3]",--x
  729.       "不倒翁 | 继续搜寻 | 重新搜寻[0;3]",--x
  730.       "重力(上下) + (全车虚空 | 防挂) x重搜 f冻结 清空关闭功能",--x
  731.       "人物加速 x重搜",--x
  732.       "免费买车 x重搜",--x
  733.       "原名 新名 [x]重搜 [boom]聊天室字体异常 [r]修复连接伺服器异常",--x
  734.       "(漂浮) 房外启动-仅限车",--x
  735.       "踢人下车",--x
  736.       "聊天室炸弹",--x
  737.       "重力",--x
  738.       "更新脚本",--x
  739.       "退出"--x
  740.     },last,{
  741.       "number",
  742.       "number",
  743.       "number",
  744.       "number",
  745.       "number",
  746.       "number",
  747.       "text",
  748.       "text",
  749.       "text",
  750.       "text",
  751.       "text",
  752.       "checkbox",
  753.       "checkbox",
  754.       "checkbox",
  755.       "checkbox",
  756.       "checkbox"
  757.     })
  758.     if UserInput then
  759.       last = {}
  760.       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
  761.       if UserInput[16] then Xc = exit break end
  762.       if UserInput[15] or Qinfo ~= Xinfo then
  763.         if gg.alert("是否要更新","是","否") == 1 then
  764.           if Qinfo == Xinfo then SetValues(Aoffset,Aoff) end
  765.           Xc = update
  766.           break
  767.         end
  768.       end
  769.       if Qinfo == Xinfo then
  770.         SetValues(Xoffset[1],({[0]=Xoff[1],{-6000},{-6000},Xoff[1]})[tonumber(UserInput[1])])--1
  771.         SetValues(Moffset[1],({[0]=Moff[1],Mon,Moff[1],Mon,Moff[1],Mon,Mon})[tonumber(UserInput[2])])--2
  772.         SetValues(Moffset[2],({[0]=Moff[2],Moff[2],Mon,Moff[2],Mon,Mon,Mon})[tonumber(UserInput[2])])--2
  773.         SetValues(Moffset[3],({[0]=Moff[3],Moff[3],Moff[3],Mon,Mon,Mon,Mon})[tonumber(UserInput[2])])--2
  774.         SetValues(Moffset[4],({[0]=Moff[4],Mon,Moff[4]})[tonumber(UserInput[3])])--3
  775.         SetValues(Moffset[5],({[0]=Moff[5],Moff[5],Mon})[tonumber(UserInput[3])])--3
  776.         SetValues(Xoffset[2],({[0]=Xoff[2],{-20},{-1}})[tonumber(UserInput[4])])--4
  777.         SetValues(Xoffset[4],({[0]=Xoff[4],{1},Xoff[4]})[tonumber(UserInput[5])])--5
  778.         SetValues(Xoffset[3],({[0]=Xoff[3],{-0.1}})[(#UserInput[7] ~= 0 and 1 or 0)])--7
  779.         SetValues(Moffset[6],({[0]=Moff[6],Mon})[(UserInput[12] and 1 or 0)])--12
  780.       end
  781.       f5(tonumber(UserInput[5]))--5
  782.       f6(tonumber(UserInput[6]))--6
  783.       f7(UserInput[7])--7
  784.       if UserInput[8]:find("[0-9]") then f8(UserInput[8]) end--8
  785.       if UserInput[9]:find("[0-9]") then f9(UserInput[9]) end--9
  786.       if UserInput[10]:find(".- .-") then f10(UserInput[10]) end--10
  787.       f11(UserInput[11])
  788.       if UserInput[13] then f13() end--13
  789.       if UserInput[15] then f15() end--13
  790.     end
  791.     if Qinfo == Xinfo and last then
  792.       if tonumber(last[1]) > 0 then f1[tonumber(last[1])]() end--1
  793.     end
  794.   until nil
  795. end
  796.  
  797. function Oalert(string)
  798.   Xc = gg.alert(string,"重启","退出") == 2 and exit or restart
  799. end
  800.  
  801. update, restart, exit = 1, 2, 3
  802. repeat
  803.   Xc = nil
  804.   if not pcall(load(Data)) then Oalert("获取数据错误") end
  805.   if not Xc and not pcall(load(Start)) then Oalert("运行失败") end
  806.   if Xc == update and not pcall(load(Update)) then Oalert("更新失败") end
  807. until Xc == exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement