algorithm - 内存黑客中的指针扫描
问题描述
如果您不熟悉指针扫描,请阅读这篇文章
我在使用作弊引擎在游戏或任何使用指针扫描方法的程序中查找静态地址时,现在我开始考虑在我自己的培训师中制作,所以经过一番搜索,我发现了这个: 伪代码
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 字节对齐的地址
解决方案
查看代码后我有同样的问题,我认为应该将其更改为:
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 {}
}
}
推荐阅读
- java - 将我的 Cordapps 升级到 v4.1 后,我的 Junits 工作正常,但在服务器上出现错误,如何解决这个问题?
- javascript - Redux-ORM,带有 ReactJS 选择器没有返回值
- angular - 为什么 window.pageYOffset 总是 0?以及如何获得一个值来检查页面是向下滚动还是向上滚动?
- javascript - 如何将此加密功能从 PHP 转换为 Javascript
- android - 为什么在 7 月 29 日关闭 Places SDK 的新版本(17.0.0)?
- javascript - 仅当用户在 div 上滚动时如何显示滚动条
- swift - Audiokit 小频率上的奇怪幅度值
- javascript - 按住键时忽略重复的键盘事件
- python - Kafka 简单生产者不发送消息也不给出错误
- python - 用相应的值替换 Numpy 数组中多个出现的元素集