local MAGIC = 0x5A5A5A5A local MAGIC_OFFSET = 0xFF8 local PAGE_COUNT = 3 local SAVE_DIR = "/sdcard/AGG" local function allocPage() if gg.allocatePage then local ok, addr = pcall(function() return gg.allocatePage(gg.PROT_READ | gg.PROT_WRITE | gg.PROT_EXEC) end) if ok and type(addr) == "number" and addr ~= 0 then return addr end end if gg.alloc then local ok, addr = pcall(function() return gg.alloc(0x4000) end) if ok and type(addr) == "number" and addr ~= 0 then if gg.setRangesProtect then pcall(function() gg.setRangesProtect(addr, 0x4000, gg.PROT_READ | gg.PROT_WRITE | gg.PROT_EXEC) end) end return addr end end return nil end local function writeMagic(addr) gg.setValues({{ address = addr + MAGIC_OFFSET, flags = gg.TYPE_DWORD, value = MAGIC }}) local chk = gg.getValues({{ address = addr + MAGIC_OFFSET, flags = gg.TYPE_DWORD }}) if not chk or not chk[1] then return false end return tonumber(tostring(chk[1].value)) == MAGIC end local function saveFile(path, content) local f = io.open(path, "w") if f then f:write(content) f:close() return true end return false end local pages = {} for i = 1, PAGE_COUNT do local p = allocPage() if not p or p == 0 then gg.alert("第 " .. i .. " 页内存分配失败\n请确认 AGG 已获得 Root 权限,并检查目标进程是否正常。") return end pages[i] = p end for i, p in ipairs(pages) do if not writeMagic(p) then gg.alert("第 " .. i .. " 页内存校验失败\n地址:0x" .. string.format("%X", p)) return end end local hexList = {} for _, p in ipairs(pages) do hexList[#hexList + 1] = string.format("%X", p) end local body = table.concat(hexList, "\n") pcall(function() if gg.makeDir then gg.makeDir(SAVE_DIR) else io.popen("mkdir -p " .. SAVE_DIR .. " 2>/dev/null") end end) local saved = {} if saveFile(SAVE_DIR .. "/pre_alloc_addr.txt", body) then table.insert(saved, SAVE_DIR .. "/pre_alloc_addr.txt") end if saveFile("/sdcard/pre_alloc_addr.txt", body) then table.insert(saved, "/sdcard/pre_alloc_addr.txt") end local tip = "预分配内存成功\n" .. "FEN: 0x" .. hexList[1] .. "\n" .. "STATE: 0x" .. hexList[2] .. "\n" .. "STRINGS: 0x" .. hexList[3] if #saved > 0 then tip = tip .. "\n\n已保存到:\n" .. table.concat(saved, "\n") else tip = tip .. "\n\n未成功保存地址文件,请手动记录上面的地址。" end gg.alert(tip)