Гость Опубликовано 4 июня, 2014 Поделиться Опубликовано 4 июня, 2014 Всем доброго времени.В последнее время начал натыкаться все чаще на инструкцию такого типа: movss [NNN+NNNNNNNNN],xmm1.Собственно, непонятно, как с этой инструкцией работать?Пытался найти в ассемблере такую команду/функцию - безрезультатно. Хотя, может плохо искал...Попытался самостоятельно разобраться, но все сводится к тому, что игры либо падают с ошибкой, либо инструкция ведет себя как-то неадекватно...Допустим, записал инструкцию так:mov [NNN+NNNNNNNN],100А в игре значение падает до нуля... Но если попробовать записать так:movss [NNN+NNNNNNNN],100То компилятор ругается, что эта инструкция не компилируется.В общем, непонятно...Стоит также упомянуть, что в отладчике по таблице я смотрел и выше, и ниже этой инструкции, и зацепиться не за что...Выше - cvtsi2ss, ниже - repe ret.Может кто подскажет как с этим бороться? Замучился уже, честное слово... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 июня, 2014 Поделиться Опубликовано 4 июня, 2014 Ну, вообще-то можно открыть любой справочник по ассемблеру, например, ТАКА вообще, указанная тобой инструкция пересылает флоат (float) значение из регистра xmm1 в какую-то ячейку памяти. Ссылка на комментарий Поделиться на другие сайты Поделиться
Maxs Опубликовано 4 июня, 2014 Поделиться Опубликовано 4 июня, 2014 Movss - Переслать одиночное короткое вещественное значение.movss [NNN+NNNNNNN],100- ошибочно написано, так как мы не можем писать 100, мы должны взять значение из переменной типо xmm1 esx aex и т.д.я так понимаю она может записывать только значение в переменную из переменной, то есть ты не можешь взять и написать свое значение. ИМХО.Читал тут - Ссылка Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 4 июня, 2014 Поделиться Опубликовано 4 июня, 2014 Xipho, гуглил movss, но тоже находил movs, и думал, что это разные инструкции Maxs, спасибо за разъяснение, линк гляну обязательно. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 5 июня, 2014 Поделиться Опубликовано 5 июня, 2014 Когда не знаешь как делать инъекцию кода в инструкцию, то задай поиск Гуглю как "Cheat Engine movss"--- В 04.06.2014 в 14:52, NullAlex сказал: Допустим, записал инструкцию так:mov [NNN+NNNNNNNN],100А в игре значение падает до нуля...Но если попробовать записать так:movss [NNN+NNNNNNNN],100То компилятор ругается, что эта инструкция не компилируется.Надо писать число с точкой (вещественное). Для этого надо привести целой число к float типу.mov [NNN+NNNNNNNN],(float)100Если вариант выше не работает и действительно нужно править xmm1:push eaxmov eax,(float)100movd xmm1,eaxpop eaxmovss [NNN+NNNNNNNNN],xmm1-------Когда натыкаешься на movss [NNN+NNNNNNNNN],xmm1, то не обязательно именно её править. Можно посмотреть код выше. Увидеть как происходит запись в xmm1. Возможно будут инструкции, которые можно будет править без выделения памяти. Банально даже прыжок поправить или переписать одну или несколько инструкции.А бывает вообще ничего править в коде не надо!1. В игре уже встроены читы, тупо их активировать поставив значение в адрес.2. Вызывать функцию игры с необходимыми параметрами. Так например можно в инвентарь поместить предмет, который не был поднят с земли, но или начистить денег симулировав продажу несуществующей вещи. Т.е. тут код вообще править не надо, только найти его по сигне и прозвонить функцию. Вызов функции примерно так (пример принудительного выстрела.)[ENABLE]alloc(newmem,1024)createthread(newmem)newmem:mov eax, 199CD788 // указатель на структуру данных связанная с игроком, который стреляетcall game_x86_rwdi.dll+4CB1E0 // принудительный выстрелret[DISABLE]dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 5 июня, 2014 Поделиться Опубликовано 5 июня, 2014 В 05.06.2014 в 07:50, MasterGH сказал: 2. Вызывать функцию игры с необходимыми параметрами.Эх... жаль что это практически неосуществимо Мне такое удалось только в одной игре (Cry of Fear) и всё.. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 5 июня, 2014 Поделиться Опубликовано 5 июня, 2014 В 05.06.2014 в 12:09, aliast сказал: Эх... жаль что это практически неосуществимо Мне такое удалось только в одной игре (Cry of Fear) и всё..Напиши в каких играх не получалось. Может быть я попробую сделать.Вообще в теории можно следующее:1. Вызывать функцию, которая увеличивает здоровье (взяв например аптечку)2. Вызывать функцию, которая увеличивает количество денег (например продав что-то)3. Вызывать функцию, которая добавляет в инвентарь предмет4. Вызывать функцию, которая выбрасывает предмет рядом с игрокомПункт 3 аналогичен пункту 4. Единственно, что придется предмет подобрать . Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 5 июня, 2014 Поделиться Опубликовано 5 июня, 2014 MasterGH, ого, большое спасибо за разжевывание! В 05.06.2014 в 07:50, MasterGH сказал: Можно посмотреть код выше. Увидеть как происходит запись в xmm1.Я стараюсь всегда смотреть выше или ниже инструкции, которую показал мне СЕ в отладчике, но в данном случае был полный ступор, т.к. инструкции вообще незнакомые (например pxor, или cvtsi2ss), и все они оперируют с xmm0 и xmm1. По pxor серое вещество, в общем-то, подсказывало, что это родственник "логического исключающего ИЛИ", а по остальному - беда. Так что вот В 05.06.2014 в 07:50, MasterGH сказал: Вызывать функцию игры с необходимыми параметрами.Это для меня еще сложно... Надо ведь знать, какой тип отправлять в функцию? Вдруг там булевое значение, или целочисленное... или строковое - что еще хуже, наверное... Это же все надо как-то в отладчике искать, колдовать... Я так не умею, и даже не представляю КАК это все делается Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 Так как часто смотрят этот топик и тема ещё не закрыта, то для новичков выложу более простое решение:movss [NNN+NNNNNNNNN],xmm1 // Записываем нужное нам значение, после отработки этой инструкцииmov [NNN+NNNNNNNNN],(float)100 // прямо в память [NNN+NNNNNNNNN]. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 В 03.02.2016 в 08:52, Garik66 сказал: mov [NNN+NNNNNNNNN],(float)100 // прямо в память [NNN+NNNNNNNNN].Так может и не работать... Игру месяца два назад давал (манчикин) или как там правильно то Так вот там если данным способом сделать, то не к чему это не приведет. 50 на 50 этот способ прокатит.а в обще тут просто добавляется метка и через неё записывается прямо в xmm1 так же через movss Ну тут можно по разному сделать, самый ходовой вот такой. Показать контент [ENABLE]aobscanmodule(Fuer,amtrucks.exe,F3xxxxxxxxxxxxxxxx0F57xxxxxxxxxxxxxxxxxxxxxxxxxx40xx48xxxxxx48xxxxE8xxxxxxxxF3xxxxxxxxxx48)alloc(newmem,$1000)label(code)label(return)label(Baksi)registersymbol(Baksi)newmem: movss xmm0, [Baksi]code: movss [rax+00000168],xmm0 jmp return Baksi: db (float)100Fuer: jmp newmem nop nop nopreturn:registersymbol(Fuer)[DISABLE]Fuer: db F3 0F 10 80 68 01 00 00unregistersymbol(Baksi)unregistersymbol(Fuer)dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 В 03.02.2016 в 09:26, LIRW сказал: Так может и не работать...просто выбрана не та инструкция, поэтому и не сработало. В 03.02.2016 в 09:26, LIRW сказал: Скрипт примерА в твоём примере нужно было просто указать размерность. Показать контент Если игра ещё есть, и не лень, то можешь проверить мой скрипт - сработает.[ENABLE]aobscanmodule(Fuer,amtrucks.exe,F3xxxxxxxxxxxxxxxx0F57xxxxxxxxxxxxxxxxxxxxxxxxxx40xx48xxxxxx48xxxxE8xxxxxxxxF3xxxxxxxxxx48)alloc(newmem,$1000)label(code)label(return)newmem: code: movss [rax+00000168],xmm0 mov dword ptr [rax+00000168],(float)100 // dword нужно указывать обязательно, думаю знаешь почему jmp returnFuer: jmp newmem nop nop nopreturn:registersymbol(Fuer)[DISABLE]Fuer: db F3 0F 10 80 68 01 00 00unregistersymbol(Fuer)dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 В 03.02.2016 в 09:38, Garik66 сказал: просто выбрана не та инструкция, поэтому и не сработало.Нет у меня игры уже давно. Но такой способ не сработал - скрипт то активировался, но он выполнялся как оригинальный код. Да и какая разница уже - теме то почти два года Блин Игорь - не могу я найти ту игру... Искал щас в запросах её. Я даже не помню, в личке просили или тут на форуме. Просто столько игр бывает за день смотришь, что не упомнишь. Бывает игру смотришь и кажется что прошло после этого дня минимум пол года, а оказывается ты делал к ней что либо - неделю назад. Да ну и ладно - вот ещо из за игры тут писанину разводить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения