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

Не получается найти нужный указатель


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

Здравствуйте,

Использую CE, нахожу нужное значение тип double.

Оно в динамической памяти, поэтому пытаюсь найти указатель.

Пытался использовать search pointer нашел очень много указателей, но все они отсеялись.

Поставил брейк поинт на запись, вот что он нашел

704b2960ab6837951ae810eaa50207d5.jpeg

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

Пытался использовать ReClass - но он не работает с double и показывает что-то непонятное.

Игра написана на смеси c++ и java

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

fstp qword ptr [edi+18] - найдено по брей поинту на запись.

если вручную писать в значение то норм, запускаю скрипт ничего не происходит

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(originalcode)

label(exit)

aobscan(obs,DD 5F 18 8B 4E 0C 8B 73 0C 51 56 B8 D8 D7 F5 08)

newmem: //this is allocated memory, you have read,write,execute access

//place your code here

mov [edi+18],(double)7000.0

originalcode:

fstp qword ptr [edi+18]

mov ecx,[esi+0C]

exit:

jmp returnhere

obs:

01B14589:

jmp newmem

nop

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

dealloc(newmem)

01B14589:

fstp qword ptr [edi+18]

mov ecx,[esi+0C]

//Alt: db DD 5F 18 8B 4E 0C

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

Попробуй так

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(cheat)

registersymbol(cheat)

aobscan(aob_scan,DD 5F 18 8B 4E 0C 8B 73 0C 51 56 B8 D8 D7 F5 08)

newmem:

fstp qword ptr [edi+18]

mov qword ptr [edi+18],(double)7000.0

mov ecx,[esi+0C]

jmp returnhere

aob_scan:

cheat:

jmp newmem

nop

returnhere:

[DISABLE]

cheat:

fstp qword ptr [edi+18]

mov ecx,[esi+0C]

unregistersymbol(cheat)

dealloc(newmem)

//Alt: db DD 5F 18 8B 4E 0C

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

Tiger

Ругался на лейбел, поправил немного скрипт

Теперь говорит что не может скомпилировать это

mov qword ptr [edi+18],(double)7000.0

Хотя у меня норм компилило такое (double)7000.0

Честно, хз как правильно double в hex переводить.

У меня вот что получилось 40BB580000000000, но все равно ругается на данную инструкцию

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(cheat)

registersymbol(cheat)

aobscan(aob_scan,DD 5F 18 8B 4E 0C 8B 73 0C 51 56 B8 D8 D7 F5 08)

newmem:

fstp qword ptr [edi+18]

mov qword ptr [edi+18],(double)7000.0 // or 0x40BB580000000000

mov ecx,[esi+0C]

jmp returnhere

aob_scan:

cheat:

jmp newmem

nop

returnhere:

[DISABLE]

fstp qword ptr [edi+18]

mov ecx,[esi+0C]

unregistersymbol(cheat)

dealloc(newmem)

//Alt: db DD 5F 18 8B 4E 0C

Это ты так жизнь героя увиличивал?

Нет, это координата Z, по сути высота

Как игра называется?

это корпоративная игрушка, без названия

В программированиия я не новичек, но с реверсингом второй день пытаюсь разобраться. АСМ знаю на уровне атмеловских контроллеров )

Вполне мог что-то напутать.

Голова уже кипит.

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

убери :) qword ptr

поставь как компилится

mov [edi+18],(double)7000.0

или

mov [edi+18],0x40BB580000000000

смысл в том чтобы после выталкивания результата операций в память по адресу [edi+18], присвоить ей требуемое значение

PS

http://forum.gamehac...dpost__p__13703

после

[DISABLE]

cheat: <- верни на место


проверь чтобы в скрипте перед операторами не скопипастилось c форума <br>
Ссылка на комментарий
Поделиться на другие сайты

Вобщем, все скомпилилось, спасибо!

но не работает ) Просто ничего не происходит.

Я ещё раз нашел нужное значение, сделал скрипт на с помощью автоассамблера, пока без aob

И все равно, скрипт просто не работает. (включаю его через таблицу заморозкой)



[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
fstp qword ptr [edi+18]
mov [edi+18],(double)7000.0
mov ecx,[esi+0C]

exit:
jmp returnhere

01B133C9:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
01B133C9:
fstp qword ptr [edi+18]
mov ecx,[esi+0C]
//Alt: db DD 5F 18 8B 4E 0C

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

Попробуй так


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(cheatByteCode)
label(QWordValue)

newmem:
//.... нули
newmem + 64: // адрес должен быть кратен 64 байтам (хотя может быть я путаю, пишу на всякий случай)
QWordValue:
dq (double)7000

cheatByteCode:
fstp qword ptr [edi+18]
mov ecx,[esi+0C]

fld qword ptr [QWordValue]
fstp qword ptr [edi+18]
jmp returnhere

01B133C9:
jmp cheatByteCode
nop
returnhere:

[DISABLE]
01B133C9:
fstp qword ptr [edi+18]
mov ecx,[esi+0C]

dealloc(newmem)

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

Действительно работает! Спасибо огромное.

Правда работает не совсем так - камера игрока сдвигается чуть выше "модели игрока"

Осталось только разобраться, как работает код и возможно немного скорректировать )

Я так понимаю DQ преобразует (double)7000 в HEX 8байт

далее вынимаем из стека st(0) в edi+18 (некий m32real, я так понимаю это что-то вроде sram)

далее что-то читаем из [esi+0C] в ecx

далее кладем в стек QWordValue

и сразу же вынимае это значение в [edi+18]

тоесть получается некий эквивалент mov [edi+18],[QWordValue] // хз так можно вобще? )

и я так понимаю в ecx попадает неверное значение? (точнее не производное от фейкового)

Не знаю, корректно ли в этой теме переходить на обсуждение асма и логики скрипта. Извините если что.

Пытаюсь разобраться с масмом.

Вобщем что хочу получить:

Трейнер и две кнопки "+" = прибавляет 1000 " - "= вычетает 1000

соотв. пытался сделать что-то вроде


QWordValue:
dq (double)1000

cheatByteCode:
fadd qword ptr [QWordValue]
fstp qword ptr [edi+18]
mov ecx,[esi+0C]

но разумеется такое не работает, ибо каждую итерацию прибавляется 1000.

тоесть мне нужно в асме нужно сделать флаг, выполнить один раз код, уставновить флаг,

как то отслеживать "отпускание" кнопки в трейнере и по событию сбрасывать этот флаг.

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

Что именно попадает в ecx надо смотреть при пошаговой отладке. Скорее всего, на задуманный чит это не как не влиенят - в ecx попадает адрес на некоторую структуру, с которой будет работать оригинальный код следующий далее.

По поводу работы с FPU. У FPU множество команд с разными типами данных. Если задать гуглю поисковый запрос "FLD ST(0)", то можно найти множество справочных материалов в том числе и на русском. Сайт1, Сайт2 Так же у нас на форуме "Быстрая информация" есть справка по FPU-набору команд и другим командам. Наиболее полная документация скорее где-то на сайте комании Intel.

Отдельного внимание стоит программирование на VS C++ с просмотром в отладчике. Можно писать простые консольные программы например по работе с double числами (сравнение, вычитаение, умножения и т.п.) и видеть в отладчике как выглядит ассемблерный код (обращение к адресам, к регистрам CPU, FPU и т.п.)

post-3-0-37358200-1365510840_thumb.png

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

×
×
  • Создать...

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

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