Сейчас на форуме: ==DJ==[ZLO], Magister Yoda (+6 невидимых) |
![]() |
eXeL@B —› Основной форум —› Помогите beginner'у насчет пропатчивания! |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 14 февраля 2005 20:39 · Личное сообщение · #1 Помогите пжалста! Я знаю что многие из вас просто обругают меня за глупые вопросы и скажут поискать ещё на форуме или в FAQ (где я ничего не нашёл) а то и просто закроют тему. Я буду очень рад если это не так. Я не могу понять как мне вписывать в начале процедуры xor eax,eax inc eax ret . Сам смысл понятен, но где это "в начале процедуры"?? И как это начало искать? Я читал это в статьях Fess'а но там толком не написано (ну может просто это я такой тупой - обьясните пожалуйста!). Заранее спасибо!!! ![]() |
|
Создано: 14 февраля 2005 20:42 · Личное сообщение · #2 |
|
Создано: 14 февраля 2005 20:55 · Личное сообщение · #3 |
|
Создано: 14 февраля 2005 21:31 · Личное сообщение · #4 |
|
Создано: 14 февраля 2005 21:31 · Личное сообщение · #5 |
|
Создано: 14 февраля 2005 21:36 · Личное сообщение · #6 |
|
Создано: 14 февраля 2005 21:51 · Личное сообщение · #7 |
|
Создано: 14 февраля 2005 22:08 · Личное сообщение · #8 2Styx: Об этом то и речь !!! Я знаю что для нахождения начала процедуры нужно юзать WinDASM, но не знаю что надо делать! (как говорил Bad_guy - в отладчике посмотреть, однако у Fess'а про это ничего нет!) (вроде я даже знаю что после этого надо сделать - обнуляем и +1 к eax потом вых.из процедуры т.е. xor eax,eax inc eax ret а оставшиеся байты занопить - так ведь) 2DrFits: Я ожидал таких ответов! Но я говорю то что думаю! Знаешь, я не из тех кто не зная элементарных вещей, лезет в форум, отвлекая других по пустякам... я отвлекаю других по пустякам когда их не понимаю =)))))))))))) (последнее - шутка) 2LORD: респект))) ![]() |
|
Создано: 14 февраля 2005 22:12 · Личное сообщение · #9 |
|
Создано: 14 февраля 2005 22:13 · Личное сообщение · #10 |
|
Создано: 14 февраля 2005 22:13 · Личное сообщение · #11 |
|
Создано: 14 февраля 2005 22:18 · Личное сообщение · #12 Serge что делать в qV не знаю не пользовался. Если есть Hiew то: 1)F5 2).адрес ( . - если RVA, без точки если смещение от начала файла) 3)2 раза ENTER 4)f3 -- Edit 5)f2 -- Asm 6)пишешь нужную команду, enter, след. команда. Ну и пару нопов для выравнивания (совсем не обязательно) 7)f9 -- Update 8)f10 -- exit Hiew можно взять на wasm.ru ----- Crack your mind, save the planet ![]() |
|
Создано: 14 февраля 2005 22:20 · Личное сообщение · #13 |
|
Создано: 14 февраля 2005 22:38 · Личное сообщение · #14 |
|
Создано: 14 февраля 2005 23:00 · Личное сообщение · #15 |
|
Создано: 14 февраля 2005 23:18 · Личное сообщение · #16 |
|
Создано: 14 февраля 2005 23:25 · Личное сообщение · #17 |
|
Создано: 14 февраля 2005 23:50 · Личное сообщение · #18 Serge пишет: Вернее не как BG сказал а как BG предположил... ну да ладно... Ну вот пожалуйста к вопросу о том, что форум стал "не тем". Начинаешь по-человечески новичку помогать, вопросы задавать нужные, так он ох*евать сразу начинает... ну какой тут может быть нахрен старый "добрый" форум ![]() ----- Всем не угодишь ![]() |
|
Создано: 15 февраля 2005 00:23 · Личное сообщение · #19 ============================================= Q: В программе есть какая-либо команда, и мне нужно сделать так, чтобы она не выполнялась. Как это сделать? A: Самый простой способ это занопить команду. Это значит, что на место этой команды надо вписать необходимое количество команд nop (байт 90h). Команда nop (сокращение от no operand) ничего не далает. Так и написано в официальной документации: "This is a do nothing instruction". Q: Всмысле необходимое количество команд nop? Почему просто не заменить одну ненужную команду, одной командой nop? A: Команда, которую вам нужно отключить, в машинных кодах может занимать более одного байта (обычно так и бывает). А команда nop в машинном коде выглядит как один байт - 90h. Если заменить команду, машинный код которой занимает больше чем 1 байт, на 1 команду nop, то после команды nop (байта 90h) считаются следующие байты для обработки и выполнения, но эти байты будут просто остатками от заменяемой команды, поэтому их выполнение приведет к ошибке в программе. Поэтому, если нужно сделать так, чтобы какая-то команда не выполнялась, то ее надо заменить на столько команд nop, сколько байтов занимает эта команда. Например команда call 00450000 занимает 5 байтов, соответсвенно ее надо будет заменить на последовательность из 5 команд nop. Q: А как это сделать? И вообще как пропатчить исполняемый файл программы? A: Открываете файл, который собираетесь патчить в любом шестнадцатеричном редакторе (я использую Hex WorkShop), находите нужную команду или нужное место по соответствующему смещению (адресу относительно начала файла) в файле и изменяете ее как хотите. Q: Я знаю адрес команды, которую мне надо изменить, в памяти. Как мне узнать, по какому смещению (адресу) относительно начала файла находится эта команда в файле? A: Лично я смотрю смещение нужной команды в файле с помощью IDA Pro или W32Dasm. В обеих этих программах смещение выделенной команды/адреса в файле показывается в строке состояния (такая панелька в самом низу окна программы). Например в W32Dasm'e, если вам надо найти смещение нужной команды в памяти, выделите эту команду и в строке состояния смотрите такую строку: @Offset 00XXXXXX in File . Это значит что по смещению XXXXXX относительно начала файла и находится машинный код вашей команды. Аналогично в IDA Pro смотрите искомое смещение в строке состояния слева от текущего адреса. Также смещение нужной команды в файле, зная ее (даже и виртуальный) адрес, можно найти с помощью своеобразного калькулятора в PE Tools или LordPE (PE Editor -> FLC). Q: Мне нужно изменить работу программы для своих целей. Я хочу вставить на место инструкций, которые хочу изменить, свои инструкции. Но "не хватает места", т.е. мои инструкции занимают больше места, чем те, которые нужно заменить. Что делать? A: В этом случае составляем нужный нам код (процедуру). В конце кода добавляем команду ret. Создаем новую секцию (с помощью LordPE или ProcDump'a) и помещаем наш код в эту секцию. В начале инструкций, которые нам надо изменить, ставим вызов добавленной процедуры (call), оставшиеся ненужные инструкции, до начала нужных, забиваем командами "nop". Все. Только нужно будет быть внимательным с адресами, их надо будет смотреть в отладчике. Еще можно не добавлять новую секцию, а написать свой код (процедуру) в конец последней секции файла (там обычно есть много нулей), и дальше делать так, как я написал выше. Если в конце файла нет нулей, можно их дописать и расширить raw и virtual size последней секции, и не забыть исправить Image Size (увеличить все эти параметры на длину дописанного кода). ================================================ FAQ по взлому программ ![]() |
|
Создано: 17 февраля 2005 03:43 · Поправил: turist · Личное сообщение · #20 Я не могу понять как мне вписывать в начале процедуры xor eax,eax inc eax retя как понял проблема в том что нехватает места для этих команд- они затирают другие нужные. Ну секцию тут совсем не обязательно создавать это в faq не совсем правильно написано. Тем более там не так много нужно дописать. ставишь чуть ввыше от того места что хочешь изменить лонг джамп (если чего неудачно затерлось на асме смотри - нопишь глюки) ну и его перенаправляешь джамп этот в пустое место (в секции кода-ищем 00 00 00 00 00 или 90 90 90 90 90 ) а там возвращаешь те команды что затерлись что бы код не изменился и в конце jmp на следующую инструкцию после написаного тобой в самом начале джампа.. Лучше после этого сохранится и проверить что все получилось так как надо-без глюков. А уже потом на пустом месте уже смело пишешь то что тебе надо Искать начало процедуры в hex editor-e? Почему бы нет? Поиск по сигнатуре и все дела.нифига себе. Не перевелись еще киберманьяки на руси. это по какой к примеру? tKC что ли начитался? ![]() |
|
Создано: 17 февраля 2005 12:14 · Личное сообщение · #21 |
|
Создано: 17 февраля 2005 17:51 · Личное сообщение · #22 turist Из мухи слона сделал. ЛОЛ. turist пишет: нифига себе. Не перевелись еще киберманьяки на руси. это по какой к примеру? Да по той естественно, которую ты видишь в отладчике или дизассемблере... Вбиваешь цепочку байт в редакторе и ищешь, что тут непонятно? Насчет 10 твоих строк Sh[AHT] ответил всего одной... ![]() |
|
Создано: 18 февраля 2005 00:13 · Поправил: Serge · Личное сообщение · #23 2 Bad_guy: Ну прости, прости=) Но насчет айса в самом деле некорректный =))))))) вопрос (я бы не отвлекал людей а прочитал бы инфу по сайсу - а о патче нормальных статей для новичков только три : две у Fess'а и одна ещё не помню у кого - там несовсем понятно потому то на форум и захожу) 2 others: Я недавно проконсультировался со знающими людьми и кроче, посмотрите мой предпологаемый ход действий: 1) net start ntice 2) трассируем, смотрим в дебаггере адрес после вызова процедуры (мне чегото там говорили про смещения и прочую лабудень... так вот: адрес у неё в айсе будет "B***:40******" или "B***:41******" без кавычек конечно=))) и типа file offset будет то же самое только без "B***:40" или "B***:41") 3) ну дальше всё понятно : xor eax,eax - обнуляем eax - inc eax - увеличиваем eax - ret - выход из процедуры ------Пожалуйста скажите в чём ошибка.... если есть конечно ;)) PS: Ну а насчёт смотрим начало процедуры в QVIEW/HIEW - да милейшие и как же вы собираетесь его смотреть 8)))))) lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol ![]() |
|
Создано: 18 февраля 2005 00:15 · Личное сообщение · #24 |
|
Создано: 18 февраля 2005 00:21 · Поправил: Serge · Личное сообщение · #25 Ara пишет: Насчет 10 твоих строк Sh[AHT] ответил всего одной... Правильно, у меня проблем с этим не было, я просто не знал где искать начало процедуры..... а теперь помоему понял что ентот адрес в дебаггере посмотреть и убрать B***:4* - а оставшиеся цифирьки и будут нашим адресом в файле (то бишь file offset'ом) ![]() |
|
Создано: 18 февраля 2005 00:31 · Личное сообщение · #26 Serge пишет: PS: Ну а насчёт смотрим начало процедуры в QVIEW/HIEW - да милейшие и как же вы собираетесь его смотреть 8)))))) lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol Действительно лол. Берешь, открываешь длл в них длл и смотришь. Байты начала процедуры ты уже старательно переписал на бумажку. С этой бумажки вводишь их в поиск и у тебя найдется нужное месте (при достаточно длинной цепочке). LOL. Virtual Adderss - ImageBase не всегда равно смещению в файле. ![]() |
|
Создано: 18 февраля 2005 00:34 · Личное сообщение · #27 |
|
Создано: 18 февраля 2005 00:40 · Личное сообщение · #28 |
|
Создано: 18 февраля 2005 00:56 · Личное сообщение · #29 Serge Объясняя третий раз, я ошибся и написал длл, думая, что тебе нужно патчить длл. Эхе свой открываешь в любом хекс-редакторе. К примеру твоя процедура имеет такое начало 005C3B0C > 55 PUSH EBP 005C3B0D 8BEC MOV EBP,ESP 005C3B0F B9 07000000 MOV ECX,7 Задаешь поиск байт 558BECB907000000. Вписываешь туда начиная с 55.... 33С040С3 и сохраняешь. А если ты не знаешь, откуда переписывать байты начала своей процедуры, то ты действительно ваще убитый глупый и тупой ![]() |
|
Создано: 18 февраля 2005 01:45 · Личное сообщение · #30 2Ara: ЭТО Я ЗНАЮ!!! Как раз наоборот - скорее если бы я байты искать не умел то считался бы "ваще убитым глупым и тупым" А откуда переписывать байты начала своей процедуры - меня элементарно запутали - одни говорят QView, другие WinDASM третьи вообще чёто там про PE Editor задвинули... Ты ещё чего-то там про Virtual Adderss - ImageBase (несоответствие вирт. адреса и офсета в файле) говорил. В который раз повторяю - обьясните как найти начало процедуры! "Объясняя третий раз" Это когда же =))) ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Основной форум —› Помогите beginner'у насчет пропатчивания! |
Эта тема закрыта. Ответы больше не принимаются. |