-- 注释每一个功能

-- 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函数的返回值的十六进制格式

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

原文地址: https://www.cveoy.top/t/topic/ihPB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录