Blog. Just Blog

Исследование защиты программы InspectExe

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы InspectExe
Скриншот программы InspectExe

InspectExe - очень удобное расширение стандартного Проводника Windows для просмотра свойств исполняемых файлов. Кроме обычных вкладок добавляются новые вкладки с инструментами для просмотра секций исполняемого файла, функций импорта, ресурсов, параметров PE-заголовка, сертификатов и т.д. В общем, неплохое подспорье для реверсеров при первоначальном анализе своих жертв. InspectExe распространяется в двух вариантах - бесплатном с некоторыми заблокированными функциями и платном, где никаких ограничений, естественно, нет. Сейчас мы попробуем превратить бесплатную версию InspectExe в полнофункциональную, проведя анализ ее защиты, хотя в приличном обществе это называется не иначе как "вор у вора дубинку украл".

Скачиваем дистрибутив, устанавливаем. Запускать тут нечего, так как это динамическая библиотека, которая регистрируется инсталлятором и в дальнейшем подгружается Проводником по мере надобности.

Наг-окно
Наг-окно

Нам остается открыть свойства какого-нибудь исполняемого файла и посмотреть как проявляются ограничения незарегистрированной версии. Это два наг-окна примерно такого вида, как на скриншоте. Плюс невозможно посмотреть и скопировать ресурсы.

Диалоговое окно в ресурсах
Диалоговое окно в ресурсах

Откроем InspectExe.dll в редакторе ресурсов и поищем либо строки из наг-окна, либо диалоговые окна, которые с ними связаны. Вот первый наг-скрин. Его индекс в ресурсах - 116, или же 74h в шестнадцатеричной системе счисления. Поищем это значение в дизассемблере.
  1. ...
  2. .text:1000FC44                 mov     edx, [esp+30h+hWndParent]
  3. .text:1000FC48                 mov     eax, dword_1003585C
  4. .text:1000FC4D                 push    0               ; dwInitParam
  5. .text:1000FC4F                 push    offset DialogFunc ; lpDialogFunc
  6. .text:1000FC54                 push    edx             ; hWndParent
  7. ; Значение индекса 74h или же 116 в десятеричной системе
  8. .text:1000FC55                 push    74h             ; lpTemplateName
  9. .text:1000FC57                 push    eax             ; hInstance
  10. ; Открыть диалоговое окно с индексом 116
  11. .text:1000FC58                 call    ds:DialogBoxParamA
  12. .text:1000FC5E                 cmp     eax, 1
  13. .text:1000FC61                 jnz     short loc_1000FC38
  14. .text:1000FC63                 lea     ecx, [edi+80h]
  15. .text:1000FC69                 call    sub_100179A0
  16. .text:1000FC6E                 cmp     [edi+9Ch], esi
  17. .text:1000FC74                 jnz     short loc_1000FC38
  18. .text:1000FC76                 pop     edi
  19. ...
Если пролистнуть код чуть повыше, то увидите, как там что-то активно ксорится с разными константами, идет работа с реестром, выполняются какие-то проверки, но вся эта свистопляска в итоге завершается или командой MOV AL,1 и возвратом, или же выдачей этого диалогового окна и AL=0. Очень похоже на проверку ключа или серийного номера. Перейдем в начало процедуры проверки и впишем в ее начало две команды MOV AL,1 и RET 4. Сохраняем изменения, проверяем результат путем вызова свойств какого-нибудь исполняемого файла. Опаньки, теперь нам доступны для просмотра ресурсы, мы можем их даже копировать. Половина дела сделана.

Диалоговое окно в ресурсах
Диалоговое окно в ресурсах

Осталась вторая половина. Этот наг-скрин обычно появляется при переходе между вкладками. Он также без труда находится в ресурсах внутри все той же InspectExe.dll, только под индексом 119 или 77h в шестнадцатеричной системе счисления. В дизассемблере по этому индексу найдется несколько обращений к курсорам, они нас не интересуют, и легко отсеиваются по названиям функций, например:
  1. .text:10001296                 push    77h             ; lpCursorName
  2. .text:10001298                 push    eax             ; hInstance
  3. .text:10001299                 call    ds:LoadCursorA
  4. .text:1000129F                 mov     hCursor, eax
