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

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

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

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