Всем привет . Недавно задался вопросом - как же написать патч для проги ? Ассемблер как язык знаю плохо . Делфи знаю хорошо . Вот , например строчка кода из Olly Debugger : 00486F71 74 07 JE SHORT WinRAR.00486F7A Как реализовать патч на делфи\паскале , чтобы заменить команду условного прыжка на NOP ? Ткните носом , как это делать , пожалуйста . Ибо сам разобраться не смог . Кто приведет пример , буду очень благодарен . С уважением , Rubanok .
пересчитай 486F71 в смешение в файле, и напиши прогу которая юзает WriteFile чтобы написать туда 0x9090
Если ты умный , то я рад за тебя . Но я новичок , не знаю как это делать , поэтому и попросил помощи . Я не знаю как это делать . Обьясни , пожалуйста . С WriteFile возможно разберусь . Пример : const ar : array[1..6] of byte = ($e8,$bd,$07,$00,$00,$58); Здесь как я понимаю находится новое значение(я) , которым мы заменим старое ( пропатчим прогу ) . $e8,$bd,$07,$00,$00,$58 - непонятно , как найти это значение . Процедура патчинга : Seek(f,$B26A); -- сдвиг на какой то промежуток . Как узнать как он записан в Olly Debugger ? Как я понимаю , запись адреса в делфи и адрес в Olly Debugger - это не одно и тоже . for i:=1 to 6 do Write(file,ar2); тут запись массива байт , который в константе ar . Надеюсь на помощь . C уважением , Rubanok
Rubanok Кто-то писал, что знает дельфи. Раз так, то кто-то должен уметь работать с файлами, а больше по сути ничего и не надо. Надо ещё иметь чуть-чуть мозга, чтобы найти место патча. Открываем файл например WinHex-ом, ищем последовательность байт и усё.
Rubanok 1. Завязывай с Дельфи. 2. Разберись с понятиями RVA и OFFSET. Статьи об упаковщиках (на сайте есть) для этих целей вполне подойдут. 3. Скачай 253666.pdf и 253667.pdf от Интел. 4. Прочитай статью про опкоды с сайта. 5. ???? 6. PROFIT! Сам патч делать надо следующим образом: 1. Посмотреть вид адреса, который используется в команде, выполняющей переход. 2. Рассчитать новый адрес (того места, куда переход нужен) соответствующего вида. 3. Заменить адрес в команде. Все. Используемые API: CreateFile, WriteFile, SetFilePointer. Когда будешь определять место инструкции для патча - необходимо значение RVA, которое ты получил из Ольки, пересчитать в смещение. Как - читать в статьях.
Это еще почему ? Делфи очень хороший язык , перспективный . Хотя не самый лучший , я так думаю . Поэтому потихоньку учу Си =) Блин , так я же не знаю где это ... Все равно что иголку в стоге сена ... Спасибо , почитаю . Алгоритм патчинга то я понял . Вот это я не понял =) Ну , буду читать .
Когда-то тоже для меня было проблемой написание патча, если проблемы по прежнему возникают пиши в личку, как говорится чем смогу...
IceFire вы упорно пишите RVA, когда там VA, на счет API функций он сам знает, что и с чем делать, а вот в переводе смещений у него недочет. На счет делфи - ничего плохо не вижу в нем, почему нельзя использовать ассемблер + делфи?!
JCronuz Насчет Ольки верно - действительно, VA. Невнимательно прочитал то, что сам же написал. Rubanok Ну хорошо, хорошо. Учи Дельфи. Срач разводить не хочу. Если проблемы по патчу остались - пиши в личку. Но сперва статьи "Об упаковщиках в последний раз" прочитай.