Инлайн патчинг UPX В этом туториале я покажу, как сделать инлайн патч. Сперва, что такое inline patch? Инлайн патч патчит код программы при запуске. Если быть более точным, то мы ждём пока программа окончательно распакуется и в точке, где программа собирается прыгать на OEP, мы прыгаем к нашему собственному коду, который патчит нужные байты. Затем прыгаем на OEP. Теперь пропатченая программа счастлива. :) Зачем делать инлайп патч, если можно распаковать? Ну, если мы распакуем цель, то размер файла будет больше. И вы не сможете написать маленький патч. Так что, если вы хотите распостранять ваши кряки (Боже вас упаси - прим. ncat:), то вам придётся распостранять сам экзешник...:( Если вы используете inline patch, вы можете сделать очень маленький патч. Так как всё больше и больше софта пакуется, то за этим спобом патчинга будещее. Чтобы показать вам как делается inline patch, я запаковал кое-какой редактор с наг скрином. (помните, этот тутор показывает как сделать инлайн патч, а не как ломать, так, что нет разницы какую программу вы будете ломать, принцип везде один и тот же - прим. ncat) Инструментарий: SoftIce, Hexeditor Итак, вы знаете как обойти защиту в вашей программе, у меня это наг, и я знаю как это убрать. 00401258 EB2D jmp 00401287 Мне нужно заменить EB2D на EB1D и моя проблема будет решена, как это будет у вас я не знаю. Я всегда использую softice для инлайн патчинга. Перед тем, как мы начнём трейситься к OEP, нам нужно найти немного свободного места для нашего кода. Запускайте ваш hexeditor, и загурзите в него исследуемый файл. Я всегда пытаюсь использовать свободное место в конце секции. для этого есть две причины: - Меньше возможность, что это место будет использовано пакером - Если нам нужно больше места, то мы можем легко увеличить свободное место. (сделаем секцию больше) Итак, я нашёл немного свободного места после ImportTable (RVA : 4171D6, offset : 67D6) Давайте пропатчим эту крошку ;) Трейсим код до тех пор, пока вы не найдёте джамп на OEP. 0041606D 09C0 or eax, eax 0041606F 7407 je 00416078 00416071 8903 mov dword ptr [ebx], eax 00416073 83C304 add ebx, 00000004 00416076 EBE1 jmp 00416059 * Referenced by a (U)nconditional or (C)onditional Jump at Address:0041606F(C) 00416078 FF9620610100 call dword ptr [esi+00016120] * Referenced by a (U)nconditional or (C)onditional Jump at Address:00416040(C) 0041607E 61 popad 0041607F E97CAFFEFF jmp 00401000 ; прыжок на ОЕР Вместо прыжка на OEP, мы собираемся переадресовать джамп к нашему свободному месту. Пойдём до адреса 41607F, и нажмём 'a' затем напечатаем 'jmp 4171D6' (наше свободное место). Нажмём enter дважды и F10 один раз, чтобы прыгнуть. Итак, теперь мы в нашем пустом куске файла, нажмём 'a' опять, теперь введём наши комманды: mov byte ptr [401259], 1D ; меняем байт jmp 401000 ; прыжок на OEP Этот код меняет байт по адресу 401259 с 2D на 1D, так что после того, как эта строка будет выполнена программа пропатчится. Затем прыгаем на OEP. Записываем или дампим байты, который изменили и затем меняем их в hexeditor'е. Запускаем цель... да, всё работает, наг скрин исчез! Detten Detn@hotmail.com Greetz to Miele, Denoader, Figugegl, woody, and to all crackers out there! Перевод FujitZu\C-16 для Team-53 TUTORiALz!!!