gg.require("82.1", 15188) local v = { 1, 2, 4, 6790, 'map', 'state', '1.41.0', 'start', 'address', 'end', 'Cb', 'packageName', 'value', 'internalName', 'com.fingersoft.hillclimb', 'x64', 'flags', false, {}, 'name', 2943000960, 2942980096, {}, 2943156224, {}, 'versionCode', 'rw-p', {}, 2943000856, '\[anon:.bss\]', '/data/app/com.fingersoft.hillclimb-0KsFLJQxbdznQCk5eqeRpg==/lib/arm/libgame.so:bss', 'versionName', {}, 251, 'type', } v[19][v[1]] = v[28] v[19][v[2]] = v[25] v[19][v[5]] = v[23] v[23][v[10]] = v[24] v[23][v[20]] = v[30] v[23][v[6]] = v[11] v[23][v[35]] = v[27] v[23][v[14]] = v[31] v[23][v[8]] = v[22] v[25][v[17]] = v[3] v[25][v[9]] = v[21] v[25][v[13]] = v[4] v[28][v[17]] = v[3] v[28][v[9]] = v[29] v[28][v[13]] = v[3] v[33][v[1]] = v[19] v[33][v[12]] = v[15] v[33][v[32]] = v[7] v[33][v[16]] = v[18] v[33][v[26]] = v[34] v = v[33] local ti = gg.getTargetInfo() if ti.packageName ~= v.packageName or ti.versionCode ~= v.versionCode or ti.versionName ~= v.versionName or ti.x64 ~= v.x64 then gg.alert('Script generated for '..v.packageName..' '..v.versionName..' ['..v.versionCode..'] '..v.x64.. '\nYou select '..ti.packageName..' '..ti.versionName..' ['..ti.versionCode..'] '..ti.x64.. '\nSomething might go wrong.') end local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in ipairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end local ret = {} local d = {} local go = false for j, p in ipairs(v) do if p.map.new == nil then for k, r in ipairs(ranges) do if p.map.internalName:gsub('^.*/', '') == r.internalName:gsub('^.*/', '') and p.map.state == r.state then p.map.new = r break end end end if p.map.new ~= nil then for i, u in ipairs(p) do u.address = u.address - p.map.start + p.map.new.start d[u], go = u, true end end end while go do local s = gg.getValues(d) d, go = {}, false for old, new in pairs(s) do if old.offset == nil then table.insert(ret, new) else if not ti.x64 then new.value = new.value & 0xFFFFFFFF end for offset, u in pairs(old.offset) do u.address = new.value + offset d[u], go = u, true end end end end gg.loadResults(ret)