• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Поиск абсолютного адреса переменной

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
20 Дек 2024
Сообщения
17
Реакции
3
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Моя задача – найти абсолютный адрес локальной переменной «х» функции main() без использования утилит на подобии CheatEngine и отладки.

Метод поиска: статический анализ через IDA

Псевдокод программы:
C++:
Expand Collapse Copy
int main() {
    int x = 0;
    while(true) {
      ++x;
    }
}

На текущий момент моих знаний хватает только на то, чтобы сказать следующее:
  1. Локальная переменная Х хранится на стеке в сегменте .text
  2. Я вижу, что программа выделяет (условно) 0х30 байт для хранения данных на стеке, условный asm: sub rsp, 0x30
  3. Вижу инструкцию инкрементирования (допустим переменная в rax регистре): inc rax
  4. Нахожу смещение переменной относительно стека с помощью этой инструкции: mov [rsp-0x8], rax Смещением является -0х8 от указателя на стек
Я написал kernel драйвер для изменения и чтения памяти (KeStackAttachProcess), а так же, я получил базовый адрес процесса.

Объясните как выйти на переменную, используя только статический анализ. В случае, если это сделать нельзя, расскажите другой способ. Спасибо
 
так ты только со статик класса оффсет на переменую сможешь найти а со стека то нормально и быстро не получишь разве что jmp на свою функцию после inc rax но всё равно это тупая идея, вообще через cheat engine можешь найти где хранится она в памяти вроде как, чисто стало значение 1 поставил поиск потом стало 2 отсев и сё но это не точно
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
так ты только со статик класса оффсет на переменую сможешь найти а со стека то нормально и быстро не получишь разве что jmp на свою функцию после inc rax но всё равно это тупая идея, вообще через cheat engine можешь найти где хранится она в памяти вроде как, чисто стало значение 1 поставил поиск потом стало 2 отсев и сё но это не точно
Раз память существует, значит на нее можно выйти. Все зависит от подхода к тому как это сделать. Я специально спросил про статический анализ, так как через CE это делается легко. На данный момент, пока кто-то из форумчанинов не опроверг мое мнение, я убежден что через статический анализ можно чего-то добиться, возможно, при других условиях (я про рандомизацию адресного пространства) или шага в другом направлении. Жду дальнейших знатоков
 
Раз память существует, значит на нее можно выйти

Кроме CE нормально ты оффсет не получишь, сколько бы ты память не копал всё равно стековые переменные остаются в памяти но вопрос времени когда в эту же память запишут другие левые значения, стек это временно хранилище скажем так вопрос когда туда перезапишут другие значения с других функций да и у стека при компиляции есть максимальный размер выделения об этом знает компилятор и может вывести тебе предупреждение, это то что я помню вроде как
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кроме CE нормально ты оффсет не получишь, сколько бы ты память не копал всё равно стековые переменные остаются в памяти но вопрос времени когда в эту же память запишут другие левые значения, стек это временно хранилище скажем так вопрос когда туда перезапишут другие значения с других функций да и у стека при компиляции есть максимальный размер выделения об этом знает компилятор и может вывести тебе предупреждение, это то что я помню вроде как
Как тогда поступают разработчики, если, допустим, игра не дает подключиться с помощью СЕ к своему процессу?
 
Как тогда поступают разработчики, если, допустим, игра не дает подключиться с помощью СЕ к своему процессу?

Смотря на каком движке игра сделана а далее гугл и дампить как угодно (например через уязвимые драйвера где можно с помощью их читать память) либо просто статически загружать модули игры в ida или dnspy и т. д. и искать что нужно, либо в меню игры отключать как угодно драйвер/защиту и прочее что бы получить доступ какой либо, потому что в игре уже просто выкинет как обычно это и происходит если без защиты
 
Назад
Сверху Снизу