Перейти к содержанию

Поиск статического указателя в игре


Рекомендуемые сообщения

2 минуты назад, Garik66 сказал:

Скрипт 2 ?

Скрипт 3 ну второй тож норм отработал. 

Изменено пользователем NickSpirit
Ссылка на комментарий
Поделиться на другие сайты

47 минуты назад, Garik66 сказал:

Кстати видно, где проверка значения идёт. Если сработает скрипт, который я  напишу, то объясню где она.

Обещанное объяснение:

1. Обратите внимание на эти 3 строчки кода:

"FClient.exe"+151F32: D9 45 F4           -  fld dword ptr [ebp-0C]
"FClient.exe"+151F35: D9 57 70           -  fst dword ptr [edi+70]
// ---------- DONE INJECTING  ----------
"FClient.exe"+151F38: D9 5F 6C           -  fstp dword ptr [edi+6C]

2. Из [ebp-0C] идёт выгрузка значения в FPU регистр. Кстати значения у Вас в игре во float.

3. И оно выгружаются в два соседних адреса [edi+70] и [edi+6C].

4. [edi+6C] - это наш адрес.

5. А [edi+70] - я думаю это контрольный адрес.

Т.е. скорее всего, где то дальше по коду игры идёт проверка - а равно ли значение в адресах [edi+70] и [edi+6C] и, если не равно, то вылет.

 

Так что потестите ещё и Скрипт 2 и Скрипт 3.

Скорее всего при активном Скрипт 2 через некоторое время произойдёт вылет.

А на Скрипт 3 вылета не должно быть. 

Ссылка на комментарий
Поделиться на другие сайты

Вылет вылетом...только мне этот скрипт нужен не для того чтобы что-то писать в память. мне важно просто иметь адрес который я потом просто буду читать в боте. Так что по идее - вылета не должно быть. 

 

Скрипты поюзаю. 

 

Ну вроде как второй скрипт вылета не вызывает пока. 

Изменено пользователем NickSpirit
Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, NickSpirit сказал:

Ну правда я не понял что они делают)))

Всё просто, поясню:

У Вас на видео значение в адресе, который Вы нашли вручную было в DEC -  1102577664, что в Hex -  41B80000 или во float - 23.

Так вот я в скрипте просто записываю это значение:

в Скрипт 3:

mov dword ptr [ebp-0C],(float)23

и в Скрипт 2:

mov [edi+6C],41B80000

 

Ссылка на комментарий
Поделиться на другие сайты

Только что, NickSpirit сказал:

Скрипт 2 не активируется. Скрипт 3 работает.

Скрипт 3 более правильный, хотя опять странно - почему не активируется Скрипт 2 - должен.

Ссылка на комментарий
Поделиться на другие сайты

35 минуты назад, Garik66 сказал:

Скрипт 3 более правильный

Хм...щас буду пытаться значение [ebp-0C] куда нить в известное место засовывать. думаю так прокатит. 

Ссылка на комментарий
Поделиться на другие сайты

Только что, NickSpirit сказал:

Хм...щас буду пытаться значение [ebp-0C] куда нить в известное место засовывать. думаю так прокатит. 

Так это же просто мы это уже делали в первом скрипте, сейчас сделаю Скрипт 4 и выложу таблицу.

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Garik66 сказал:

Так это же просто мы это уже делали в первом скрипте, сейчас сделаю Скрипт 4 и выложу таблицу.

Это да, я уже сделал. Щас буду пробовать. Ой, чет напрямую не дает копирнуть. Надо через что-то.

Изменено пользователем NickSpirit
Ссылка на комментарий
Поделиться на другие сайты

Опа...вроде прокатило. Только я строчку про mov float 23 стер. дабы ничего не писать в память.

 

 Щас адрес ручками найду - и буду сверять те ли данные мы получаем.

Изменено пользователем NickSpirit
Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Garik66 сказал:

Опять же - зачем ручками? Есть же инструкция.

Точно!))) обалдеть) я чет и не подумал что теперь можно так адрес находить...

Ссылка на комментарий
Поделиться на другие сайты

1. Перейдите в "Отладчик" или "Редактор памяти".

2. Перейдите на Вашу инструкцию 

"FClient.exe"+151F38: D9 5F 6C           -  fstp dword ptr [edi+6C]

я уже описывал, ка это делать ранее.

3. ПКМ по инструкции "Найти адреса к которым обращается инструкция".

4. В новом окне будет Ваш адрес.

Ссылка на комментарий
Поделиться на другие сайты

Вообщем вот рабочий вариант скрипта! 

 

Скрытый текст

[ENABLE]
registersymbol(myAddr)
alloc(newmem,64)
alloc(myAddr,4)
label(returnhere)
newmem:
fstp dword ptr [edi+6C] // Оригинальный код игры
lea ebx,[edi+6C]        // Загружаем в EAX адрес EDI+6C
mov [myAddr],ebx        // Сохраняем адрес в myAddr, скопировав его из EAX
pop esi
pop ebx
jmp returnhere
"FClient.exe"+151F38:
jmp newmem
returnhere:
[DISABLE]
"FClient.exe"+151F38:
db D9 5F 6C 5E 5B
dealloc(newmem)
dealloc(myAddr)
unregistersymbol(myAddr)

 

Как дошел до такого)) - 1) сначала перенес мои действия после оригинальной инструкции. Игра вылетала. 2) А потом заметил одну малость и добавил строчку dealloc(myAddr) которой не было - и ведь заработало!!! P.S. в комментах к скрипту от Keng - регистр EAX - c ним не пошло почему то. Пошло с EBX.

Изменено пользователем NickSpirit
Ссылка на комментарий
Поделиться на другие сайты

39 минуты назад, NickSpirit сказал:

добавил строчку dealloc(myAddr)

А для чего вообще нужно было выделять отдельную память.

Сделали бы просто так:

Скрытый текст

[ENABLE]
registersymbol(myAddr)
alloc(newmem,64)
label(myAddr)
label(returnhere)


newmem:
fstp dword ptr [edi+6C] // Оригинальный код игры
lea ebx,[edi+6C]        // Загружаем в ebx адрес EDI+6C
mov [myAddr],ebx        // Сохраняем адрес в myAddr, скопировав его из EAX
pop esi
pop ebx
jmp returnhere

myAddr:
dd 0

"FClient.exe"+151F38:
jmp newmem
returnhere:

[DISABLE]
"FClient.exe"+151F38:
db D9 5F 6C 5E 5B

unregistersymbol(myAddr)
dealloc(newmem)
 

 

И не нужно тогда строки dealloc(myAddr)

Зы: Вернул назад - не обратил внимание, что keng делал скрипт без аобскана.

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

  • keng закрыл тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.