Апи ASProtect в Антивирусе Stop 4.0.36.Delphi , Программа и Интерфейс , Исследование программАпи ASProtect в Антивирусе Stop 4.0.36.Автор: Hex Еще одна прога которая подвисает если ей BBS нормальную не сделать. Но тут апи нам жизнь портят. Зарегить конечно без ключа не выйдет, но поисследовать стоит. Дамп и импорт тут берется как в Actual Startup.
Но запустив такой дамп мы увидим синий экран смерти :( Глюк... И происходит он вот тут:
Естественно GetProcAddress офигевает от такого имени функции и возвращает 0 в EAX, ну а потом CALL EAX завершает концертную программу :) Так не бывает :) Смотрим в упакованый вариант и видим что вместо call GetProcAddress в этом месте идет перенаправление в аспротект на вот такую процедуру:
Ну естественно Imprec решил что это GetProcAddress, и нельзя сказать что он не прав. Во всех случаях когда имя функции не лежит по адресу FFFFFFFF, оно работает как GetProcAddress. Ну и ладно. Просто посмотрим что теперь сделает CALL EAX. Ничего интересно оно не сделает, а просто в EAX вернет ноль поэтому такой вызов (call eax) можно смело менять на xor eax,eax. Дальше будет еще один такой же вызов(636D6F) Getprocaddress но теперь уже нужно будет заменить call eax на mov al,1a. Синие экраны пропали. Теперь прога запускается, выводит окно триала, потом щелкает и закрывается. Это у нас апи аспротекта пакости делают. Находим в аспротекте табличку этих самых апи. Как это делать уже рассказывал, не забывайте что тут у нас ImageBase = 500000 а не 400000. Вот они по возрастанию:
Теперь запускаем запакованную прогу доходим до места где мы сделали дамп и ставим брейкпоинты на адреса этих апи. Теперь берем бумажку и ручку, будем записывать записывать чо там происходит. Я вот типа в табличку оформил. В столбике "Чо делает" я записываю общий смысл апи.
* - Сработает не в протекторе. Адрес_Подписи - это я так называю адрес строки 12 байтной вот такого вида "3xEhLwAAImw=". Чувствую что она юзается для расшифровки кусков кода... а может я и не прав. В общем кто знает скажите что это? :) Адрес_Заглушки - тут оно просто записывает адрес процедуры из 1 команды = RET. Т.е. типа заглушка. Срабатывания 1,2,3,8,9 никакой информационной нагрузки не несут, просто какие-то данные пишет в секцию DATA. C 10 и 11 все просто: 10 - это GetApplicationRunFunction, 11 - это Executetrial. Как мы видим адрес 63F078 у нас тут не участвует. Если запихнуть этот адрес вместо 63F01C в GetApplicationRunFunction то мы увидим месагу "Expired". Так что это у нас типа RunExpired. А вот 4,5,6 интересные какие-то адреса записывают... Берем IDA дизасмим наш дамп и смотрим чо у нас там по адресам 643DD8, 643DDC, 643DE0. Видим вот такое:
Данные читаются с этих мест по адресам sub_0_62CB28+5 и sub_0_62CB50+5. А там:
Ух ты! В Eax записывается 62CA38 а дальше EAX сравнивается с данными по адресу ds:dword_0_643DDC а там у нас тоже 62CA38. А что у нас апи записывало в ds:dword_0_643DDC? - 46127C. Это проверка на наличие Аспротекта! Дальше еще одна проверка:
Итого 2 джампа должны состояться чтобы все работало. Если глянуть что происходит в sub_0_62CB50+5 - то там тоже самое. Патчим и антивирус запускается! :) Теперь он у нас работает в триальном режиме... А хотелось бы в зарегеном... Смотрим подозрительные строчки в IDA. И видим:
Смотрим выше...
Еще выше..
И вот наконец интересное место:
Хе-хе :) А я тут был... Значит это была не просто функция возвращающая 0... Зайдем в call unknown_libname_248. Там у нас:
Это функция делающая String из Pchar. Видимо call eax должен был все-таки вернуть в EAX какую-то Pchar строку... Я даже могу предположить что это имя на кого зарегено... Запихиваем куда-нить в конце файла свое имя, я записал по адресу 740700. Теперь bpx 636C51 как сработает запихиваем 740700 в eax. ВАУ! Появилась картинка зарегеной версии! И в About тоже горит наше имя! А что же тогда делал еще один такой Call Getprocaddress? Он брал число дней до конца триала! У меня там было 1a = 26 дней. Радостно? А теперь о грустном... Дальше фиг чего сделать без ключа можно. Т.к. все Disabled пункты открываются когда код раскриптуется :( Если кто вдруг не знает чо это такое - гляньте по адресу 632B54 или 6324C3. P.S. Если порассматривать код дальше то станет видно что на самом деле проверка наличия аспротекта(62CB28) ведется неспроста, там проверяется наличие функции раскриптовки. Перед каждым закриптованным куском кода идет вызов этой самой "проверки". Дайте чтоли ключик - поисследовать :) Апи ASProtect в Антивирусе Stop 4.0.36: как портить жизнь дампом и импортами. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Исследование программ ::
|
|||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |