Lua 代码:获取内存地址并修改值 (S_Pointer 函数)

该代码实现了一个名为 S_Pointer 的 Lua 函数,用于根据指定的 so 库名、偏移量和位数来获取内存地址。同时,还提供了一个 setvalue 函数,用于修改该地址的值。

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 ipairs(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(0x167ba0fe)
        local t = {}
        local _S = nil
        
        if ti_bit then
            _t = 32
        else
            _t = 4
        end
        
        for i, v in ipairs(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 j, v in ipairs(S) do
                        if not ti.x64 then
                            S[j].value = S[j].value & 0xFFFFFFFF
                        end
                        
                        t[#t + 1] = {}
                        t[#t].address = S[j].value + Offset[i]
                        t[#t].flags = _t
                    end
                end 
            end
            
            _S = t[#t].address
        end
        
        return _S
    end
    
    local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit))
    return _A
end

setvalue 函数

function setvalue(address, flags, value) 
    local tt = {{}} 
    tt[1].address = address 
    tt[1].flags = flags 
    tt[1].value = value 
    gg.setValues(tt) 
end

代码分析

  1. S_Pointer 函数:

    • getRanges() 函数: 获取所有以 'w' 开头的 so 库文件,并返回一个包含这些库文件信息的表格。
    • Get_Address() 函数: 根据指定的 so 库名、偏移量和位数,从 getRanges() 返回的表格中找到对应的库文件,并计算出最终的内存地址。
    • 该函数返回最终计算得到的内存地址,以十六进制字符串形式表示。
  2. setvalue 函数:

    • 该函数接受三个参数:address (内存地址)、flags (内存地址类型) 和 value (要设置的值)。
    • 该函数使用 gg.setValues() 函数将指定的内存地址修改为指定的值。

使用说明

  1. 将以上代码复制到一个 Lua 文件中。
  2. 加载该 Lua 文件到你的游戏或软件中。
  3. 调用 S_Pointer 函数来获取内存地址,例如:
    local address = S_Pointer({"game.so", "running"}, {0x100, 0x20}, false)
    
    • 第一个参数 {"game.so", "running"} 表示要查找的 so 库文件,其中 game.so 是库文件名,running 是库文件的状态。
    • 第二个参数 {0x100, 0x20} 表示要使用的偏移量。
    • 第三个参数 false 表示内存地址类型为 32 位。
  4. 调用 setvalue 函数来修改内存地址的值,例如:
    setvalue(address, 32, 0x12345678)
    

注意

  • 该代码需要使用 gg 库。
  • 偏移量需要根据目标游戏或软件进行调整。
  • 确保你对代码的功能和安全性有足够的了解,并谨慎使用。
Lua 代码:获取内存地址并修改值 (S_Pointer 函数)

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

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