首页 > 解决方案 > 内存黑客中的指针扫描

问题描述

如果您不熟悉指针扫描,请阅读这篇文章

我在使用作弊引擎在游戏或任何使用指针扫描方法的程序中查找静态地址时,现在我开始考虑在我自己的培训师中制作,所以经过一番搜索,我发现了这个: 伪代码

list<int> pointerScan(target, maxAdd, maxDepth) {
     for address = BASE, 0x7FFFFFF, 4 {
        ret = rScan(address, target, maxAdd, maxDepth, 1)
        if (ret.len > 0) {
            ret.pushFront(address)
            return ret
        }
    }
    return {}
}

list<int> rScan(address, target, maxAdd, maxDepth, curDepth) 
{
    for offset = 0, maxAdd, 4 
    {
        value = read(address + offset)
        if (value == target)
            return list<int>(offset)
    }
     if (curDepth < maxDepth) 
     {
        curDepth++
        for offset = 0, maxAdd, 4 
        {
            ret = rScan(address + offset, target, maxAdd, maxDepth, curDepth)
            if (ret.len > 0) 
            {
                ret.pushFront(offset)
                { 
                return ret
                }
            }
        }
        return {}
    }
}

target 是要查找的动态内存地址

maxAdd 是任何偏移量的最大值

maxDepth 是指针路径的最大长度

pointerScan()pointerScan()函数是扫描的入口点 。它接受参数 target(要查找的动态内存地址)、maxAdd(任何偏移的最大值)和 maxDepth(指针路径的最大长度)。然后循环遍历游戏中每个 4 字节对齐的地址,调用 rScan()参数 address(当前迭代中的地址)、target、maxAdd、maxDepth 和 curDepth(路径的深度,在这种情况下始终为 1 )。

rScan()rScan()函数从 0 和 maxAdd 之间的每个 4 字节对齐的偏移量中读取内存,如果结果等于 target 则返回。如果rScan()在第一个循环中没有返回并且递归不是太深,它会增加 curDepth 并再次在每个 offset 上循环,为每次迭代调用自身。

address + offset我对这个伪代码的 问题是我不明白为什么

ret = rScan(address + offset, target, maxAdd, maxDepth, curDepth)

我认为没有效果有人告诉我增加深度,但我看不到增加地址的点,因为第一个函数(pointerScan)循环遍历所有以 4 字节对齐的地址

标签: algorithmassemblymemorypseudocodecheat-engine

解决方案


查看代码后我有同样的问题,我认为应该将其更改为:

list<int> rScan(address, target, maxAdd, maxDepth, curDepth) 
{
    value = read(address)
    for offset = 0, maxAdd, 4 
    {
        if (value + offset == target)
            return list<int>(offset)
    }
     if (curDepth < maxDepth) 
     {
        curDepth++
        for offset = 0, maxAdd, 4 
        {
            ret = rScan(value + offset, target, maxAdd, maxDepth, curDepth)
            if (ret.len > 0) 
            {
                ret.pushFront(offset)
                { 
                return ret
                }
            }
        }
        return {}
    }
}

推荐阅读