![]() |
eXeL@B —› Программирование —› Отловить момент загрузки dll |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 04 апреля 2013 14:40 · Поправил: egorovshura · Личное сообщение · #1 |
|
Создано: 04 апреля 2013 14:44 · Личное сообщение · #2 |
|
Создано: 04 апреля 2013 14:50 · Личное сообщение · #3 |
|
Создано: 04 апреля 2013 15:12 · Личное сообщение · #4 |
|
Создано: 04 апреля 2013 15:17 · Личное сообщение · #5 |
|
Создано: 04 апреля 2013 15:21 · Поправил: hors · Личное сообщение · #6 |
|
Создано: 04 апреля 2013 15:55 · Поправил: VodoleY · Личное сообщение · #7 а как вам вариант вмпрота? у него вообще формирование либы в памяти идет. есть такое мнение что человек на вмпрот и наступил. что мешает в память загрузить мусор.. расшифровать его.. и использовать? правильно.. особо ничего. ток процедура муторная ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 04 апреля 2013 18:39 · Личное сообщение · #8 |
|
Создано: 05 апреля 2013 02:01 · Личное сообщение · #9 |
|
Создано: 05 апреля 2013 10:21 · Личное сообщение · #10 |
|
Создано: 05 апреля 2013 22:36 · Личное сообщение · #11 |
|
Создано: 05 апреля 2013 22:55 · Поправил: ELF_7719116 · Личное сообщение · #12 egorovshura пишет: Если есть желание скачайте AQTime с сайта. http://downloads.smartbear.com/AQtimeDemo.exe 229 Мбайт. демо?! Там сетап что-то про HASP 12.49.1.14179 заикнулся и оказался прав. Есть еще Code:
Короче, граждане бандиты, качаем сию гадость 2009 года выпуска(как сервис -run) http://rghost.ru/45073472 ![]() |
|
Создано: 06 апреля 2013 01:37 · Поправил: egorovshura · Личное сообщение · #13 |
|
Создано: 06 апреля 2013 08:16 · Поправил: ELF_7719116 · Личное сообщение · #14 egorovshura пишет: а в самой программе. AQtimeCoreEx.dll тут ? Code:
В функции по offset + E7B0 прослеживаются UNICODE строки типа Your License Has Expired, Code:
![]() |
|
Создано: 06 апреля 2013 17:34 · Личное сообщение · #15 |
|
Создано: 06 апреля 2013 18:05 · Личное сообщение · #16 |
|
Создано: 06 апреля 2013 20:03 · Личное сообщение · #17 |
|
Создано: 06 апреля 2013 21:01 · Личное сообщение · #18 |
|
Создано: 06 апреля 2013 21:12 · Личное сообщение · #19 egorovshura пишет: Момент ее загрузки я и хочу отловить, чтобы пропатчить. оно не мудрено, там защита поработала - LoadLibraryExW(и ей подобные) похуканы. Вызовы идут через aqReporter.dll. Можно туть глянуть: Code:
Непосредственной загрузкой AQtimeCoreEx.dll занимается библиотека AQtimeCore.dll(кто бы мог подумать): Code:
Что я думаю по этому поводу: 1) Можно попробовать самому подгрузить AQtimeCoreEx.dll и эпично наплевать на AQtimeCore.dll(который тоже подгружается в процессе) 2) aqReporter.dll загружается вместе с главным .exe - он хукает WinAPI, мы хукаем его. ![]() |
|
Создано: 06 апреля 2013 21:30 · Личное сообщение · #20 |
|
Создано: 07 апреля 2013 00:28 · Поправил: ELF_7719116 · Личное сообщение · #21 Короче, взял и просто возвратил 0 в EAX (AQtimeCoreEx.dll) где Code:
и все запустилось ![]() Прога - демо, часть функций недоступна. ![]() ![]() |
|
Создано: 07 апреля 2013 01:47 · Поправил: egorovshura · Личное сообщение · #22 ELF_7719116 Это только начало. Ты занопил вызов функции которая вызывает hasp_login. Надо еще патчить hasp_get_session_info. Но самое главное надо перехватывать hasp_decrypt и подсовывать нужное расшифрованное значение. Потому что hasp_decrypt возвращает GUID интерфейса, который потом используется в проге. И если не вернуть нормальное значение, прога просто ничего делать не будет. Попробуй, например, загрузить какой-нить exe (тот же AQTime.exe) и запустить профайлинг нажав зелененькую кнопку "пуск". По идее ничего не должно произойти, хотя на самом деле должно запуститься профилируемое приложение. На самом деле, с большой долей вероятности можно сказать, что trial и pro версии - это один и тот же бинарник. Отличие только в лицензии. Т.е. если hasp взращает trial, то приложение и ведет себя как триал, а если pro, то и приложение превращается в про. ![]() |
|
Создано: 07 апреля 2013 09:35 · Личное сообщение · #23 Насколько я понимаю, hasp_login ещ хэндл возвращает и через него работает(типа CreateFile). AQtimeCoreEx.dll. hasp_get_session_info ? Code:
hasp_decrypt тоже в AQtimeCoreEx.dll?! Типа выделяется динамически память, ложатся закриптованые байты и туда вызов идет? Кстати, не заметил, что защита проверяла, патчены ли dll или нет. Опять же, свой загрузчик можно записать в aqReporter.dll(который постановку хуков выполняет) egorovshura пишет: Т.е. если hasp взращает trial, то приложение и ведет себя как триал здесь? Code:
![]() |
|
Создано: 07 апреля 2013 11:47 · Личное сообщение · #24 ELF_7719116 Да hasp_login возвращает хэндл, который потом во все функции передается. Code:
Но если патчить, то можно на него забить. Все hasp функции прилинкованы к AQtimeCoreEx.dll. hasp_decrypt тоже там. sub_1000DEB0 берет xml который возвращает hasp_get_sessioninfo Code:
и используя msxml берет значение элемента license. Я пробовал подменять trial на perpetual, но это только изменяет текст в Help/About. Pro фичи не включаются. Я так и не понял где еще проверяется на триальность. Возможно hasp API есть и в других модулях. ![]() |
|
Создано: 07 апреля 2013 13:12 · Поправил: ELF_7719116 · Личное сообщение · #25 Слово Demo мне не нравиться - может версия изначально урезана и pro фитчи тут попросту отсутствуют. Одна зацепка есть еще в самом AQtime.exe: Code:
![]() |
|
Создано: 07 апреля 2013 14:14 · Личное сообщение · #26 Думаю, что бинарник все-таки не урезан. Иначе зачем им делать проверку на perpetual в xml. About box не статичный, а изменяет "показания" в зависимости от лицензии. Также предыдущие версии были полноценными. Это место из AQTime.exe похоже на один из методов COM интерфейса. При запуске не из-под COM брейк там не срабатывает. ![]() |
|
Создано: 07 апреля 2013 14:48 · Личное сообщение · #27 Не совсем в тему, но все равно хочу спросить, ибо не понимаю. К примеру, в этой AQTime обычный WinAPI MessageBox(который потом вызывает MessageBoxTimeoutA и тд) вызывается через 100500 обёрток(wrappers), которые, в принципе, не нужны. Возможно я не модный или отстал от программистского прогресса, неужели вся эта ересь - нормальное явление? ![]() |
|
Создано: 07 апреля 2013 16:10 · Личное сообщение · #28 Я так понимаю первая обертка - это чтобы WinAPI типы вроде LPSTR превратить в стандартные типы Delphi вроде string. Следующие обертки могут быть для того, чтобы выдавать определенный тип сообщений, например ошибку. Дело в том что Delphi очень плохо инлайнит функции. С++ компилятор мог бы самостоятельно заинлайнить несколько слоев, а Delphi так не может. ![]() |
|
Создано: 07 апреля 2013 19:02 · Личное сообщение · #29 Гм, может, qt framework используется? Вот и обёртки. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 07 апреля 2013 20:11 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Программирование —› Отловить момент загрузки dll |