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

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

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}})

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}})

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("开启成功")

while true do
    if gg.isVisible(true) then
        gg.setVisible(false)
    end
    gg.clearResults()
end

代码说明:

  • S_Pointer 函数

    • 获取目标 SO 文件的地址范围。
    • 根据输入的 SO 文件名称、偏移量和位数,计算目标内存地址。
    • 返回该地址的十六进制字符串表示。
  • setvalue 函数

    • 用于修改指定内存地址的值。
  • while 循环

    • 循环检测 GG 游戏守护进程的界面是否可见。
    • 如果可见,则将其隐藏,并清除所有搜索结果。

代码作用:

  • 获取目标 SO 文件中指定位置的内存地址。
  • 修改指定内存地址的值。
  • 隐藏 GG 游戏守护进程的界面,防止其干扰程序运行。

代码解释:

代码中的 while true do 循环是一个无限循环,用于确保在程序执行期间 GG 游戏守护进程界面不会干扰到程序的正常运行。该代码段会不断检测 GG 游戏守护进程的界面是否可见,如果可见则将其隐藏,然后清除所有的搜索结果。

结论:

这段代码不应该被删除,因为它确保了在程序执行期间 GG 游戏守护进程界面不会干扰到程序的正常运行。

注意:

代码中的 gg.isVisible(true)gg.setVisible(false) 是 GG 游戏守护进程的 API 函数,需要使用 GG 游戏守护进程的库文件才能使用。

代码优化建议:

  • 使用更具描述性的变量名。
  • 使用注释解释代码逻辑。
  • 将代码分解成更小的函数,提高代码可读性和可维护性。
  • 使用更安全的方式处理内存地址,例如使用 gg.checkAddress 函数检查地址是否有效。
  • 使用 gg.closeApp 函数关闭 GG 游戏守护进程,而不是隐藏其界面。

代码安全建议:

  • 不要在代码中使用硬编码的内存地址,而是使用变量或函数获取内存地址。
  • 使用更安全的方式处理用户输入,例如使用 gg.trim 函数去除字符串中的空格和特殊字符。
  • 避免在代码中使用 gg.alert 函数,因为该函数会显示在游戏界面上,可能会干扰游戏正常运行。
  • 使用更安全的方式处理文件和网络操作,例如使用 gg.fopen 函数打开文件,使用 gg.download 函数下载文件。

代码示例:

-- 获取目标 SO 文件的内存地址
local address = S_Pointer({"libil2cpp.so:bss", "Cb"}, {0x2DB20, 0xA0, 0xE0}, true)

-- 修改指定内存地址的值
setvalue(address, 4, 165675026)

-- 隐藏 GG 游戏守护进程的界面
gg.setVisible(false)
S_Pointer 函数:用于获取指定 SO 文件的内存地址

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

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