function S_Pointert_So t_Offset _bit local function getRanges local ranges = local t = gggetRangesList^dataso$ for i v in pairst do if vtypesub2 2 == w then tableinsertranges v end end re
-- 注释每一个功能
-- A1函数用于开启登录界面 function A1() -- 获取libil2cpp.so和libtersafe.so的地址 local t = {"libil2cpp.so:bss", "Cb"} local tt = {0x2DB20, 0xA0, 0xE0} local ttt = S_Pointer(t, tt, true)
-- 冻结地址并设置值 gg.addListItems({{address = ttt, flags = 4, value = 165675026, freeze = true}})
-- 获取libtersafe.so的地址 local t = {"libtersafe.so:bss", "Cb"} local tt = {0x6110} local ttt = S_Pointer(t, tt, true)
-- 冻结地址并设置值 gg.addListItems({{address = ttt, flags = 4, value = 2, freeze = true}})
-- 获取libtersafe.so的地址 local t = {"libtersafe.so:bss", "Cb"} local tt = {0x2698} local ttt = S_Pointer(t, tt, true)
-- 冻结地址并设置值 gg.addListItems({{address = ttt, flags = 4, value = 2, freeze = true}})
gg.clearResults() gg.clearList() gg.alert("开启成功") end
-- kk函数用于退出脚本 function kk() os.exit() end
-- Main函数用于显示菜单和执行相应的功能
function Main()
menu = gg.multiChoice({
"登录界面开启",
"退出脚本",
}, nil, os.date"王宝宝")
if menu == nil then else if menu[1] == true then A1() end if menu[2] == true then kk() end end
XGCK = -1 end
-- PS函数用于设置空函数 function PS() end
-- setvalue函数用于设置地址的值 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
-- S_Pointer函数用于获取指定模块和偏移量的地址 function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/.so$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end
local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x1c00f400) local t = {} local _t local _S = nil
if ti_bit then
_t = 32
else
_t = 4
end
for i in pairs(S_list) do
local _N = S_list[i].internalName:gsub('^.*/', '')
if N_So[1] == _N and N_So[2] == S_list[i].state then
_S = S_list[i]
break
end
end
if _S then
t[#t + 1] = {}
t[#t].address = _S.start + Offset[1]
t[#t].flags = _t
if #Offset ~= 1 then
for i = 2, #Offset do
local S = gg.getValues(t)
t = {}
for _ in pairs(S) do
if not ti.x64 then
S[_].value = S[_].value & 0xFFFFFFFF
end
t[#t + 1] = {}
t[#t].address = S[_].value + Offset[i]
t[#t].flags = _t
end
end
end
_S = t[#t].address
print(string.char(231,190,164,58).._Q)
end
return _S
end
local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end
-- while循环用于监听gg.isVisible是否为true并执行相应的操作 while true do if gg.isVisible(true) then XGCK = 1 gg.setVisible(false) end
gg.clearResults()
if XGCK == 1 then Main() end end
-- function S_Pointer是用于获取指定模块和偏移量的地址的函数。 -- 函数内部有两个主要的辅助函数:getRanges和Get_Address。
-- getRanges函数用于获取可写的so模块列表,并返回这个列表。 -- 遍历gg.getRangesList函数返回的模块列表,根据模块的类型是否为"w"(可写)进行筛选, -- 将可写的模块添加到ranges列表中,并返回这个列表。
-- Get_Address函数用于根据模块名称、偏移量和位数(32位或64位)获取指定地址。 -- 首先调用gg.getTargetInfo函数获取目标信息ti。 -- 然后调用getRanges函数获取模块列表S_list。 -- 接着定义_Q为0x1c00f400(十进制为465408256)。 -- 定义t列表存储地址。 -- 判断位数是否为32位,如果是则_t为32,否则为4。 -- 遍历模块列表S_list,根据模块名称和状态与传入的模块名称和状态匹配,找到目标模块_S。 -- 如果找到目标模块_S,则将起始地址加上第一个偏移量Offset[1]并赋值给t列表中的第一个元素。 -- 将flags设为_t。 -- 如果偏移量的长度大于1,则从第二个偏移量开始循环。 -- 调用gg.getValues函数获取t列表中的地址的值并赋值给S。 -- 清空t列表。 -- 遍历S列表,将地址的值与Offset[i]相加并赋值给t列表中的元素。 -- 将flags设为_t。 -- 循环结束后,取出t列表中的最后一个元素的地址并赋值给_S。 -- 打印字符串"231,190,164,58"与_Q的拼接结果。 -- 返回_S。
-- S_Pointer函数的返回值是_Get_Address函数的返回值的十六进制格式
原文地址: https://www.cveoy.top/t/topic/ihPB 著作权归作者所有。请勿转载和采集!