Blog. Just Blog

Исследование защиты программы Franzis NEAT projects 2

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

Вообще я стараюсь придерживаться правила, что после выкладывания разбора очередной защиты, больше не трогать ни одной программы этого разработчика. Но тут уж очень классная программа, да и защита немного поменялась, так что пусть это будет шпаргалка для самого себя. Franzis NEAT projects позволяет в автоматическом режиме убирать с фотографий все движущиеся предметы. Например, в поездке вы делаете несколько снимков какой-нибудь достопримечательности с разными интервалами времени, затем отправляете всю пачку фотографий в программу, она анализирует все возможные статичные области и составляет из них чистое изображение. Словно по волшебству из кадра пропадает вся человечина. Причем даже не обязательно пользоваться штативом, программа сама выровняет все кадры.

Забираем с офсайта дистрибутив, устанавливаем. Ссылка может меняться от версии к версии, если что, то уточняйте свежий линк на странице загрузки. В архив зачем-то упакованы инсталляторы для Mac и Windows, из-за чего он имеет такой монстрячий размер. А в исполняемом файле инсталлятора содержатся два дистрибутива для 32-битной и 64-битной версии Windows. Такая вот матрешка в немецком исполнении. Главный исполняемый файл ничем не упакован, сразу отправляем его на дизассемблирование. Теперь что касается ограничений. Программа при старте вываливает триальное окно с предложением активировать ее, без регистрации работает 30 дней, при сохранении итогового файла накладывает на него триальный текстовый маркер. Ну и всякое по мелочи типа надписей "TRIAL" в заголовке главного окна и в окне "О программе".

Перебирая поиском характерные строчки типа "registered", "trial", "activated", "expired" и тому подобные, выходим на вот такой интересный набор данных в главном исполняемом файле:

Переменные защиты
Переменные защиты

Если вы раньше видели навесной протектор Armadillo, то без труда узнаете названия основных переменных окружения, которые в нем используются для реализации триала и регистрации. На этом файле никакого Armadillo нет, но разработчики защиты явно были им вдохновлены. За регистрацию программы, как и в упомянутом протекторе, отвечает переменная "ALTUSERNAME". Посмотрим код, где она используется.
  1. .text:007FF160                 push    0FFFFFFFFh
  2. .text:007FF162                 push    offset loc_878A5C
  3. .text:007FF167                 mov     eax, large fs:0
  4. .text:007FF16D                 push    eax
  5. .text:007FF16E                 sub     esp, 10h
  6. .text:007FF171                 push    ebx
  7. .text:007FF172                 push    ebp
  8. .text:007FF173                 push    esi
  9. .text:007FF174                 push    edi
  10. .text:007FF175                 mov     eax, dword_DE84C0
  11. .text:007FF17A                 xor     eax, esp
  12. .text:007FF17C                 push    eax
  13. .text:007FF17D                 lea     eax, [esp+30h+var_C]
  14. .text:007FF181                 mov     large fs:0, eax
  15. .text:007FF187                 mov     esi, ecx
  16. .text:007FF189                 xor     ebx, ebx
  17. .text:007FF18B                 mov     [esp+30h+var_10], ebx
  18. .text:007FF18F                 mov     ebp, ds:?fromAscii_helper
  19. .text:007FF195                 push    0FFFFFFFFh
  20. .text:007FF197                 push    offset aAltusername ; "ALTUSERNAME"
  21. .text:007FF19C                 mov     [esp+38h+var_4], ebx
  22. .text:007FF1A0                 call    ebp
  23. .text:007FF1A2                 add     esp, 8
  24. .text:007FF1A5                 mov     [esp+30h+var_18], eax
  25. .text:007FF1A9                 mov     edi, [esp+30h+arg_0]
  26. .text:007FF1AD                 lea     eax, [esp+30h+var_18]
  27. .text:007FF1B1                 push    eax
  28. .text:007FF1B2                 push    edi
  29. .text:007FF1B3                 lea     ecx, [esi+1Ch]
  30. .text:007FF1B6                 mov     [esp+38h+var_4], 1
  31. .text:007FF1BE                 call    sub_8040C0
  32. .text:007FF1C3                 mov     ecx, [esp+30h+var_18]
  33. .text:007FF1C7                 mov     [esp+30h+var_10], 1
  34. .text:007FF1CF                 mov     byte ptr [esp+30h+var_4], bl
  35. .text:007FF1D3                 or      edx, 0FFFFFFFFh
  36. .text:007FF1D6                 lock xadd [ecx], edx
  37. .text:007FF1DA                 mov     esi, ds:?free
  38. .text:007FF1E0                 jnz     short loc_7FF1EC
  39. .text:007FF1E2                 mov     eax, [esp+30h+var_18]
  40. .text:007FF1E6                 push    eax
  41. .text:007FF1E7                 call    esi ; QString::free
  42. .text:007FF1E9                 add     esp, 4
  43. .text:007FF1EC loc_7FF1EC:
  44. .text:007FF1EC                 push    0FFFFFFFFh
  45. .text:007FF1EE                 push    offset aDefault_0 ; "DEFAULT"
  46. .text:007FF1F3                 call    ebp
  47. .text:007FF1F5                 add     esp, 8
  48. .text:007FF1F8                 mov     [esp+30h+var_14], eax
  49. .text:007FF1FC                 push    ebx
  50. .text:007FF1FD                 lea     ecx, [esp+34h+var_14]
  51. ...