А вот этот кусочек кода выглядит гораздо подозрительнее. Тем более, что он оформлен в самостоятельную функцию и находится сразу же над пропатченной функцией проверки ключа.
  1. .text:1000FAF0                 mov     eax, [esp+hWndParent]
  2. .text:1000FAF4                 push    0Ch             ; int
  3. .text:1000FAF6                 add     ecx, 80h
  4. .text:1000FAFC                 push    77h             ; int
  5. .text:1000FAFE                 push    ecx             ; int
  6. .text:1000FAFF                 push    eax             ; hWndParent
  7. .text:1000FB00                 mov     ecx, offset dword_10035848 ; dwInitParam
  8. .text:1000FB05                 call    sub_100125F0
  9. .text:1000FB0A                 retn    4
Если посмотреть по перекрестным ссылкам все места откуда он вызывается, то можно увидеть, что это как раз участки кода, которые активируются при смене вкладок. Условных переходов тут нет, возвращаемые значения тоже никак не обрабатываются, поэтому просто записываем по адресу 1000FAF0 команду возврата RET 4 и сохраняем изменения.

Все ограничения с программы сняты
Все ограничения с программы сняты

Вот теперь все, теперь точно все ограничения по функционалу сняты, надоедливые наг-окна нас тоже не побеспокоят. Ну а как вы воспользуетесь свежеукраденной дубинкой - это уже остается целиком на вашей совести.

Поделиться ссылкой ВКонтакте
Просмотров: 6278 | Комментариев: 10

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ABRAHAM (04.04.2013 в 11:01):
thanks for replying ,after turning off dep works well... ;)
ManHunter (03.04.2013 в 18:48):
Disable your lame DEP and enjoy. And do not use translator next time, please :)
ABRAHAM (03.04.2013 в 18:25):
Под XP-sp3 показывает DEP ошибка, на самом деле рад, если вы можете пожалуйста, напишите SWF учебник по тем же ... Я мог бы что-то отсутствует ... Пасиб
считать
ManHunter (07.02.2013 в 19:47):
Никакого готового вареза тут не будет.
Миха- Ламер (07.02.2013 в 09:54):
А тот "инспектор" с предыдуще странице - он уже подломан = готов к использованию: а то у меня никаких дизассемлеров нет? micklevin@yandex.ru
lammer (03.02.2013 в 19:46):
INSPECT_EXE_CRYPTO_KEY_0  = 0xF4031B45;
INSPECT_EXE_CRYPTO_KEY_1  = 0x002C1BB7;
INSPECT_EXE_CRYPTO_KEY_2  = 0x30AC96E2;
INSPECT_EXE_CRYPTO_KEY_3  = 0x7EA70182;
INSPECT_EXE_CRYPTO_KEY_4  = 0x04E5F23C;
INSPECT_EXE_CRYPTO_KEY_5  = 0xB560722D;
INSPECT_EXE_CRYPTO_KEY_6  = 0xDAA51A50;
INSPECT_EXE_CRYPTO_KEY_7  = 0x15879BC3;
INSPECT_EXE_CRYPTO_KEY_8  = 0x0C9A4B1D;
INSPECT_EXE_CRYPTO_KEY_9  = 0x15ABCBF8;
INSPECT_EXE_CRYPTO_KEY_10 = 0x01920A3C;
INSPECT_EXE_CRYPTO_KEY_11 = 0xDEADDEED;
ManHunter (30.01.2013 в 21:35):
В HiEW переключаешься на просмотр кода, затем в режим редактирования и там патчишь все на чистом ассемблере.
Руслан (30.01.2013 в 19:20):
Еще вопрос, как быстро MOV AL,1 и RET 4 превратить в машинный код? Использовать справочник или это можно сделать в IDA?
ManHunter (30.01.2013 в 10:49):
IDA Pro
Руслан (30.01.2013 в 10:48):
Каким дизассемблером пользуетесь?

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0059 сек.) / Память: 4.5 Mb
Наверх