Автор: samvel. Дата публикации: 30.06.2005
На днях зайдя на любимый сайт wasm.ru я обнаружил интересную статью
"Руководство по исследованию программ, написанных на VB 6.0". Прочитав
ее, я понял, что мой путь лежит в раздел "Разное" сайта
www.dotfix.net, который я периодически посещаю, но вот на указанный
раздел как-то внимания не обращал.
Пропатченный TestProtection3.exe, выводит палиндром фразы "улыбок тебе дед макар".
В файле пропатчено 7 байт; так как в задании разрешается патчить 8 байтов, возможно еще один
байтик предназначался для того, чтобы в слове "ракам" вторую букву "а" заменить на букву "о". Я этого делать не стал, в целях сохранения целостности палиндрома, однако делается это аналогично тому, как описано ниже.
Взламывается этот сэмпл следующим образом:
1. Находим OEP=00401250, распаковываем прогу, восстанавливаем импорт ImpRec’ом, суем ее в W32Dasm и видим импортируемые VB-функции. Среди них есть одна интересная - MidCharBstr, вызов которой осуществляется по адресу 004024E6. Ставим по этому адресу точку останова в SoftIce, вылетаем в отладчик, и видим, что указанная функция в цикле в полном соответствии с названием выбирает символы из исходной строки палиндрома, адрес которой
передается функции через стек по адресу 004024E5. То, в каком порядке выбираются символы определяется чуть ранее: соответствующее значение возвращает в eax функция по адресу 004024D0: при работе исходного файла это последовательность 1,2,3,.......21. Таким образом, становится понятна основная идея патча: сделать так, чтобы в стек по адресу 004024D9 возвращались те же числа, но в обратной последовательности. Для этого я использовал следующую замену кода (предварительно заметив тот факт, что регистр edi на протяжении всех итераций цикла остается равным нулю, в результате чего становится возможным использовать его в
качестве счетчика):
Исходный код:
Заменяющий код:
Таким образом, мы уложились всего в семь байт, что соответствует
условию задачи.
2. Второй этап заключается в самом инлайн патче. Запускаем LordPE, Break&Enter, bpint3, выбираем исходный запакованный экзешник, прерываемся на точке входа в теле загрузчика, начинаем его трассировать и устанавливаем, что прыжок на OEP осуществляется по
адресу 004001D1:
Выше в упаковщике можно увидеть кучу нулей, следовательно туда мы и будем перенаправлять jmp. Правим в Ultraedit’e код
Начиная с ареса 004000A0 мы дописываем следующий код патчера:
После всех этих манипуляций прога и выдаст нам заветную фразу. К слову, взломанный экзешник прекрасно работает в Win98, WinXP HE Russian, WinXP PE Russian (протестировано на 4 машинах). Однако в моей системе WinXP Corporate + SP2 он при запуске выдал ошибку :-(((
С этим разбираться я не стал, так как думаю поставленная цель достигнута.
Вот вроде и все.
Исследование защиты Test Protection 3 by DotFix Software
На днях зайдя на любимый сайт wasm.ru я обнаружил интересную статью
"Руководство по исследованию программ, написанных на VB 6.0". Прочитав
ее, я понял, что мой путь лежит в раздел "Разное" сайта
www.dotfix.net, который я периодически посещаю, но вот на указанный
раздел как-то внимания не обращал.
Пропатченный TestProtection3.exe, выводит палиндром фразы "улыбок тебе дед макар".
В файле пропатчено 7 байт; так как в задании разрешается патчить 8 байтов, возможно еще один
байтик предназначался для того, чтобы в слове "ракам" вторую букву "а" заменить на букву "о". Я этого делать не стал, в целях сохранения целостности палиндрома, однако делается это аналогично тому, как описано ниже.
Взламывается этот сэмпл следующим образом:
1. Находим OEP=00401250, распаковываем прогу, восстанавливаем импорт ImpRec’ом, суем ее в W32Dasm и видим импортируемые VB-функции. Среди них есть одна интересная - MidCharBstr, вызов которой осуществляется по адресу 004024E6. Ставим по этому адресу точку останова в SoftIce, вылетаем в отладчик, и видим, что указанная функция в цикле в полном соответствии с названием выбирает символы из исходной строки палиндрома, адрес которой
передается функции через стек по адресу 004024E5. То, в каком порядке выбираются символы определяется чуть ранее: соответствующее значение возвращает в eax функция по адресу 004024D0: при работе исходного файла это последовательность 1,2,3,.......21. Таким образом, становится понятна основная идея патча: сделать так, чтобы в стек по адресу 004024D9 возвращались те же числа, но в обратной последовательности. Для этого я использовал следующую замену кода (предварительно заметив тот факт, что регистр edi на протяжении всех итераций цикла остается равным нулю, в результате чего становится возможным использовать его в
качестве счетчика):
Исходный код:
004024CF 50 push eax
004024D0 FF15A8104000 call [004010A8]
Заменяющий код:
33C0 xor eax,eax
B015 mov al, 15
2BC7 sub eax,edi
47 inc edi
Таким образом, мы уложились всего в семь байт, что соответствует
условию задачи.
2. Второй этап заключается в самом инлайн патче. Запускаем LordPE, Break&Enter, bpint3, выбираем исходный запакованный экзешник, прерываемся на точке входа в теле загрузчика, начинаем его трассировать и устанавливаем, что прыжок на OEP осуществляется по
адресу 004001D1:
004001СD 78F3 js............
004001CF 7503 jnz........... (1)
004001D1 FF630C jmp dword ptr [ebx+0Ch]
Выше в упаковщике можно увидеть кучу нулей, следовательно туда мы и будем перенаправлять jmp. Правим в Ultraedit’e код
004001CD 7505 jnz........... (1)
004001CF E9CCFEFFFF jmp 004000A0
Начиная с ареса 004000A0 мы дописываем следующий код патчера:
004000A0 C705CF24400033C0B015 mov dword ptr [004024CF],15B0C033
004000AA 66C705D32440002BC7 mov word ptr [004024D3],C72B
004000B3 C605D524400047 mov byte ptr [004024D5], 47
И прыжок на OEP:
004000BA E991110000 jmp 00401250
После всех этих манипуляций прога и выдаст нам заветную фразу. К слову, взломанный экзешник прекрасно работает в Win98, WinXP HE Russian, WinXP PE Russian (протестировано на 4 машинах). Однако в моей системе WinXP Corporate + SP2 он при запуске выдал ошибку :-(((
С этим разбираться я не стал, так как думаю поставленная цель достигнута.
Вот вроде и все.
Комментарии |
отсутствуют |
Добавление комментария |