eXeL@B —› Вопросы новичков —› Вопрос по изменению вывода функции через OllyDBG |
Посл.ответ | Сообщение |
|
Создано: 31 декабря 2018 03:09 · Поправил: Gveon · Личное сообщение · #1 Доброго дня. Помогите разобраться, пожалуйста. Копаю программу, в которой есть такая функция (как ее видит OllyDBG): Code:
Мне нужно сделать так, чтобы она всегда возвращала значение 3. К сожалению, с патчингом бинарников, в отличие от .NET, я не очень знаком. Попробовал сделать так: Code:
После такого "патчинга" программа крэшится. Если открыть исходный exe в IDA и проделать те же изменения через Edit -> Patch Program, IDA начинает ругаться "endp ; sp-analysis failed". Я понимаю что делаю какую-то очень банальную ошибку, но пока не хватает познаний разобраться, что не так. Подскажите, пожалуйста, как правильно изменить этот код, чтобы получать на выходе нужное мне значение. Спасибо. |
|
Создано: 31 декабря 2018 03:42 · Личное сообщение · #2 |
|
Создано: 31 декабря 2018 04:03 · Личное сообщение · #3 |
|
Создано: 31 декабря 2018 04:12 · Личное сообщение · #4 как же смешно смотреть когда пишут Code:
когда можно красиво сделать Code:
----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: plutos |
|
Создано: 31 декабря 2018 12:07 · Личное сообщение · #5 ClockMan Это тоже не красиво. А если нужно куда длинее макро вставить ? Нужно переместить всю процедуру, так как в ней могут быть релатив ветвления/циклы. Что вы в таком случае сделаете ? Добавлено спустя 19 минут Пример. cfe1_31.12.2018_EXELAB.rU.tgz - move.7z ----- vx |
|
Создано: 31 декабря 2018 14:54 · Личное сообщение · #6 |
|
Создано: 31 декабря 2018 15:01 · Поправил: difexacaw · Личное сообщение · #7 Vamit Точно, вот только это невозможно для отдельно взятой процедуры как и обычно для целого апп; данные не отличимы от кода. Нельзя определить лимиты в условных конструкциях. Пересборка кода покрывает все задачи такого рода. Штатно бинарный код описывается графом, изменяется и билдится. Это всегда замечательно работало, только так выполняется любой патч. ----- vx |
|
Создано: 31 декабря 2018 15:24 · Поправил: ClockMan · Личное сообщение · #8 Vamit пишет: Изменять исполняемый код - это тоже некрасиво, нужно декомпилировать приложение в исходный код, на котором оно написано, внести нужные изменения, скомпилировать и получить что требуется Конечно когда мне нужно взломать программу я сначало её декомпелирую а потом собираю обратно очень удобно кстати ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 31 декабря 2018 17:12 · Личное сообщение · #9 |
|
Создано: 31 декабря 2018 17:19 · Личное сообщение · #10 написать новое слишком дорого и хлопотно необходимо найти другие возможности для решения задачи без использования программы к примеру хочется поиграть в фифа игра стоит денег денег нет ломать долго и дорого решение, пройтись по спорт площадкам где играют в футбол и присоединится к игре | Сообщение посчитали полезным: plutos, ClockMan |
|
Создано: 01 января 2019 03:34 · Личное сообщение · #11 |
|
Создано: 01 января 2019 03:38 · Личное сообщение · #12 |
|
Создано: 01 января 2019 10:43 · Поправил: Kindly · Личное сообщение · #13 Gveon, обычно пишут в самом начале, но иногда проге нужно пройти всю процедуру, тогда в конце писать надо и RETN нужно перезаписывать, если место снизу позволяет ее восстановить обратно. Судя по коду, тебе лучше бы патчить функцию в CALL client.0045EC50, она там явно записывает нужное значение и выводит его в DWORD PTR SS:[ESP+8], и это значение может вызываться из этой ячейки прогой повторно в другом месте. Так что лучше перестраховаться и писать именно в ячейку там, где это должно писаться, а то с виду ты не там патчишь. ----- Array[Login..Logout] of Life |
|
Создано: 01 января 2019 16:41 · Личное сообщение · #14 |
eXeL@B —› Вопросы новичков —› Вопрос по изменению вывода функции через OllyDBG |