TekMonts

Untitled

Nov 8th, 2020 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.87 KB | None | 0 0
  1. local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false
  2. function name(n)
  3.     if lib ~= n then
  4.         lib = n
  5.         local ranges = gg.getRangesList(lib)
  6.         if #ranges == 0 then
  7.             print("⚠ERROR: " .. lib .. " are not found!⚠")
  8.             gg.toast("⚠ERROR: " .. lib .. " are not found!⚠")
  9.             os.exit()
  10.         else
  11.             memFrom = ranges[1].start
  12.             memTo = ranges[#ranges]["end"]
  13.         end
  14.     end
  15. end
  16. function hex2tbl(hex)
  17.     local ret = {}
  18.     hex:gsub(
  19.         "%S%S",
  20.         function(ch)
  21.             ret[#ret + 1] = ch
  22.             return ""
  23.         end
  24.     )
  25.     return ret
  26. end
  27. function original(orig)
  28.     local tbl = hex2tbl(orig)
  29.     local len = #tbl
  30.     if len == 0 then
  31.         return
  32.     end
  33.     local used = len
  34.     if len > lim then
  35.         used = lim
  36.     end
  37.     local s = ""
  38.     for i = 1, used do
  39.         if i ~= 1 then
  40.             s = s .. ";"
  41.         end
  42.         local v = tbl[i]
  43.         if v == "??" or v == "**" then
  44.             v = "0~~0"
  45.         end
  46.         s = s .. v .. "r"
  47.     end
  48.     s = s .. "::" .. used
  49.    
  50.     gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo)
  51.     if len > used then
  52.         for i = used + 1, len do
  53.             local v = tbl[i]
  54.             if v == "??" or v == "**" then
  55.                 v = 256
  56.             else
  57.                 v = ("0x" .. v) + 0
  58.                 if v > 127 then
  59.                     v = v - 256
  60.                 end
  61.             end
  62.             tbl[i] = v
  63.         end
  64.     end
  65.     local found = gg.getResultCount()
  66.  
  67.     results = {}
  68.     local count = 0
  69.     local checked = 0
  70.     while true do
  71.         if checked >= found then
  72.             break
  73.         end
  74.         local all = gg.getResults(8)
  75.         local total = #all
  76.         local start = checked
  77.         if checked + used > total then
  78.             break
  79.         end
  80.         for i, v in ipairs(all) do
  81.             v.address = v.address + myoffset
  82.         end
  83.         gg.loadResults(all)
  84.         while start < total do
  85.             local good = true
  86.             local offset = all[1 + start].address - 1
  87.             if used < len then
  88.                 local get = {}
  89.                 for i = lim + 1, len do
  90.                     get[i - lim] = {address = offset + i, flags = gg.TYPE_BYTE, value = 0}
  91.                 end
  92.                 get = gg.getValues(get)
  93.                 for i = lim + 1, len do
  94.                     local ch = tbl[i]
  95.                     if ch ~= 256 and get[i - lim].value ~= ch then
  96.                         good = false
  97.                         break
  98.                     end
  99.                 end
  100.             end
  101.             if good then
  102.                 count = count + 1
  103.                 results[count] = offset
  104.                 checked = checked + used
  105.             else
  106.                 local del = {}
  107.                 for i = 1, used do
  108.                     del[i] = all[i + start]
  109.                 end
  110.                 gg.removeResults(del)
  111.             end
  112.             start = start + used
  113.         end
  114.     end
  115. end
  116. function replaced(repl)
  117.     num = num + 1
  118.     local tbl = hex2tbl(repl)
  119.     if src ~= nil then
  120.         local source = hex2tbl(src)
  121.         for i, v in ipairs(tbl) do
  122.             if v ~= "??" and v ~= "**" and v == source[i] then
  123.                 tbl[i] = "**"
  124.             end
  125.         end
  126.         src = nil
  127.     end
  128.     local cnt = #tbl
  129.     local set = {}
  130.     local s = 0
  131.     for _, addr in ipairs(results) do
  132.         for i, v in ipairs(tbl) do
  133.             if v ~= "??" and v ~= "**" then
  134.                 s = s + 1
  135.                 set[s] = {["address"] = addr + i, ["value"] = v .. "r", ["flags"] = gg.TYPE_BYTE}
  136.             end
  137.         end
  138.     end
  139.     if s ~= 0 then
  140.         gg.setValues(set)
  141.     end
  142.     ok = true
  143. end
  144.  
  145.  
  146. function SearchWrite(Search, Write, Type)
  147.     gg.clearResults()
  148.     gg.setVisible(false)
  149.     gg.searchNumber(Search[1][1], Type)
  150.     local count = gg.getResultsCount()
  151.     local result = gg.getResults(count)
  152.     gg.clearResults()
  153.     local data = {}
  154.     local base = Search[1][2]
  155.  
  156.     if (count > 0) then
  157.         for i, v in ipairs(result) do
  158.             v.isUseful = true
  159.         end
  160.  
  161.         for k = 2, #Search do
  162.             local tmp = {}
  163.             local offset = Search[k][2] - base
  164.             local num = Search[k][1]
  165.  
  166.             for i, v in ipairs(result) do
  167.                 tmp[#tmp + 1] = {}
  168.                 tmp[#tmp].address = v.address + offset
  169.                 tmp[#tmp].flags = v.flags
  170.             end
  171.  
  172.             tmp = gg.getValues(tmp)
  173.  
  174.             for i, v in ipairs(tmp) do
  175.                 if (tostring(v.value) ~= tostring(num)) then
  176.                     result[i].isUseful = false
  177.                 end
  178.             end
  179.         end
  180.  
  181.         for i, v in ipairs(result) do
  182.             if (v.isUseful) then
  183.                 data[#data + 1] = v.address
  184.             end
  185.         end
  186.  
  187.         if (#data > 0) then
  188.             gg.toast("Found " .. #data .. " results")
  189.             local t = {}
  190.             local base = Search[1][2]
  191.             for i = 1, #data do
  192.                 for k, w in ipairs(Write) do
  193.                     offset = w[2] - base
  194.                     t[#t + 1] = {}
  195.                     t[#t].address = data[i] + offset
  196.                     t[#t].flags = Type
  197.                     t[#t].value = w[1]
  198.  
  199.                     if (w[3] == true) then
  200.                         local item = {}
  201.                         item[#item + 1] = t[#t]
  202.                         item[#item].freeze = true
  203.                         gg.addListItems(item)
  204.                     end
  205.                 end
  206.             end
  207.             gg.setValues(t)
  208.         else
  209.             gg.toast("Not found")
  210.             return false
  211.         end
  212.     else
  213.         gg.toast("Not Found")
  214.         return false
  215.     end
  216. end
  217.  
  218. function split(szFullString, szSeparator)
  219.     local nFindStartIndex = 1
  220.     local nSplitIndex = 1
  221.     local nSplitArray = {}
  222.     while true do
  223.         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)
  224.         if not nFindLastIndex then
  225.             nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))
  226.             break
  227.         end
  228.         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)
  229.         nFindStartIndex = nFindLastIndex + string.len(szSeparator)
  230.         nSplitIndex = nSplitIndex + 1
  231.     end
  232.     return nSplitArray
  233. end
  234.  
  235. function xgxc(szpy, qmxg)
  236.     for x = 1, #(qmxg) do
  237.         xgpy = szpy + qmxg[x]["offset"]
  238.         xglx = qmxg[x]["type"]
  239.         xgsz = qmxg[x]["value"]
  240.         gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}})
  241.         xgsl = xgsl + 1
  242.     end
  243. end
  244.  
  245. function xqmnb(qmnb)
  246.     gg.clearResults()
  247.     gg.setRanges(qmnb[1]["memory"])
  248.     gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"])
  249.     if gg.getResultsCount() == 0 then
  250.         gg.toast(qmnb[2]["name"] .. " not found")
  251.     else
  252.         gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"])
  253.         gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"])
  254.         gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"])
  255.         if gg.getResultsCount() == 0 then
  256.             gg.toast(qmnb[2]["name"] .. " not found")
  257.         else
  258.             sl = gg.getResults(999999)
  259.             sz = gg.getResultsCount()
  260.             xgsl = 0
  261.             if sz > 999999 then
  262.                 sz = 999999
  263.             end
  264.             for i = 1, sz do
  265.                 pdsz = true
  266.                 for v = 4, #(qmnb) do
  267.                     if pdsz == true then
  268.                         pysz = {}
  269.                         pysz[1] = {}
  270.                         pysz[1].address = sl[i].address + qmnb[v]["offset"]
  271.                         pysz[1].flags = qmnb[v]["type"]
  272.                         szpy = gg.getValues(pysz)
  273.                         pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value
  274.                         szpd = split(pdpd, ";")
  275.                         tzszpd = szpd[1]
  276.                         pyszpd = szpd[2]
  277.                         if tzszpd == pyszpd then
  278.                             pdjg = true
  279.                             pdsz = true
  280.                         else
  281.                             pdjg = false
  282.                             pdsz = false
  283.                         end
  284.                     end
  285.                 end
  286.                 if pdjg == true then
  287.                     szpy = sl[i].address
  288.                     xgxc(szpy, qmxg)
  289.                     xgjg = true
  290.                 end
  291.             end
  292.             if xgjg == true then
  293.                 gg.toast(qmnb[2]["name"] .. " success, replaced " .. xgsl .. " data")
  294.             else
  295.                 gg.toast(qmnb[2]["name"] .. " not found")
  296.             end
  297.         end
  298.     end
  299. end
  300.  
  301. gg.setVisible(true)
  302.  
  303.  
  304. function HOME()
  305.     A =
  306.         gg.multiChoice(
  307.         {
  308.             "Enable GM",
  309.             "Speed x5",
  310.             "No Skill CD",
  311.             "Exit"
  312.         },
  313.         nil,
  314.         "Cheat by TekMonts"
  315.     )
  316.     if A == nil then
  317.     else
  318.         if A[1] == true then
  319.             gmtenable()
  320.         end
  321.         if A[2] == true then
  322.             speedx5()
  323.         end
  324.         if A[3] == true then
  325.             nocd()
  326.         end
  327.         if A[4] == true then
  328.             Exit()
  329.         end
  330.     end
  331.  
  332.     HOMEDM = -1
  333. end
  334.  
  335. function gmtenable()
  336.     gg.clearResults()
  337.     gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
  338.     name('libil2cpp.so')
  339.     myoffset = 0xB58284
  340.     original('7F 45 4C 46 02 01 01 00')
  341.     replaced('01 00 A0 E3 1E FF 2F E1')
  342.     gg.toast("GM Menu Visible")
  343.     gg.clearResults()
  344.    
  345.     gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
  346.     name('libil2cpp.so')
  347.     myoffset = 0xB56E8C
  348.     original('7F 45 4C 46 02 01 01 00')
  349.     replaced('01 00 A0 E3 1E FF 2F E1')
  350.     gg.toast("Visual Visible")
  351. end
  352.  
  353. function speedx5()
  354.     gg.clearResults()
  355.     gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
  356.     name('libil2cpp.so')
  357.     myoffset = 0xDBC91C
  358.     original('7F 45 4C 46 02 01 01 00')
  359.     replaced('05 00 A0 E3 1E FF 2F E1')
  360.     gg.toast("Speed x5 enable")
  361.     gg.clearResults()
  362.    
  363.     gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
  364.     name('libil2cpp.so')
  365.     myoffset = 0xDBCA38
  366.     original('7F 45 4C 46 02 01 01 00')
  367.     replaced('10 00 A0 E3 1E FF 2F E1')
  368.     gg.toast("Horse speed x10 enable")
  369. end
  370.  
  371. function nocd()
  372.     gg.clearResults()
  373.     gg.setRanges ( gg .REGION_CODE_APP | gg .REGION_C_DATA)
  374.     name('libil2cpp.so')
  375.     myoffset = 0xB47124
  376.     original('7F 45 4C 46 02 01 01 00')
  377.     replaced('00 00 A0 E3 1E FF 2F E1')
  378.     gg.toast("No skill cd enable")
  379.     gg.clearResults()
  380. end
  381.  
  382. function Exit()
  383.     os.exit()
  384. end
  385.  
  386. while true do
  387.     if gg.isVisible(true) then
  388.         HOMEDM = 1
  389.         gg.setVisible(false)
  390.     end
  391.     --Iғ
  392.     if HOMEDM == 1 then
  393.         HOME()
  394.     end
  395.     --Iғ
  396. end
Add Comment
Please, Sign In to add comment