Ну да, даже проверка выполняется аналогичным образом - путем сравнения со строкой "DEFAULT". Теперь посмотрим, где и как используются результаты этой функции. По перекрестным ссылкам поочередно смотрим все участки кода и выясняем, что все они имеют примерно одинаковую структуру:
  1. .text:007FF9A1                 push    ebx
  2. .text:007FF9A2                 lea     eax, [esp+8+var_4]
  3. .text:007FF9A6                 push    eax
  4. ; Вызвать функцию проверки
  5. .text:007FF9A7                 call    sub_7FF160
  6. .text:007FF9AC                 mov     ecx, [eax]
  7. ; Строка регистрационного имени пустая?
  8. .text:007FF9AE                 cmp     dword ptr [ecx+8], 0
  9. .text:007FF9B2                 mov     edx, [esp+8+var_4]
  10. ; Если не пустая, то установить регистр BL=1
  11. .text:007FF9B6                 setnz   bl
  12. .text:007FF9B9                 or      eax, 0FFFFFFFFh
Заменяем все команды SETNZ BL в таких блоках на команду MOV BL,1, не забывая NOP'ить третий байт заменяемой команды, чтобы сохранить размер кода. Всего таких замен будет четыре. Сохраняем изменения, запускаем программу.

Программа успешно "зарегистрирована"
Программа успешно "зарегистрирована"

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

Кстати, подобные действия можно выполнить в графическом редакторе Adobe Photoshop. Для этого откройте меню "Файл", затем "Сценарии" и "Статистика...":

Открываем меню Photoshop
Открываем меню Photoshop

В открывшемся окне выберите папку с заготовленной пачкой фотографий или отдельные фотографии, в селекте "Выбрать режим стека" выберите пункт "Медиана", проставьте галочку "Попытаться автоматически выровнять исходные изображения".

Загружаем отдельные кадры
Загружаем отдельные кадры

После нажатия "OK" в дело вступает автоматика и вы увидите, как ненавистные куски мяса исчезают из кадра.

Очищенный кадр
Очищенный кадр

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

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 466 | Комментариев: 6

Комментарии

Отзывы посетителей сайта о статье
ManHunter (12.01.2021 в 00:17):
Rustamer, порог вхождения с каждым годом все ниже и ниже :( Оплачивать работу разных специалистов под разные платформы, естественно, выходит несоизмеримо дороже, чем нанять за коробку доширака студента, который слегка выучил JS/HTML/CSS или на чем там этот электрон вращается.
Rustamer (11.01.2021 в 18:57):
Зачастую и лепить не нужно бывает. Тот же дотнет делает максимум за нас из коробки. И чистый x86 получим лишь при специальном желании/необходимости. Бывает пралы и либы сторонние уже на x64 только затаргетены. Это же самый простой способ решения проблемы с OutOfMemoryException :) Да и сейчас у многих людей уже оперативки дофига. Лучше бы имхо массового Electron-а было в нашей жизни меньше. Слишком много этой гадости развелось - половина программ уже на нем сидит.
ManHunter (11.01.2021 в 17:06):
Добавил для себя шпаргалку, как удалить движущиеся объекты в фотошопе. Действие не самое частое, но иногда бывает нужно.
Аноним (11.01.2021 в 15:16):
Если это софт, потенциально интересный атакующему (например, браузер), то смысл есть. К 64-разрядным процессам современные винды применяют более лучшие техники безопасности.
ManHunter (11.01.2021 в 07:42):
Цитатазачем множить сущности и лепить добавочные х64-версии

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

ЦитатаДругих причин, кроме задротства, не наблюдается.

"Так могу, вот так могу, и так могу" (ц)ТикТок
user (11.01.2021 в 04:45):
Вообще, касательно прикладных програам,
- непонятно, зачем множить сущности и лепить добавочные х64-версии.
Это может понадобиться только при необходимости использовать
непрервные блоки памяти размером больше 4Gb.
Других причин, кроме задротства, не наблюдается.

Софт, где реально используется адресация х64,
уже выпускается только для платформы x64, без дубликации для x32.

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

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

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