Показать сообщение отдельно

  #8  
Старый 27.07.2007, 19:18
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами: 9981026

Репутация: 1564
По умолчанию

Пасиб за помидорозакидывание и агитацию=) Зато конструктивно=)

Читаем далее.
[Part II]
[DotFixNiceProtect на примере DotFixNiceProtect].

Как я уже говорила - прот написан на vb (сама была удивлена), а значит использует библиотеку MSVBVM60.dll. Так, VB-проги первым делом вызывают функцию ThunRTMain и код, естессно будет выполняться в этой библиотеке (MSVBVM60.dll). Здесь подход должен быть немного иной, чем в предыдущих случаях (из-за языка, на котором программа написана). Пришло время воспользоваться SEH. Теперь идем в отладчик и включаем остановку на всех эксепшнах (Alt + O и на вкладке Exceptions снимаем все галочки). Ждем последнего эксепта в таком месте (оно идентично во всех запакованных программах)

Код:
 
0012FFE0    FFFF                       ???                              
0012FFE2    FFFF                       ???
А теперь хитрость=) Идем на карту памяти (Alt+M) и ставим бряк на доступ к кодовой секции в библиотеке MSVBVM60.dll. Shift+f9..... Через секунду мы в MSVBVM60.dll. Причем не где-то, а в стартовой функции ThunRTMain. Класс))))) Теперь нам нужен адрес возврата. Глянем в стек........ Видим, что на верхушке лежит

Код:
0012FBCC   00B1628E  DotFix_N.00B1628E
Туда и отправимся. Go to-> 00B1628E. Что видим. Посмотрела на карту памяти. Мы в секции, а не на выделенной памяти=\ Резонный вопрос, а где вм? Ну нам же лучше.
Опять вспоминаем как выглядит начало программы на вб. Сначала в стек заталкивается некое число, а потом уже идет вызов стартовой функции. Ищем это число, прокручивая листинг вверх. Вот оно

Код:
00B16207   .  C74424 FC ACBF4000       MOV DWORD PTR SS:[ESP-4],DotFix_N.0040BFAC
00B1620F   .  EB 01                    JMP SHORT DotFix_N.00B16212
C чего я взяла, что это именно то число? Да очень просто. Открыла в дампе. По этому адресу идет сигнатура VB5, что характерно для вб программ. Отлично, теперь у нас есть украденная oep не в выделенной памяти.
Дампим, открываем импрек и пишем адрес иат - 1000.... Все нашлось. Вводим нашу OEP и склеиваем.
Все работает)))))))))
[Done]

Последний раз редактировалось 0x0c0de; 28.07.2007 в 19:43..
 
Ответить с цитированием