CTIGRA Опубликовано 8 апреля, 2013 Поделиться Опубликовано 8 апреля, 2013 Здравствуйте,Использую CE, нахожу нужное значение тип double.Оно в динамической памяти, поэтому пытаюсь найти указатель.Пытался использовать search pointer нашел очень много указателей, но все они отсеялись.Поставил брейк поинт на запись, вот что он нашел пытался делать автоассемблей, по примеру. Тоже ничего не вышло.Пытался использовать ReClass - но он не работает с double и показывает что-то непонятное.Игра написана на смеси c++ и java Ссылка на комментарий Поделиться на другие сайты Поделиться
CTIGRA Опубликовано 8 апреля, 2013 Автор Поделиться Опубликовано 8 апреля, 2013 fstp qword ptr [edi+18] - найдено по брей поинту на запись.если вручную писать в значение то норм, запускаю скрипт ничего не происходит[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048) //2kb should be enoughlabel(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 heremov [edi+18],(double)7000.0originalcode:fstp qword ptr [edi+18]mov ecx,[esi+0C]exit:jmp returnhereobs:01B14589:jmp newmemnopreturnhere:[DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)01B14589:fstp qword ptr [edi+18]mov ecx,[esi+0C]//Alt: db DD 5F 18 8B 4E 0C Ссылка на комментарий Поделиться на другие сайты Поделиться
Tiger Опубликовано 8 апреля, 2013 Поделиться Опубликовано 8 апреля, 2013 Попробуй так[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.0mov ecx,[esi+0C]jmp returnhereaob_scan:cheat:jmp newmemnopreturnhere:[DISABLE]cheat:fstp qword ptr [edi+18]mov ecx,[esi+0C]unregistersymbol(cheat)dealloc(newmem)//Alt: db DD 5F 18 8B 4E 0C Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 8 апреля, 2013 Поделиться Опубликовано 8 апреля, 2013 mov [edi+18],(double)7000.0Это ты так жизнь героя увиличивал?Как игра называется? Ссылка на комментарий Поделиться на другие сайты Поделиться
CTIGRA Опубликовано 8 апреля, 2013 Автор Поделиться Опубликовано 8 апреля, 2013 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 0x40BB580000000000mov ecx,[esi+0C]jmp returnhereaob_scan:cheat:jmp newmemnopreturnhere:[DISABLE]fstp qword ptr [edi+18]mov ecx,[esi+0C]unregistersymbol(cheat)dealloc(newmem)//Alt: db DD 5F 18 8B 4E 0CЭто ты так жизнь героя увиличивал?Нет, это координата Z, по сути высотаКак игра называется?это корпоративная игрушка, без названияВ программированиия я не новичек, но с реверсингом второй день пытаюсь разобраться. АСМ знаю на уровне атмеловских контроллеров )Вполне мог что-то напутать.Голова уже кипит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Tiger Опубликовано 8 апреля, 2013 Поделиться Опубликовано 8 апреля, 2013 убери qword ptrпоставь как компилитсяmov [edi+18],(double)7000.0илиmov [edi+18],0x40BB580000000000смысл в том чтобы после выталкивания результата операций в память по адресу [edi+18], присвоить ей требуемое значениеPShttp://forum.gamehac...dpost__p__13703после[DISABLE]cheat: <- верни на местопроверь чтобы в скрипте перед операторами не скопипастилось c форума <br> Ссылка на комментарий Поделиться на другие сайты Поделиться
CTIGRA Опубликовано 8 апреля, 2013 Автор Поделиться Опубликовано 8 апреля, 2013 Вобщем, все скомпилилось, спасибо!но не работает ) Просто ничего не происходит.Я ещё раз нашел нужное значение, сделал скрипт на с помощью автоассамблера, пока без aobИ все равно, скрипт просто не работает. (включаю его через таблицу заморозкой)[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048) //2kb should be enoughlabel(returnhere)label(originalcode)label(exit)newmem: //this is allocated memory, you have read,write,execute access//place your code hereoriginalcode:fstp qword ptr [edi+18]mov [edi+18],(double)7000.0mov ecx,[esi+0C]exit:jmp returnhere01B133C9:jmp newmemnopreturnhere:[DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)01B133C9:fstp qword ptr [edi+18]mov ecx,[esi+0C]//Alt: db DD 5F 18 8B 4E 0C Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 9 апреля, 2013 Поделиться Опубликовано 9 апреля, 2013 Попробуй так[ENABLE]alloc(newmem,2048)label(returnhere)label(cheatByteCode)label(QWordValue)newmem://.... нулиnewmem + 64: // адрес должен быть кратен 64 байтам (хотя может быть я путаю, пишу на всякий случай)QWordValue:dq (double)7000cheatByteCode:fstp qword ptr [edi+18]mov ecx,[esi+0C]fld qword ptr [QWordValue]fstp qword ptr [edi+18]jmp returnhere01B133C9:jmp cheatByteCodenopreturnhere:[DISABLE]01B133C9:fstp qword ptr [edi+18]mov ecx,[esi+0C]dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
CTIGRA Опубликовано 9 апреля, 2013 Автор Поделиться Опубликовано 9 апреля, 2013 Действительно работает! Спасибо огромное.Правда работает не совсем так - камера игрока сдвигается чуть выше "модели игрока"Осталось только разобраться, как работает код и возможно немного скорректировать )Я так понимаю 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)1000cheatByteCode:fadd qword ptr [QWordValue]fstp qword ptr [edi+18]mov ecx,[esi+0C]но разумеется такое не работает, ибо каждую итерацию прибавляется 1000.тоесть мне нужно в асме нужно сделать флаг, выполнить один раз код, уставновить флаг, как то отслеживать "отпускание" кнопки в трейнере и по событию сбрасывать этот флаг. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 9 апреля, 2013 Поделиться Опубликовано 9 апреля, 2013 Что именно попадает в ecx надо смотреть при пошаговой отладке. Скорее всего, на задуманный чит это не как не влиенят - в ecx попадает адрес на некоторую структуру, с которой будет работать оригинальный код следующий далее.По поводу работы с FPU. У FPU множество команд с разными типами данных. Если задать гуглю поисковый запрос "FLD ST(0)", то можно найти множество справочных материалов в том числе и на русском. Сайт1, Сайт2 Так же у нас на форуме "Быстрая информация" есть справка по FPU-набору команд и другим командам. Наиболее полная документация скорее где-то на сайте комании Intel.Отдельного внимание стоит программирование на VS C++ с просмотром в отладчике. Можно писать простые консольные программы например по работе с double числами (сравнение, вычитаение, умножения и т.п.) и видеть в отладчике как выглядит ассемблерный код (обращение к адресам, к регистрам CPU, FPU и т.п.) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения