Сейчас на форуме: Adler, asfa, bartolomeo (+8 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Компиляция куска asm кода с последующей вставкой в exe |
Посл.ответ | Сообщение |
|
Создано: 14 июня 2012 16:05 · Личное сообщение · #1 Всем доброго времени суток! Столкнулся со следующим заданием. Имеется два exe файла разных версий. exe первой версии уже пропатчен(имеется и оригинальный первой версии). exe второй версии чист. Необходимо перенести патч с первой версии на вторую. Немного поработав: Собрал все адреса заменяемых байт в первой версии. (4 байта заменено),(41 дописано в пустую область). Сравнил оригиналы первой версии и второй версии - адреса и сами значения частично различаются. После перевода обеих файлов в asm через IDA стало ясно, что процедуры различаются лишь разными адресами и адресами следующих переходов (jmp). Перевел в asm так же пропатченный exe(первой версии который). (4 байта) - ссылка на действия (41 байта) - которые после отсылаются на адрес последующий 4 байтам(после них). Я переписал часть кода(где 4 байта) под новую версию(сменил адрес, так как пустая область смещена в новой версии), и (41 байт) - в новой версии тоже переписал пару ссылок, так как их адреса были смещены в новой версии. По сути, код сам адаптирован и готов для работы в новой версии. Но вот я никогда раньше не работал со вставками в готовый код. Как мне получить из первой части кода - 4 байта и из второй части кода - 41 байт. Может нужно выделить необходимую часть, сохранить в asm... а дальше? Заранее спасибо! ![]() |
|
Создано: 14 июня 2012 16:10 · Поправил: schokk_m4ks1k · Личное сообщение · #2 |
|
Создано: 14 июня 2012 16:20 · Поправил: Vovan666 · Личное сообщение · #3 schokk_m4ks1k пишет: попробуй сделать Search and Replace Patch со смещением байт! может поможет) чё за бред. Fileschokk_m4ks1k пишет: залей два файла и выложи сюда или в личку кинь! Задолбал уже своими "выложи", один хрен не поможешь! Да и человеку больше теория нужна. Firex4 берешь OllyDbg и в ней пишешь свой код. после чего пкм->Copy to Executable->All Modifications->пкм-Save File Если код уже написан, то поможет плагин Multilmate Assembler. Так же любители досовских мордочек используют Hiew. ![]() |
|
Создано: 14 июня 2012 17:19 · Поправил: Firex4 · Личное сообщение · #4 Vovan666, Не могу я разобраться в интерфейсе OllyDbg ![]() Установил плагин, открываю свой exe, открываю плагин Multilmate Assembler, вставляю в него измененный код с IDA, жму Assemble - результата нет, лишь ошибка(ожидался адрес). Вот код с IDA: Code:
00468700 - 00468704 - измененный код, который должен быть равным 4 байта. Как это дело правильно подгрузить в Multilmate Assembler? P.S. Также чувствую я, что заменить придется не 4 байта, а около 5. Пришлось добавить метку loc_468705, а в дефолтном коде последующий код начинался вроде как с 468704. ![]() |
|
Создано: 14 июня 2012 17:26 · Поправил: hlmadip · Личное сообщение · #5 как я понимаю, адреса уже адаптированны под непатченный exe. Тогда грузишь в Olly свой exe, вбиваешь ручками это Code:
Проходишь по адресу джампа, ручками вбиваешь необходимый код, а потом Vovan666 пишет: после чего пкм->Copy to Executable->All Modifications->пкм-Save File ![]() |
|
Создано: 14 июня 2012 19:34 · Личное сообщение · #6 hlmadip, Сделал все как и сказали, но выходит небольшая помеха. Во первых - работы exe нарушается. Во вторых - при открытии exe в IDA замененные куски куда имеют немного другой вид. Вот примеры: v1.0 Первый кусок(4 байта). Code:
Второй кусок(41 байт). Code:
v2.0(после моих вставок) Вставлял построчно. Первый кусок кода(4 байта). Code:
Прошу заметить, метка loc_468705 - отсутствует, а идет продолжение кода(в отличии от v1.0 - там метка есть, на которую потом и возвращается). Второй кусок кода(41 байт). Code:
Тут по сути различий нет. P.S. Может я что нибудь опять забыл? заранее спасибо. ![]() |
|
Создано: 14 июня 2012 19:42 · Поправил: Vintersorg · Личное сообщение · #7 Code:
разве не на 468705 переход должен быть? Кстати, я для вставки своего кода в экзешники использую FASM с макросами Grom PE. Крайне удобно даже для очень больших вставок. Рекомендую. http://board.flatassembler.net/topic.php?t=8876 http://board.flatassembler.net/topic.php?t=8744 ![]() |
|
Создано: 14 июня 2012 19:48 · Личное сообщение · #8 |
|
Создано: 14 июня 2012 19:52 · Личное сообщение · #9 Было бы неплохо сами файлы увидеть, а то я что-то запутался ![]() Не правильно я посоветовал. .text:00468700 jmp sub_690430 ведет к отдельной процедуре, никак не связанной с text:00468705 loc_468705: Поэтому вопервых меняете в оригинальном exe этот переход: .text:00468700 jmp sub_690430 Потом ищете, где должна быть процедура text:00468705 loc_468705: и меняете её в соответствии с вашим патчем ![]() |
|
Создано: 14 июня 2012 19:55 · Личное сообщение · #10 hlmadip, Там получается интересная вещь. Самой таковой процедуры в оригинале text:00468705 loc_468705 нету. Строка jmp sub_690430 заменяет некоторую функцию и ведет к дописанной процедуре, которая в свою очередь выполняет замененное действие и выполняет еще несколько, а затем вызывает процедуру, которая должна была образоваться сразу за окончанием вызывающей. Подправил адрес, пойду проверю :3 ![]() |
|
Создано: 14 июня 2012 20:02 · Поправил: hlmadip · Личное сообщение · #11 |
|
Создано: 14 июня 2012 20:33 · Поправил: Firex4 · Личное сообщение · #12 hlmadip, В результате все получилось верно, в IDA код идентичен(конечно за исключением адресов). Но есть пару вопросов: 1)Почему в первом exe IDA добавляет этот комментарий, а у меня нет: Code:
2) За что отвечает в OllyDbg(asm)(вторая функция(41 байт)) эта строка? Ничего случаем в ней портировать не нужно было? Code:
![]() |
|
Создано: 14 июня 2012 20:36 · Поправил: hlmadip · Личное сообщение · #13 первый вопрос - не знаю в случае MOV EAX,DWORD PTR DS:[8F3D8C], это пересылка dword'а лежащего по адресу 8F3D8C в eax Для разъяснений комманд ассемблера пользуйся гуглом ![]() |
|
Создано: 14 июня 2012 20:49 · Личное сообщение · #14 |
|
Создано: 15 июня 2012 15:21 · Поправил: Firex4 · Личное сообщение · #15 hlmadip, Спасибо большое! Буду корректировать адрес, хотя по правде говоря не могу понять, где его искать. Смещение около 40 байтов, метод тыка надеюсь выручит ;3 P.S. Это случайно не оно? Code:
Так в том и проблема, что адреса 8F3D8C не существует в помине, границы кода - 68F129, после этого ничего нет. ![]() |
|
Создано: 15 июня 2012 15:57 · Личное сообщение · #16 Да какие нахрен смещения, школьник херню написал, а ты и повелся. Открываешь старый файл в olly, Search for->All constants->8F3D8C, найдутся все ссылки на 8F3D8C. После чего смотришь их и ищешь похожий код в новом файле. ![]() |
|
Создано: 16 июня 2012 01:09 · Личное сообщение · #17 |
![]() |
eXeL@B —› Вопросы новичков —› Компиляция куска asm кода с последующей вставкой в exe |