, если вы не знакомы со сканированием указателя, пожалуйста, прочитайте эту запись
, которую я использовал при использовании чит-движка, чтобы найти статический адрес в игре или любой программе, использующей метод сканирования указателя, теперь я начинаюЯ думаю о make в моем собственном тренере, поэтому после некоторого поиска я нахожу это: псевдокод
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()
с адресом параметров (адрес в текущей итерации), target, maxAdd, maxDepth и curDepth (глубина пути, которая всегда равна 1в этом случае).
rScan () Функция rScan()
считывает память из каждого 4-байтового выровненного смещения между 0 и maxAdd и возвращает результат, если результат равен цели.Если rScan()
не возвращается в первый цикл, и рекурсия не слишком глубокая, она увеличивает curDepth и снова выполняет циклы по каждому смещению, вызывая себя для каждой итерации.
Моя проблема с этим псевдокодом заключается в том, что я могне понимаю, почему address + offset
in
ret = rScan(address + offset, target, maxAdd, maxDepth, curDepth)
я думаю, что это не имеет никакого эффекта, некоторые говорят мне, что увеличение глубины, но я не мог видеть точку от увеличения адреса, потому что первая функция (pointerScan) перебирает все адреса, которыевыровнять в 4 байта