![]() |
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:
----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 31 декабря 2018 12:07 · Личное сообщение · #5 ClockMan Это тоже не красиво. А если нужно куда длинее макро вставить ? Нужно переместить всю процедуру, так как в ней могут быть релатив ветвления/циклы. Что вы в таком случае сделаете ? Добавлено спустя 19 минут Пример. ![]() ![]() ----- 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 написать новое слишком дорого и хлопотно необходимо найти другие возможности для решения задачи без использования программы к примеру хочется поиграть в фифа игра стоит денег денег нет ломать долго и дорого решение, пройтись по спорт площадкам где играют в футбол и присоединится к игре ![]() |
|
Создано: 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 |