Date = "20210920" date = os.date("%Y%m%d") if date >= Date then print("EXPIRED DM ME:@imenzoyt") print("good luck") os.exit() end gg.alert("@Harpoonchit @𝙞𝙢𝙚𝙣𝙯𝙤𝙮𝙩") gg.toast("SCRIPT BY @𝙞𝙢𝙚𝙣𝙯𝙤𝙮𝙩 " ) imenzoyt = 1 function main() menu = gg.choice({ "♡︎𝚋𝚢𝚙𝚊𝚜𝚜 𝚖𝚎𝚗𝚞♡︎", "꧁𝚎𝚜𝚙 𝚖𝚎𝚗𝚞꧂", "⚠︎𝚠𝚎𝚙𝚎𝚘𝚗 𝚖𝚎𝚗𝚞⚠︎", "༄𝚜𝚙𝚎𝚎𝚍 𝚖𝚎𝚗𝚞༄", " ╔❖•ೋ°ೋ•❖╗\n 🚫ᴇxɪᴛ🚫\n ╚❖•ೋ°ೋ•❖╝" }, nil,os.date(" ╔═━═━═━═━═━═⊱✯⊰═━═━═━═━═━═╗\n ☢️𝚟𝚒𝚙 𝚜𝚌𝚛𝚒𝚙𝚝 𝚋𝚢 @𝚒𝚖𝚎𝚗𝚣𝚘𝚢𝚝☢️\n📅𝐃𝐀𝐓𝐄 : %m/%d/%Y ⏲️𝐓𝐈𝐌𝐄 : %I:%M %p \n━─━───────⪩💀⪨───────━─━ \n 𝚠𝚕𝚌 𝚝𝚘 𝚖𝚢 𝚜𝚌𝚛𝚒𝚙𝚝 \n || @imenzoyt")) if menu == 1 then bypasses() end if menu == 2 then plays() end if menu == 3 then pogi() end if menu == 4 then eut() end if menu == 5 then EXIT() end if menu == 6 then PH() end if menu == nil then r() end imenzoyt = -1 end function bypasses() AM = gg.multiChoice({ "✌︎𝚋𝚢𝚙𝚊𝚜𝚜✌︎", },nil,os.date("▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬\n ʙʏᴘᴀss ᴍᴇɴᴜ \nDATE : %A, %x \nTIME : %I:%M %p\n▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬ ")) if AM == nil then main()else if AM[1] == true then bypass()end end end function bypass() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("262403", gg.TYPE_DWORD) gg.refineNumber("262403", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("852480", gg.TYPE_DWORD) gg.refineNumber("852480", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("196867", gg.TYPE_DWORD) gg.refineNumber("196867", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("134915", gg.TYPE_DWORD) gg.refineNumber("134915", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("134402", gg.TYPE_DWORD) gg.refineNumber("134402", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("144387", gg.TYPE_DWORD) gg.refineNumber("144387", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("133378", gg.TYPE_DWORD) gg.refineNumber("133378", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("134402", gg.TYPE_DWORD) gg.refineNumber("134402", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("133378", gg.TYPE_DWORD) gg.refineNumber("133378", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("131330", gg.TYPE_DWORD) gg.refineNumber("131330", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("134914", gg.TYPE_DWORD) gg.refineNumber("134914", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("112896", gg.TYPE_DWORD) gg.refineNumber("112896", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("174861", gg.TYPE_DWORD) gg.refineNumber("174861", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("131589", gg.TYPE_DWORD) gg.refineNumber("131589", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("132361", gg.TYPE_DWORD) gg.refineNumber("132361", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("132617", gg.TYPE_DWORD) gg.refineNumber("132617", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("132619", gg.TYPE_DWORD) gg.refineNumber("132619", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("132875", gg.TYPE_DWORD) gg.refineNumber("132875", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("133132", gg.TYPE_DWORD) gg.refineNumber("133132", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("133133", gg.TYPE_DWORD) gg.refineNumber("133133", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("199184", gg.TYPE_DWORD) gg.refineNumber("199184", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("85,517", gg.TYPE_DWORD) gg.refineNumber("85,517", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("85,517", gg.TYPE_DWORD) gg.refineNumber("85,517", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("85,517", gg.TYPE_DWORD) gg.refineNumber("85,517", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("85,517", gg.TYPE_DWORD) gg.refineNumber("85,517", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("198925", gg.TYPE_DWORD) gg.refineNumber("198925", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("198927", gg.TYPE_DWORD) gg.refineNumber("198927", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("198926", gg.TYPE_DWORD) gg.refineNumber("198926", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("199183", gg.TYPE_DWORD) gg.refineNumber("199183", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("85,517", gg.TYPE_DWORD) gg.refineNumber("85,517", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("112,896", gg.TYPE_DWORD) gg.refineNumber("112,896", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("174,861", gg.TYPE_DWORD) gg.refineNumber("174,861", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("131,589", gg.TYPE_DWORD) gg.refineNumber("131,589", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("132,361", gg.TYPE_DWORD) gg.refineNumber("132,361", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("132,617", gg.TYPE_DWORD) gg.refineNumber("132,617", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("132,619", gg.TYPE_DWORD) gg.refineNumber("132,619", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("65000~70000;67109633;67109633;67109377", gg.TYPE_DWORD) gg.refineNumber("65000~70000;67109633;67109633;67109377", gg.TYPE_DWORD) gg.getResults(50000) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.clearResults() gg.setRanges(gg.REGION_C_ALLOC) gg.searchNumber("5.09606575e20F;70,658;70,658;70,658;70,658", gg.TYPE_DWORD) gg.refineNumber("5.09606575e20F;70,658;70,658;70,658;70,658", gg.TYPE_DWORD) gg.getResults(50500) gg.editAll("720914", gg.TYPE_DWORD) gg.clearResults() gg.setVisible(false) gg.alert"bypassed" end function plays() CM = gg.multiChoice({ "𝚠𝚊𝚕𝚕𝚑𝚊𝚌𝚔", "𝚋𝚒𝚐 𝚋𝚘𝚍𝚢♲︎︎︎", "𓇽𝚑𝚙 𝚋𝚊𝚛 𝚗𝚊𝚖𝚎𓇽", "𓂀𝚍𝚊𝚛𝚔 𝚖𝚘𝚍", "𝚊𝚗𝚝𝚎𝚗𝚊𖠌", "☔︎sᴋʏ ᴘᴀʀᴛʏ☔︎<<<\n ❲ɪɴɢᴀᴍᴇ❳", "𝚛𝚊𝚍𝚊𝚛 𝚖𝚙☁︎", "𝚏𝚙𝚜 120༆", "𝚠𝚑𝚒𝚝𝚎 𝚋𝚘𝚍𝚢𒊹︎︎︎", "𝚏𝚘𝚟☕︎", },nil,os.date("▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬\n ᴄʜᴀʀᴀᴄᴛᴇʀ ᴍᴇɴᴜ \nDATE : %A, %x \nTIME : %I:%M %p\n▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬ ")) if CM == nil then main()else if CM[1] == true then oten()end if CM[2] == true then cheatB1()end if CM[3] == true then cheatB2()end if CM[4] == true then cheatB3()end if CM[5] == true then cheatB4()end if CM[6] == true then cheatB5()end if CM[7] == true then cheatB6()end if CM[8] == true then cheatB7()end if CM[9] == true then cheatB8()end if CM[10] == true then cheatB9()end end end function oten() 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(Name.." modify"..#data.."Article data") local t = {} local base = Search[1][2] for **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(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 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"] .. "Failed to open") 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) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "Smile reminder: open successfully, modify a total" .. xgsl .. "Article ") else gg.toast(qmnb[2]["name"] .. "Smile reminder: failed to open") end end end end function PS() end function setvalue(address,flags,value) PS('Modify address value (address, value type, value to be modified)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function SearchWrite(Search, Write, Type, Name) 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("Found"..#data.."Code Data") local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Name.."Successfully opened! already"..#t.."Code Data") gg.addListItems(t) else gg.toast(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function Fxs(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 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(Mingcg.."????"..#data.."") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for **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) gg.toast(Mingcg.."????"..#t.."") gg.addListItems(t) else gg.toast(Mingcg.."????", false) return false end else gg.toast("????") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find (szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len (szFullString)) break end nSplitArray[nSplitIndex] = string.sub (szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len (szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "Failed to open") 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"] .. "Failed to open") 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"] .. "Successfully opened, modified in total" .. xgsl .. "Article data") else gg.toast(qmnb[2]["name"] .. "No data found, failed to open") end end end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("Successfully opened, modified in total"..#t.."Article data") gg.addListItems(t) else gg.toast("No data found, failed to open", false) return false end else gg.toast("Not Found") return false end end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print(' : ' .. lib .. ' ') gg.alert(' : ' .. lib .. '\n ') gg.toast(' : ' .. lib .. '\n ') os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]['end'] end end end function hex2tbl(hex) local ret = {} hex:gsub('%S%S', function(ch) ret[#ret + 1] = ch return '' end) return ret end function original(orig) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = '' for i = 1, used do if i ~= 1 then s = s .. ';' end local v = tbl[i] if v == '??' or v == '**' then v = '0~~0' end s = s .. v .. 'r' end s = s .. '::' .. used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == '??' or v == '**' then v = 256 else v = ('0x' .. v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount() results = {} local count = 0 local checked = 0 while not (found <= checked) do local all = gg.getResults(8) local total = #all local start = checked if total < checked + used then break end for i, v in ipairs(all) do v.address = v.address + myoffset end gg.loadResults(all) while total > start do local good = true local offset = all[1 + start].address - 1 if len > used then local get = {} for i = lim + 1, len do get[i - lim] = { address = offset + i, flags = gg.TYPE_BYTE, value = 0 } end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' and v == source[i] then tbl[i] = '**' end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' then s = s + 1 set[s] = { address = addr + i, value = v .. 'r', flags = gg.TYPE_BYTE } end end end if s ~= 0 then gg.setValues(set) end ok = true 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 read_file(path) local file = io.open(path, "rb") if not file then return nil end local content = file:read("*a") file:close() return content end local HexPatches = {} function HexPatches.MemoryPatch(Lib,Offset,Edit,Type) local Ranges = gg.getRangesList(Lib) local v = {} v[1] = {} v[1].address = Ranges[1].start + Offset v[1].flags = Type v[1].value = Edit.."r" v[1].freeze = true gg.setValues(v) end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print("⚠️Error : "..lib.." not found⚠️") gg.toast("⚠️Error : "..lib.." not found⚠️") os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]["end"] end end end function hex2tbl(hex) local ret = {} hex:gsub("%S%S", function (ch) ret[#ret + 1] = ch return "" end) return ret end function original(orig,longoff) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = "" for i = 1, used do if i ~= 1 then s = s..";" end local v = tbl[i] if v == "??" or v == "**" then v = "0~~0" end s = s..v.."r" end s = s.."::"..used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == "??" or v == "**" then v = 256 else v = ("0x"..v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount(); results = {} local count = 0 local checked = 0 while true do if checked >= found then break end local all = gg.getResults(8) local total = #all local start = checked if checked + used > total then break end for i, v in ipairs(all) do v.address = v.address + longoff end gg.loadResults(all) while start < total do local good = true local offset = all[1 + start].address - 1 if used < len then local get = {} for i = lim + 1, len do get[i - lim] = {address = offset + i, flags = gg.TYPE_BYTE, value = 0} end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" and v == source[i] then tbl[i] = "**" end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" then s = s + 1 set[s] = { ["address"] = addr + i, ["value"] = v.."r", ["flags"] = gg.TYPE_BYTE, } end end end if s ~= 0 then gg.setValues(set) end ok = true end so=gg.getRangesList('libil2cpp.so')[1].start py=0x1E971F8 setvalue(so+py,4,-484380672) gg.clearResults() gg.toast("𝚠𝚊𝚕𝚕𝚑𝚊𝚌𝚔") end function cheatB1() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1067534200D~3000000000D;-0;0.1~0.99;1;1;1::37", gg.TYPE_FLOAT) gg.refineNumber("1", gg.TYPE_FLOAT) gg.getResults(99999, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("2.5", gg.TYPE_FLOAT) gg.clearResults() gg.toast(" 𝚋𝚒𝚐 𝚋𝚘𝚍𝚢✔︎⚠︎𝚋𝚞𝚐⚠︎") end function cheatB2() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-509579264;-509607931;-476049408;-335982036:13", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-509579264", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) revert = gg.getResults(5000, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("-476024831", gg.TYPE_DWORD) gg.processResume() gg.clearResults() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-481296383;436207801;-442563480;-442941324:13", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-481296383", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) revert = gg.getResults(5000, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("-481296384", gg.TYPE_DWORD) gg.processResume() gg.clearResults() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-481296383;436207816;-442563144;-527499264:13", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-481296383", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) revert = gg.getResults(5000, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("-481296384", gg.TYPE_DWORD) gg.processResume() gg.clearResults() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-481296383;436207690;-442563708;-527499264:13", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-481296383", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) revert = gg.getResults(5000, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("-481296384", gg.TYPE_DWORD) gg.clearResults() gg.toast("𝚑𝚙 𝚋𝚊𝚛 𝚗𝚊𝚖𝚎✔︎") end function cheatB3() gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("2.31393277e-38F;9.99999997e-7F;-1.54490522e26F:17", gg.TYPE_FLOAT) gg.refineNumber("9.99999997e-7", gg.TYPE_FLOAT) gg.getResults(1) gg.editAll("5", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("9.00724006e15F;0.00100000005F;-3.69799643e20F:17", gg.TYPE_FLOAT) gg.refineNumber("0.00100000005", gg.TYPE_FLOAT) gg.getResults(1) gg.editAll("5", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚍𝚊𝚛𝚔𝚖𝚘𝚍") end function cheatB4() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1.5~1.6;0.2~0.22::5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(6000) gg.editAll("100", 16) gg.clearResults() gg.toast("𝚊𝚗𝚝𝚎𝚗𝚊ᴥ︎︎︎") end function cheatB5() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("2.25;2.25002574921;1.46940157e-39", gg.TYPE_FLOAT) gg.refineNumber("2.25", gg.TYPE_FLOAT) gg.getResults(10) gg.editAll("50", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝕤𝕜𝕪 𝕡𝕒𝕣𝕥𝕪 ⚠︎𝚏𝚛𝚎𝚎𝚣⚠︎") end function cheatB6() 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(Name.." modify"..#data.."Article data") local t = {} local base = Search[1][2] for **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(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 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"] .. "Failed to open") 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) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "Smile reminder: open successfully, modify a total" .. xgsl .. "Article") else gg.toast(qmnb[2]["name"] .. "Smile reminder: failed to open") end end end end function PS() end function setvalue(address,flags,value) PS('Modify address value (address, value type, value to be modified)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function SearchWrite(Search, Write, Type, Name) 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("Found"..#data.."Code Data") local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Name.."Successfully opened! already"..#t.."Code Data") gg.addListItems(t) else gg.toast(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function Fxs(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 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(Mingcg.."????"..#data.."") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for **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) gg.toast(Mingcg.."????"..#t.."") gg.addListItems(t) else gg.toast(Mingcg.."????", false) return false end else gg.toast("????") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find (szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len (szFullString)) break end nSplitArray[nSplitIndex] = string.sub (szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len (szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "Failed to open") 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"] .. "Failed to open") 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"] .. "Successfully opened, modified in total" .. xgsl .. "Article data") else gg.toast(qmnb[2]["name"] .. "No data found, failed to open") end end end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("Successfully opened, modified in total"..#t.."Article data") gg.addListItems(t) else gg.toast("No data found, failed to open", false) return false end else gg.toast("Not Found") return false end end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print('  : ' .. lib .. ' ') gg.alert(' : ' .. lib .. '\n      ') gg.toast(' : ' .. lib .. '\n       ') os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]['end'] end end end function hex2tbl(hex) local ret = {} hex:gsub('%S%S', function(ch) ret[#ret + 1] = ch return '' end) return ret end function original(orig) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = '' for i = 1, used do if i ~= 1 then s = s .. ';' end local v = tbl[i] if v == '??' or v == '**' then v = '0~~0' end s = s .. v .. 'r' end s = s .. '::' .. used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == '??' or v == '**' then v = 256 else v = ('0x' .. v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount() results = {} local count = 0 local checked = 0 while not (found <= checked) do local all = gg.getResults(8) local total = #all local start = checked if total < checked + used then break end for i, v in ipairs(all) do v.address = v.address + myoffset end gg.loadResults(all) while total > start do local good = true local offset = all[1 + start].address - 1 if len > used then local get = {} for i = lim + 1, len do get[i - lim] = { address = offset + i, flags = gg.TYPE_BYTE, value = 0 } end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' and v == source[i] then tbl[i] = '**' end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' then s = s + 1 set[s] = { address = addr + i, value = v .. 'r', flags = gg.TYPE_BYTE } end end end if s ~= 0 then gg.setValues(set) end ok = true 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 read_file(path) local file = io.open(path, "rb") if not file then return nil end local content = file:read("*a") file:close() return content end local HexPatches = {} function HexPatches.MemoryPatch(Lib,Offset,Edit,Type) local Ranges = gg.getRangesList(Lib) local v = {} v[1] = {} v[1].address = Ranges[1].start + Offset v[1].flags = Type v[1].value = Edit.."r" v[1].freeze = true gg.setValues(v) end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print("⚠️Error : "..lib.." not found⚠️") gg.toast("⚠️Error : "..lib.." not found⚠️") os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]["end"] end end end function hex2tbl(hex) local ret = {} hex:gsub("%S%S", function (ch) ret[#ret + 1] = ch return "" end) return ret end function original(orig,longoff) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = "" for i = 1, used do if i ~= 1 then s = s..";" end local v = tbl[i] if v == "??" or v == "**" then v = "0~~0" end s = s..v.."r" end s = s.."::"..used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == "??" or v == "**" then v = 256 else v = ("0x"..v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount(); results = {} local count = 0 local checked = 0 while true do if checked >= found then break end local all = gg.getResults(8) local total = #all local start = checked if checked + used > total then break end for i, v in ipairs(all) do v.address = v.address + longoff end gg.loadResults(all) while start < total do local good = true local offset = all[1 + start].address - 1 if used < len then local get = {} for i = lim + 1, len do get[i - lim] = {address = offset + i, flags = gg.TYPE_BYTE, value = 0} end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" and v == source[i] then tbl[i] = "**" end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" then s = s + 1 set[s] = { ["address"] = addr + i, ["value"] = v.."r", ["flags"] = gg.TYPE_BYTE, } end end end if s ~= 0 then gg.setValues(set) end ok = true end gg.setRanges(gg.REGION_C_DATA | gg.REGION_CODE_APP) gg.getRangesList("libil2cpp.so") gg.searchNumber("7Fr;45r;4Cr;46r;01r;01r;01r;00r::8", gg.TYPE_BYTE, false, gg.SIGN_EQUAL, 2248912896, 2389098496) gg.getResultsCount() gg.getResults(8) gg.loadResults({ [1] = {address = 2326484416, flags = 1}, [2] = {address = 2326484417, flags = 1}, [3] = {address = 2326484418, flags = 1}, [4] = {address = 2326484419, flags = 1}, [5] = {address = 2326484420, flags = 1}, [6] = {address = 2326484421, flags = 1}, [7] = {address = 2326484422, flags = 1}, [8] = {address = 2326484423, flags = 1} }) gg.setValues({ [1] = { address = 2326484416, flags = 1, value = "01r" }, [2] = { address = 2326484417, flags = 1, value = "00r" }, [3] = { address = 2326484418, flags = 1, value = "A0r" }, [4] = { address = 2326484419, flags = 1, value = "E3r" }, [5] = { address = 2326484420, flags = 1, value = "1Er" }, [6] = { address = 2326484421, flags = 1, value = "FFr" }, [7] = { address = 2326484422, flags = 1, value = "2Fr" }, [8] = { address = 2326484423, flags = 1, value = "E1r" } }) gg.toast("𝚛𝚊𝚍𝚊𝚛 𝚖𝚙 𝚊𝚌𝚝𝚒𝚟𝚎") end function cheatB7() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-3.8369228e21;6.1629795e-33;-2.794721e28;-3.7444097e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-3.7444097e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("150", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝐟𝐩𝐬 120") end function cheatB8() gg.setRanges(gg.REGION_VIDEO) gg.searchNumber("1.0400390625", gg.TYPE_FLOAT) gg.getResults(0) gg.editAll("100", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚠𝚑𝚒𝚝𝚎 𝚋𝚘𝚍𝚢") end function cheatB9() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("44.0;44.0;60.0;45.0;0.20000000298:33", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, ("-1")) gg.searchNumber("44", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, ("-1")) gg.getResults(("950")) gg.editAll("98", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚏𝚘𝚟𖨆") end function pogi() menu3 = gg.multiChoice({ "ғᴀsᴛ sᴄᴏᴘᴇ", "ᴀɪᴍʙᴏᴛ ʟʜɪɢʜᴛ", "𝚖𝚊𝚐𝚒𝚌 𝚋𝚞𝚕𝚕𝚎𝚝 𝚑𝚒𝚐𝚑", "𝚠𝚊𝚕𝚕𝚜𝚑𝚘𝚝", "𝚖𝚊𝚐𝚒𝚌 𝚋𝚞𝚕𝚕𝚎𝚝 𝚕𝚒𝚐𝚑𝚝", "𝚗𝚘 𝚜𝚙𝚎𝚊𝚛𝚍", "𝚊𝚒𝚖 𝚋𝚘𝚝 360", "𝚏𝚒𝚛𝚎 𝚛𝚊𝚝𝚎 ⚠︎𝚋𝚞𝚐⚠︎", "𝚋𝚞𝚕𝚕𝚝 𝚝𝚛𝚊𝚌𝚔", "ᴀɪᴍʙᴏᴛʜɪɢʜ☘︎", "𝚗𝚘 𝚛𝚎𝚕𝚘𝚊𝚍", "𝚏𝚖𝚐☯︎", "𝚗𝚘 𝚛𝚎𝚌𝚘𝚒𝚕", "𝚜𝚖𝚊𝚕𝚕 𝚌𝚛𝚊𝚜𝚜𝚑𝚊𝚒𝚛", "𝚋𝚞𝚕𝚕𝚝 𝚝𝚛𝚊𝚌𝚔 𝚔𝚗𝚒𝚏𝚎", },nil,os.date("▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬ \nᴡᴇᴀᴘᴏɴ ᴍᴇɴᴜ \nDATE : %A, %x \nTIME : %I:%M %p\n▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬ ")) if menu3 == nil then main()else if menu3[1] == true then plays1() end if menu3[2] == true then plays2() end if menu3[3] == true then plays3() end if menu3[4] == true then plays4() end if menu3[5] == true then plays5() end if menu3[6] == true then plays6() end if menu3[7] == true then plays7() end if menu3[8] == true then plays8() end if menu3[9] == true then plays9() end if menu3[10] == true then plays10() end if menu3[11] == true then plays11() end if menu3[12] == true then plays12() end if menu3[13] == true then plays13() end if menu3[14] == true then plays14() end if menu3[15] == true then plays15() end end end function plays1() gg.clearResults() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-2.78698203e28;-3.74440972e28;-2.9203723e-31;-1.14072176e-33", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-3.74440972e28", gg.TYPE_FLOAT) gg.getResults(500) gg.editAll("-000000", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚏𝚊𝚜𝚝 𝚜𝚌𝚘𝚙𝚎") gg.clearResults() end function plays2() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-3.8369228e21;-9.1643713e22;-9.1717464e22;-6.0171296e27::16", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("-6.0171296e27", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(20) gg.editAll("0", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-2.8323923e28;-2.7250869e28;-2.786982e28;-3.7444097e28::16", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("-3.7444097e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(20) gg.editAll("0", gg.TYPE_FLOAT) gg.clearResults() gg.toast("??𝚒𝚖 𝚋𝚘𝚝 𝚕𝚒𝚐𝚑𝚝 ") end function plays3() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber('0.1439999938', gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) gg.getResults(999999) gg.editAll('3.1439999938', gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.toast("𝚖𝚊𝚐𝚒𝚌 𝚋𝚞𝚕𝚕𝚎𝚝 𝚑𝚒𝚐𝚑") gg.clearResults() end function plays4() gg.setRanges(gg.REGION_C_BSS) gg.searchNumber("4611686019501129728",gg.TYPE_QWORD,false,gg.SIGN_EQUAL,0,-1) gg.getResults(5) gg.editAll("-5721650868831073834",gg.TYPE_QWORD) gg.clearResults() gg.clearResults() gg.toast("𝚠𝚊𝚕𝚕 𝚜𝚑𝚘𝚝 ") end function plays5() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.00999999978F;0.03999999911~0.60000002384F;0.10000000149~0.5F;12D::53", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResultsCount() gg.searchNumber("0.03999999911~0.60000002384", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(6000) gg.editAll("5", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚖𝚊𝚐𝚒𝚌 𝚋𝚞𝚕𝚕𝚎𝚝 𝚕𝚒𝚐𝚑𝚝") end function plays6() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("32", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("1", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚗𝚘 𝚜𝚙𝚛𝚎𝚊𝚍" ) end function plays7() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.44999998808", gg.TYPE_FLOAT) gg.getResults(1000) gg.editAll("99", gg.TYPE_FLOAT) gg.toast("𝚊𝚒𝚖𝚋𝚘𝚝360") end function plays8() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-286,131,696;-1,174,405,032;-443,285,504", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1000) gg.refineNumber("-1,174,405,032", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(5000) gg.editAll("3", gg.TYPE_DWORD) gg.clearResults() gg.toast("𝚏𝚒𝚛𝚎𝚛𝚊𝚝𝚎") end function plays9() gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("-5.76566947e27F;-5.76808791e27F;-1.23824227e28F;-5.77050635e27F;-1.24646308e28F;-1.2546839e28F;-1.36203639e28F:25", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("-5.76566947e27F;-5.76808791e27F", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(10) gg.editAll("0", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.22", gg.TYPE_FLOAT) gg.getResults(510) gg.editAll("9", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.24", gg.TYPE_FLOAT) gg.getResults(510) gg.editAll("9", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("0.00001F;-1.30928164e25F;-9.49144318e20F;-3.69655457e20F;-3.69511377e20F:17", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("0.00001", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("8", gg.TYPE_FLOAT) gg.clearResults() gg.clearResults() gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("-2.66260713e30F;-7.23486928e31F;-2.62547135e30F;-2.58837002e30F;-2.63293647e30F;-4.54745318e-13F;-2.84399799e28F;-3.86858245e25F;-2.96877287e21F;-2.96877287e21F;-2.96877287e21F;-2.0F:65", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("-2", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("8", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝒃𝒖𝒍𝒍𝒆𝒕 𝒕𝒓𝒂𝒄𝒌 ✔︎") end function plays10() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-6.0171296e27", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(20) gg.editAll("150", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-1.5474806e26;-9.153296e22;-1.0525532e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-1.0525532e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(10) gg.editAll("150", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-2.8323923e28;-2.7250869e28;-2.786982e28;-3.7444097e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-3.7444097e28", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(20) gg.editAll("150", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚊𝚒𝚖𝚋𝚘𝚝𝚑𝚒𝚐𝚑") end function plays11() gg.setRanges(gg.REGION_C_DATA) gg.searchNumber("-382906896;-494030824;-315782398;-509591552;-352321468:17", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("-382906896;-494030824", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) G1=gg.getResults(5000) gg.editAll("-476053360;-516948194", gg.TYPE_DWORD) gg.clearResults() gg.setRanges(gg.REGION_C_BSS) gg.searchNumber("2", gg.TYPE_FLOAT, nil, nil, nil, nil) gg.getResults(0) gg.refineNumber("2", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("-999", gg.TYPE_FLOAT) gg.clearResults() gg.setVisible(false) gg.toast("𝚗𝚘 𝚛𝚎𝚕𝚘𝚊𝚍") end function plays12() gg.setRanges(gg.REGION_C_BSS) gg.searchNumber("2",gg.TYPE_FLOAT) gg.refineNumber("2",gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("-999",gg.TYPE_FLOAT) gg.toast("𝚏𝚖𝚓 ") end function plays13() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("1F;2F;3F;1067030938D", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.refineNumber("1", gg.TYPE_FLOAT) gg.getResults(9999) gg.editAll("0.199888999", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚗𝚘 𝚛𝚎𝚌𝚘𝚒𝚕") end function plays14() 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(Name.." modify"..#data.."Article data") local t = {} local base = Search[1][2] for **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(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 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"] .. "Failed to open") 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) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "Smile reminder: open successfully, modify a total" .. xgsl .. "Article") else gg.toast(qmnb[2]["name"] .. "Smile reminder: failed to open") end end end end function PS() end function setvalue(address,flags,value) PS('Modify address value (address, value type, value to be modified)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function SearchWrite(Search, Write, Type, Name) 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("Found"..#data.."Code Data") local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Name.."Successfully opened! already"..#t.."Code Data") gg.addListItems(t) else gg.toast(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function Fxs(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 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(Mingcg.."????"..#data.."") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for **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) gg.toast(Mingcg.."????"..#t.."") gg.addListItems(t) else gg.toast(Mingcg.."????", false) return false end else gg.toast("????") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find (szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len (szFullString)) break end nSplitArray[nSplitIndex] = string.sub (szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len (szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "Failed to open") 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"] .. "Failed to open") 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"] .. "Successfully opened, modified in total" .. xgsl .. "Article data") else gg.toast(qmnb[2]["name"] .. "No data found, failed to open") end end end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("Successfully opened, modified in total"..#t.."Article data") gg.addListItems(t) else gg.toast("No data found, failed to open", false) return false end else gg.toast("Not Found") return false end end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print('  : ' .. lib .. ' ') gg.alert(' : ' .. lib .. '\n      ') gg.toast(' : ' .. lib .. '\n       ') os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]['end'] end end end function hex2tbl(hex) local ret = {} hex:gsub('%S%S', function(ch) ret[#ret + 1] = ch return '' end) return ret end function original(orig) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = '' for i = 1, used do if i ~= 1 then s = s .. ';' end local v = tbl[i] if v == '??' or v == '**' then v = '0~~0' end s = s .. v .. 'r' end s = s .. '::' .. used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == '??' or v == '**' then v = 256 else v = ('0x' .. v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount() results = {} local count = 0 local checked = 0 while not (found <= checked) do local all = gg.getResults(8) local total = #all local start = checked if total < checked + used then break end for i, v in ipairs(all) do v.address = v.address + myoffset end gg.loadResults(all) while total > start do local good = true local offset = all[1 + start].address - 1 if len > used then local get = {} for i = lim + 1, len do get[i - lim] = { address = offset + i, flags = gg.TYPE_BYTE, value = 0 } end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' and v == source[i] then tbl[i] = '**' end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' then s = s + 1 set[s] = { address = addr + i, value = v .. 'r', flags = gg.TYPE_BYTE } end end end if s ~= 0 then gg.setValues(set) end ok = true 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 read_file(path) local file = io.open(path, "rb") if not file then return nil end local content = file:read("*a") file:close() return content end local HexPatches = {} function HexPatches.MemoryPatch(Lib,Offset,Edit,Type) local Ranges = gg.getRangesList(Lib) local v = {} v[1] = {} v[1].address = Ranges[1].start + Offset v[1].flags = Type v[1].value = Edit.."r" v[1].freeze = true gg.setValues(v) end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print("⚠️Error : "..lib.." not found⚠️") gg.toast("⚠️Error : "..lib.." not found⚠️") os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]["end"] end end end function hex2tbl(hex) local ret = {} hex:gsub("%S%S", function (ch) ret[#ret + 1] = ch return "" end) return ret end function original(orig,longoff) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = "" for i = 1, used do if i ~= 1 then s = s..";" end local v = tbl[i] if v == "??" or v == "**" then v = "0~~0" end s = s..v.."r" end s = s.."::"..used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == "??" or v == "**" then v = 256 else v = ("0x"..v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount(); results = {} local count = 0 local checked = 0 while true do if checked >= found then break end local all = gg.getResults(8) local total = #all local start = checked if checked + used > total then break end for i, v in ipairs(all) do v.address = v.address + longoff end gg.loadResults(all) while start < total do local good = true local offset = all[1 + start].address - 1 if used < len then local get = {} for i = lim + 1, len do get[i - lim] = {address = offset + i, flags = gg.TYPE_BYTE, value = 0} end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" and v == source[i] then tbl[i] = "**" end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" then s = s + 1 set[s] = { ["address"] = addr + i, ["value"] = v.."r", ["flags"] = gg.TYPE_BYTE, } end end end if s ~= 0 then gg.setValues(set) end ok = true end gg.setRanges(gg.REGION_C_DATA | gg.REGION_CODE_APP) so = gg.getRangesList("libil2cpp.so")[1].start py = 73560592 setvalue(so + py, 16, 32) gg.toast("𝚜𝚖𝚊𝚕𝚕 𝚌𝚛𝚘𝚜𝚜𝚑𝚊𝚒𝚛 ") end function plays15() gg.setVisible(false) gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("-5.76566947e27F;-5.76808791e27F;-1.23824227e28F;-5.77050635e27F;-1.24646308e28F;-1.2546839e28F;-1.36203639e28F:25", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("-5.76566947e27F;-5.76808791e27F", gg.TYPE_FLOAT) gg.getResults(10) gg.editAll("30", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.22", gg.TYPE_FLOAT) gg.getResults(510) gg.editAll("90", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("0.24", gg.TYPE_FLOAT) gg.getResults(510) gg.editAll("90", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_CODE_APP) gg.searchNumber("0.00001F;-1.30928164e25F;-9.49144318e20F;-3.69655457e20F;-3.69511377e20F:17", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("0.00001", gg.TYPE_FLOAT) gg.getResults(100) gg.editAll("90", gg.TYPE_FLOAT) gg.toast("ʙᴜʟʟᴇᴛ ᴛʀᴀᴄᴋ 𝚔𝚗𝚒𝚏𝚎") gg.clearResults() gg.clearResults() gg.clearResults() end function eut() menu4 = gg.multiChoice({ " 𝚜𝚙𝚎𝚎𝚍 2×", " 𝚜𝚙𝚎𝚎𝚍 3×", "𝚜𝚙𝚎𝚎𝚍 7×", "𝚜𝚙𝚎𝚎𝚍 10×", "ʜɪɢʜ ᴊᴜᴍᴘ", "ᴡᴀʟʟ ᴄʟɪᴍʙ", "sʟɪᴅᴇ sᴘᴇᴇ", "sᴘᴇᴇᴅ ʜɪɢʜ ɴᴏ ʟᴀɢ", },nil,os.date("▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬ \nsᴘᴇᴇᴅʜᴀᴄᴋ ᴍᴇɴᴜ \nDATE : %A, %x \nTIME : %I:%M %p\n▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬ ")) if menu4 == nil then main()else if menu4[1] == true then sh1() end if menu4[2] == true then sh2() end if menu4[3] == true then sh3() end if menu4[4] == true then sh4() end if menu4[5] == true then sh5() end if menu4[6] == true then sh6() end if menu4[7] == true then sh7() end if menu4[8] == true then sh8() end end end function sh1() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4.28000020981;3.20000004768::5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("4.28000020981", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(400) gg.editAll("7", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚜𝚙𝚎𝚎𝚍 𝚙𝚘𝚠𝚎𝚛 𝚡1.5") end function sh2() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4.28000020981F;3.20000004768F::5", gg.TYPE_FLOAT, false, nil, 0, -1) gg.refineNumber("4.28000020981", gg.TYPE_FLOAT, false, nil, 0, -1) gg.getResults(50) gg.editAll("10", gg.TYPE_FLOAT, false, nil, 0, -1) gg.toast("𝚜𝚙𝚎𝚎𝚍 𝚙𝚘𝚠𝚎𝚛 𝚡2 ") gg.clearResults() end function sh3() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4.28000020981F;3.20000004768F::5", gg.TYPE_FLOAT, false, nil, 0, -1) gg.refineNumber("4.28000020981", gg.TYPE_FLOAT, false, nil, 0, -1) gg.getResults(50) gg.editAll("15", gg.TYPE_FLOAT, false, nil, 0, -1) gg.toast("𝚜𝚙𝚎𝚎𝚍 𝚙𝚘𝚠𝚎?? 𝚡7") gg.clearResults() end function sh4() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4.28000020981F;3.20000004768F::5", gg.TYPE_FLOAT, false, nil, 0, -1) gg.refineNumber("4.28000020981", gg.TYPE_FLOAT, false, nil, 0, -1) gg.getResults(50) gg.editAll("20", gg.TYPE_FLOAT, false, nil, 0, -1) gg.toast("𝚜𝚙𝚎𝚎𝚍 𝚙𝚘𝚠𝚎𝚛 𝚡10") gg.clearResults() end function sh5() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("7.5;0.8::5", gg.TYPE_FLOAT) gg.refineNumber("0.8", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1000) gg.editAll("4", gg.TYPE_FLOAT) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("7.5;4::5", gg.TYPE_FLOAT) gg.refineNumber("7.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(1000) gg.editAll("10", gg.TYPE_FLOAT) gg.clearResults() gg.toast("𝚑𝚒𝚐𝚑 𝚓𝚞𝚖𝚙 𝚊𝚌𝚝𝚒𝚟𝚎") end function sh6() gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_ANONYMOUS) gg.searchNumber("0.4999999702F;0.05000000075F;0.25F:9", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("0.25", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("20", gg.TYPE_FLOAT) gg.clearResults() gg.toast('𝚠𝚊𝚕𝚕 𝚌𝚕𝚒𝚖𝚋 𝚊𝚌𝚝𝚒𝚟𝚎') end function sh7() 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(Name.." modify"..#data.."Article data") local t = {} local base = Search[1][2] for **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(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 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"] .. "Failed to open") 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) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "Smile reminder: open successfully, modify a total" .. xgsl .. "Article") else gg.toast(qmnb[2]["name"] .. "Smile reminder: failed to open") end end end end function PS() end function setvalue(address,flags,value) PS('Modify address value (address, value type, value to be modified)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function SearchWrite(Search, Write, Type, Name) 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("Found"..#data.."Code Data") local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Name.."Successfully opened! already"..#t.."Code Data") gg.addListItems(t) else gg.toast(Name.."Failed to open", false) return false end else gg.toast(Name.."Failed to open") return false end end function Fxs(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 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(Mingcg.."????"..#data.."") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for **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) gg.toast(Mingcg.."????"..#t.."") gg.addListItems(t) else gg.toast(Mingcg.."????", false) return false end else gg.toast("????") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find (szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len (szFullString)) break end nSplitArray[nSplitIndex] = string.sub (szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len (szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "Failed to open") 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"] .. "Failed to open") 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"] .. "Successfully opened, modified in total" .. xgsl .. "Article data") else gg.toast(qmnb[2]["name"] .. "No data found, failed to open") end end end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then local t = {} local base = Search[1][2] for **1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("Successfully opened, modified in total"..#t.."Article data") gg.addListItems(t) else gg.toast("No data found, failed to open", false) return false end else gg.toast("Not Found") return false end end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print('  : ' .. lib .. ' ') gg.alert(' : ' .. lib .. '\n      ') gg.toast(' : ' .. lib .. '\n       ') os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]['end'] end end end function hex2tbl(hex) local ret = {} hex:gsub('%S%S', function(ch) ret[#ret + 1] = ch return '' end) return ret end function original(orig) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = '' for i = 1, used do if i ~= 1 then s = s .. ';' end local v = tbl[i] if v == '??' or v == '**' then v = '0~~0' end s = s .. v .. 'r' end s = s .. '::' .. used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == '??' or v == '**' then v = 256 else v = ('0x' .. v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount() results = {} local count = 0 local checked = 0 while not (found <= checked) do local all = gg.getResults(8) local total = #all local start = checked if total < checked + used then break end for i, v in ipairs(all) do v.address = v.address + myoffset end gg.loadResults(all) while total > start do local good = true local offset = all[1 + start].address - 1 if len > used then local get = {} for i = lim + 1, len do get[i - lim] = { address = offset + i, flags = gg.TYPE_BYTE, value = 0 } end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' and v == source[i] then tbl[i] = '**' end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= '??' and v ~= '**' then s = s + 1 set[s] = { address = addr + i, value = v .. 'r', flags = gg.TYPE_BYTE } end end end if s ~= 0 then gg.setValues(set) end ok = true 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 read_file(path) local file = io.open(path, "rb") if not file then return nil end local content = file:read("*a") file:close() return content end local HexPatches = {} function HexPatches.MemoryPatch(Lib,Offset,Edit,Type) local Ranges = gg.getRangesList(Lib) local v = {} v[1] = {} v[1].address = Ranges[1].start + Offset v[1].flags = Type v[1].value = Edit.."r" v[1].freeze = true gg.setValues(v) end local memFrom, memTo, lib, num, lim, results, src, ok = 0, -1, nil, 0, 32, {}, nil, false function name(n) if lib ~= n then lib = n local ranges = gg.getRangesList(lib) if #ranges == 0 then print("⚠️Error : "..lib.." not found⚠️") gg.toast("⚠️Error : "..lib.." not found⚠️") os.exit() else memFrom = ranges[1].start memTo = ranges[#ranges]["end"] end end end function hex2tbl(hex) local ret = {} hex:gsub("%S%S", function (ch) ret[#ret + 1] = ch return "" end) return ret end function original(orig,longoff) local tbl = hex2tbl(orig) local len = #tbl if len == 0 then return end local used = len if len > lim then used = lim end local s = "" for i = 1, used do if i ~= 1 then s = s..";" end local v = tbl[i] if v == "??" or v == "**" then v = "0~~0" end s = s..v.."r" end s = s.."::"..used gg.searchNumber(s, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, memFrom, memTo) if len > used then for i = used + 1, len do local v = tbl[i] if v == "??" or v == "**" then v = 256 else v = ("0x"..v) + 0 if v > 127 then v = v - 256 end end tbl[i] = v end end local found = gg.getResultCount(); results = {} local count = 0 local checked = 0 while true do if checked >= found then break end local all = gg.getResults(8) local total = #all local start = checked if checked + used > total then break end for i, v in ipairs(all) do v.address = v.address + longoff end gg.loadResults(all) while start < total do local good = true local offset = all[1 + start].address - 1 if used < len then local get = {} for i = lim + 1, len do get[i - lim] = {address = offset + i, flags = gg.TYPE_BYTE, value = 0} end get = gg.getValues(get) for i = lim + 1, len do local ch = tbl[i] if ch ~= 256 and get[i - lim].value ~= ch then good = false break end end end if good then count = count + 1 results[count] = offset checked = checked + used else local del = {} for i = 1, used do del[i] = all[i + start] end gg.removeResults(del) end start = start + used end end end function replaced(repl) num = num + 1 local tbl = hex2tbl(repl) if src ~= nil then local source = hex2tbl(src) for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" and v == source[i] then tbl[i] = "**" end end src = nil end local cnt = #tbl local set = {} local s = 0 for _, addr in ipairs(results) do for i, v in ipairs(tbl) do if v ~= "??" and v ~= "**" then s = s + 1 set[s] = { ["address"] = addr + i, ["value"] = v.."r", ["flags"] = gg.TYPE_BYTE, } end end end if s ~= 0 then gg.setValues(set) end ok = true end so=gg.getRangesList('libil2cpp.so')[1].start py=0x2BE3840 setvalue(so+py,4,-482082104) gg.clearResults() so=gg.getRangesList('libil2cpp.so')[1].start py=0x2BE3844 setvalue(so+py,4,-516948194) gg.clearResults() gg.toast("𝚜𝚕𝚒𝚍𝚎 𝚜𝚙𝚎𝚎𝚍 𝚊𝚌𝚝𝚒𝚟𝚎") end function sh8() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("4.28000020981;3.20000004768;0.30000001192", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(200) gg.editAll("20", gg.TYPE_FLOAT) gg.clearResults() gg.toast("sᴘᴇᴇᴅ ʜᴀᴄᴋ ɴᴏʟᴀɢ ʜɪɢʜ") gg.setRanges(0) end function EXIT() cuongken = gg.alert("\n","╔❖•ೋ°ೋ•❖╗\n🚫ᴇxɪᴛ🚫\n╚❖•ೋ°ೋ•❖╝","╔❖•ೋ°ೋ•❖╗\n⬅️ʙᴀᴄᴋ➡️\n╚❖•ೋ°ೋ•❖╝") if cuongken == 1 then PH() end if cuongken == 2 then main() end if cuongken == 3 then COPY() end end function COPY() gg.copyText([["@𝚒𝚖𝚎𝚗𝚣𝚘𝚢𝚝"]], false) os.exit() main() end function PH() print("𝚒𝚖𝚎𝚗𝚣𝚘𝚢𝚝✌︎") gg.skipRestoreState() gg.setVisible(true) os.exit() main() end function r() gg.toast("@𝚒𝚖𝚎𝚗𝚣𝚘𝚢𝚝") end while true do if gg.isVisible(true) then imenzoyt = 1 gg.setVisible(false) end gg.clearResults() if imenzoyt == 1 then main() end end