Вопрос по созданию патча

Тема в разделе "WASM.BEGINNERS", создана пользователем Rubanok, 4 июл 2009.

  1. Rubanok

    Rubanok New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    4
    Всем привет . Недавно задался вопросом - как же написать патч для проги ?
    Ассемблер как язык знаю плохо . Делфи знаю хорошо .
    Вот , например строчка кода из Olly Debugger :

    00486F71 74 07 JE SHORT WinRAR.00486F7A

    Как реализовать патч на делфи\паскале , чтобы заменить команду условного прыжка на NOP ?
    Ткните носом , как это делать , пожалуйста .
    Ибо сам разобраться не смог .

    Кто приведет пример , буду очень благодарен .

    С уважением , Rubanok .
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    пересчитай 486F71 в смешение в файле, и напиши прогу которая юзает WriteFile чтобы написать туда 0x9090
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Я бы сказал - "тяжёлый случай".
     
  4. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    В PE-Tools -> File Location Calculator(FLC) переведи свое смещение VA в RAW
     
  5. Rubanok

    Rubanok New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    4
    Если ты умный , то я рад за тебя .
    Но я новичок , не знаю как это делать , поэтому и попросил помощи .
    Я не знаю как это делать . Обьясни , пожалуйста .
    С 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
     
  6. Rubanok

    Rubanok New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    4
    [​IMG]
    Но тут ведь получаются одинаковые значения ...
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rubanok
    Кто-то писал, что знает дельфи. Раз так, то кто-то должен уметь работать с файлами, а больше по сути ничего и не надо. Надо ещё иметь чуть-чуть мозга, чтобы найти место патча.
    Открываем файл например WinHex-ом, ищем последовательность байт и усё.
     
  8. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Rubanok

    1. Завязывай с Дельфи.
    2. Разберись с понятиями RVA и OFFSET. Статьи об упаковщиках (на сайте есть) для этих целей вполне подойдут.
    3. Скачай 253666.pdf и 253667.pdf от Интел.
    4. Прочитай статью про опкоды с сайта.
    5. ????
    6. PROFIT!

    Сам патч делать надо следующим образом:
    1. Посмотреть вид адреса, который используется в команде, выполняющей переход.
    2. Рассчитать новый адрес (того места, куда переход нужен) соответствующего вида.
    3. Заменить адрес в команде.

    Все.

    Используемые API: CreateFile, WriteFile, SetFilePointer.

    Когда будешь определять место инструкции для патча - необходимо значение RVA, которое ты получил из Ольки, пересчитать в смещение. Как - читать в статьях.
     
  9. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    А, ну еще из API CloseHandle забыл =)
     
  10. Rubanok

    Rubanok New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2009
    Сообщения:
    4
    Это еще почему ? Делфи очень хороший язык , перспективный .
    Хотя не самый лучший , я так думаю . Поэтому потихоньку учу Си =)
    Блин , так я же не знаю где это ... Все равно что иголку в стоге сена ...
    Спасибо , почитаю .
    Алгоритм патчинга то я понял .
    Вот это я не понял =) Ну , буду читать .
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    твой стог сена называется www,intel.com
     
  12. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Когда-то тоже для меня было проблемой написание патча, если проблемы по прежнему возникают пиши в личку, как говорится чем смогу...
     
  13. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    IceFire вы упорно пишите RVA, когда там VA, на счет API функций он сам знает, что и с чем делать, а вот в переводе смещений у него недочет. На счет делфи - ничего плохо не вижу в нем, почему нельзя использовать ассемблер + делфи?!
     
  14. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    JCronuz

    Насчет Ольки верно - действительно, VA. Невнимательно прочитал то, что сам же написал.

    Rubanok
    Ну хорошо, хорошо. Учи Дельфи. Срач разводить не хочу. Если проблемы по патчу остались - пиши в личку. Но сперва статьи "Об упаковщиках в последний раз" прочитай.
     
  15. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    Вот ещё почитай http://biocyborg.narod.ru/rev/Delphi_cr.htm
     
  16. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    Вот ещё почитай http://biocyborg.narod.ru/rev/Delphi_cr.htm
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Зачем что-то считать, тупо ищем сигнатуру и всё. Какие могут быть проблемы вообще?