dddeamon Опубликовано 19 августа, 2012 Поделиться Опубликовано 19 августа, 2012 Есть вот такой кодmov ecx,[ecx+50]fld dword ptr [esp+08]movsx eax,axfadd dword ptr [ecx+eax*4]lea eax,[ecx+eax*4]fstp dword ptr [eax] <---------------здесь ловится адрес денегret 000CЗначение флоад[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:originalcode:mov dword ptr [eax], {float}100 <--------------------------------добавляем 100fstp dword ptr [eax]ret 000Cexit:jmp returnhere"EMPIRES.EXE"+5E7E0:jmp newmemreturnhere:[DISABLE]fstp dword ptr [eax]на ret значение востанавливается.Как можно ето обойти? Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 19 августа, 2012 Поделиться Опубликовано 19 августа, 2012 Неинформативная тема какая то. Ни пояснения, что за код, ни что обойти. Даю сутки на исправление ситуации, потом закрою тему и пред автору. Ссылка на комментарий Поделиться на другие сайты Поделиться
dddeamon Опубликовано 19 августа, 2012 Автор Поделиться Опубликовано 19 августа, 2012 Нашёл в игре значение дерева.Потом нашёл поинтер.Нашёл функцию где он изменяет значение.вот онаmov ecx,[ecx+50]fld dword ptr [esp+08]movsx eax,axfadd dword ptr [ecx+eax*4]lea eax,[ecx+eax*4]fstp dword ptr [eax] <---------------здесь ловится адрес дереваret 000CХочю сделать чтобы добавлялось дерево на 100 или 1000 большепробывал черезmov ecx,[ecx+50]fld dword ptr [esp+08]movsx eax,axfadd dword ptr [ecx+eax*4]lea eax,[ecx+eax*4]mov dword ptr [eax], {float}100 <--------------------------------добавляем 100fstp dword ptr [eax] <---------------здесь ловится адрес дереваret 000Cвсё работает как обычно.Может быть проблема в ax регистре?Кто может помочь.Функция обрабатывает много параметров. Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 19 августа, 2012 Поделиться Опубликовано 19 августа, 2012 Что делает вот эта инструкция? fadd dword ptr [ecx+eax*4]Что за игра? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 августа, 2012 Поделиться Опубликовано 19 августа, 2012 К первому посту[ENABLE]alloc(newmem,2048) //2kb should be enoughlabel(returnhere)newmem:fstp dword ptr [eax] // выбросить из верхушки FPU стека значение в адрес [eax]mov dword ptr [eax], {float}100 // перезаписать ret 000Cjmp returnhere"EMPIRES.EXE"+5E7E0:jmp newmemreturnhere:[DISABLE]"EMPIRES.EXE"+5E7E0:fstp dword ptr [eax]ret 000C Ссылка на комментарий Поделиться на другие сайты Поделиться
dddeamon Опубликовано 19 августа, 2012 Автор Поделиться Опубликовано 19 августа, 2012 В 19.08.2012 в 12:48, ZOCKIR сказал: Что делает вот эта инструкция? fadd dword ptr [ecx+eax*4]Что за игра?игра: Age of Empires В 19.08.2012 в 12:53, Andrey сказал: К первому посту[ENABLE]alloc(newmem,2048) //2kb should be enoughlabel(returnhere)newmem:fstp dword ptr [eax] // выбросить из верхушки FPU стека значение в адрес [eax]mov dword ptr [eax], {float}100 // перезаписать ret 000Cjmp returnhere"EMPIRES.EXE"+5E7E0:jmp newmemreturnhere:[DISABLE]"EMPIRES.EXE"+5E7E0:fstp dword ptr [eax]ret 000CПопробовал, идет только вот значение сбрасывает на 0.Что делать flot -100? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 августа, 2012 Поделиться Опубликовано 19 августа, 2012 По данной информации ни чем помочь не могу.Могу посоветовать перепроверить скрипты при пошаговой отладке или сделать инъекцию кода в другое место. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 19 августа, 2012 Поделиться Опубликовано 19 августа, 2012 сбрасывает на ноль потому, что должно быть не в фигурных, а в круглых скобках указание типа - (float) 100, а у тебя - {float} 100 написано. Ссылка на комментарий Поделиться на другие сайты Поделиться
dddeamon Опубликовано 19 августа, 2012 Автор Поделиться Опубликовано 19 августа, 2012 В 19.08.2012 в 18:22, Xipho сказал: сбрасывает на ноль потому, что должно быть не в фигурных, а в круглых скобках указание типа - (float) 100, а у тебя - {float} 100 написано.Спасибо помогло. Доетого делал так[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://fadd dword ptr [ecx+eax*4]значение 2fadd dword ptr [ecx+eax*4] //добавляет в 2 раза больше значение = +4fadd dword ptr [ecx+eax*4] //добавляет в 2 раза больше значение = +8lea eax,[ecx+eax*4]exit:jmp returnhere"EMPIRES.EXE"+5E7DA:jmp newmemnopreturnhere:[DISABLE]"EMPIRES.EXE"+5E7DA:fadd dword ptr [ecx+eax*4]lea eax,[ecx+eax*4]А вот и полный код с проверкой на поинтер на дерево и мясо, проверка проходит в одной функции.Игра на немецком языке поетому поинтер может быть другим.[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048) //2kb should be enoughlabel(returnhere)label(holz)label(fleisch)label(exit)newmem:push ebplea ebp, dword ptr [eax]cmp ebp, 0A4C614Cpop ebpje holzpush ebplea ebp, dword ptr [eax]cmp ebp, 0A4C6148pop ebpje fleischjmp returnhereholz:fstp dword ptr [eax]mov dword ptr [eax], (float)5000 // перезаписатьret 000Cjmp exitfleisch:fstp dword ptr [eax]mov dword ptr [eax], (float)5000 // перезаписатьret 000Cjmp exitexit:jmp returnhere"EMPIRES.EXE"+5E7E0:jmp newmemreturnhere:fstp dword ptr [eax]ret 000C[DISABLE]"EMPIRES.EXE"+5E7E0:fstp dword ptr [eax]ret 000C Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 20 августа, 2012 Поделиться Опубликовано 20 августа, 2012 Xipho а ты внимательный нашел сразу ошибки { }. а я не заметил Кстати у Andrey_я код тоже с { } на верное поспешил dddeamon надо за собой убрать мусор (Уничтожить созданную в памяте игры а то будут вылеты ) командой dealloc(newmem)[DISABLE]"EMPIRES.EXE"+5E7E0:fstp dword ptr [eax]ret 000Cdealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
dddeamon Опубликовано 20 августа, 2012 Автор Поделиться Опубликовано 20 августа, 2012 Спасибо за dealloc(newmem). Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 20 августа, 2012 Поделиться Опубликовано 20 августа, 2012 В 20.08.2012 в 02:35, ZOCKIR сказал: Кстати у Andrey_я код тоже с { } на верное поспешил dddeamon надо за собой убрать мусор (Уничтожить созданную в памяте игры а то будут вылеты ) командой dealloc(newmem)Я даже не предполагал, что автор додумается квадратные скобки написать куда ненадо и не получить при этом соответствующей ошибки. А ошибку он написал совсем другую, т.е. скрипт у него якобы успешно скомпилировался. Про dealloc я пропустил признаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
dddeamon Опубликовано 20 августа, 2012 Автор Поделиться Опубликовано 20 августа, 2012 В 20.08.2012 в 08:11, Andrey сказал: Я даже не предполагал, что автор додумается квадратные скобки написать куда ненадо и не получить при этом соответствующей ошибки. А ошибку он написал совсем другую, т.е. скрипт у него якобы успешно скомпилировался.Про dealloc я пропустил признаю.Да успешно скомпилировался. попробуй. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 20 августа, 2012 Поделиться Опубликовано 20 августа, 2012 не квадратные, а фигурные скобки ) Видимо, СЕ считает их комментарием, поэтому пропускает содержимое и компилит нормально. Впрочем, я сам не пробовал, поэтому точно не могу сказать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения