Blog. Just Blog

Исследование защиты программы Advanced Find and Replace

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

Advanced Find and Replace, как можно догадаться из названия, предназначена для поиска и пакетной замены строк в текстовых файлах и документах. Работает шустро, поддерживает различные опции поиска, в том числе и регулярки. Только расценки за всю эту красоту вообще зашкаливают. Если отстегивать деньги за каждую хорошую программу, то можно остаться без штанов.

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

Строки сообщений в файле
Строки сообщений в файле

Рядом обнаруживаются другие интересные строчки, например, что время истекло и надо в натуре это купить, а также наименования разных типов лицензий. Дизассемблер закончил создание листинга, давайте посмотрим, где формируются названия лицензий.
  1. CODE:005C53F9                 mov     dl, 1
  2. CODE:005C53FB                 mov     eax, off_5B1FF4
  3. CODE:005C5400                 call    sub_488548
  4. CODE:005C5405                 mov     edx, ds:off_6022E0
  5. CODE:005C540B                 mov     [edx], eax
  6. ; Проверить статус регистрации
  7. CODE:005C540D                 cmp     byte ptr [ebx+640h], 0
  8. ; Регистрации нет, вывести остаток дней
  9. CODE:005C5414                 jz      loc_5C553D
  10. CODE:005C541A                 xor     edx, edx
  11. CODE:005C541C                 mov     eax, [ebx+3DCh]
  12. CODE:005C5422                 call    sub_467FA8
  13. CODE:005C5427                 xor     edx, edx
  14. CODE:005C5429                 mov     eax, [ebx+3B8h]
  15. CODE:005C542F                 call    sub_47F974
  16. CODE:005C5434                 xor     edx, edx
  17. CODE:005C5436                 mov     eax, [ebx+43Ch]
  18. CODE:005C543C                 call    sub_47F974
  19. CODE:005C5441                 xor     edx, edx
  20. CODE:005C5443                 mov     eax, [ebx+3BCh]
  21. CODE:005C5449                 call    sub_47F974
  22. CODE:005C544E                 xor     edx, edx
  23. CODE:005C5450                 mov     eax, [ebx+3B4h]
  24. CODE:005C5456                 call    sub_47F974
  25. CODE:005C545B                 mov     eax, ds:off_602178
  26. CODE:005C5460                 push    eax
  27. CODE:005C5461                 mov     eax, ds:off_6024E4
  28. CODE:005C5466                 push    eax
  29. CODE:005C5467                 mov     ecx, ds:off_602318
  30. CODE:005C546D                 mov     edx, ds:off_602628
  31. CODE:005C5473                 mov     eax, [ebp+var_C]
  32. CODE:005C5476                 call    sub_5B1BA0
  33. CODE:005C547B                 mov     eax, ds:off_602178
  34. CODE:005C5480                 mov     eax, [eax]
  35. CODE:005C5482                 call    sub_40B3EC
  36. CODE:005C5487                 sub     eax, 2
  37. CODE:005C548A                 jz      short loc_5C5494
  38. CODE:005C548C                 dec     eax
  39. CODE:005C548D                 jz      short loc_5C54A3
  40. CODE:005C548F                 dec     eax
  41. CODE:005C5490                 jz      short loc_5C54B2
  42. CODE:005C5492                 jmp     short loc_5C54C1
  43. CODE:005C5494 ; --------------------------------------
  44. CODE:005C5494 loc_5C5494:
  45. CODE:005C5494                 lea     eax, [ebp+var_8]
  46. CODE:005C5497                 mov     edx, offset aProfessional ; "Professional"
  47. CODE:005C549C                 call    sub_405240
  48. CODE:005C54A1                 jmp     short loc_5C54CE
  49. CODE:005C54A3 ; --------------------------------------
  50. CODE:005C54A3 loc_5C54A3:
  51. CODE:005C54A3                 lea     eax, [ebp+var_8]
  52. CODE:005C54A6                 mov     edx, offset aSite ; "Site"
  53. CODE:005C54AB                 call    sub_405240
  54. CODE:005C54B0                 jmp     short loc_5C54CE
  55. CODE:005C54B2 ; --------------------------------------
  56. CODE:005C54B2 loc_5C54B2:
  57. CODE:005C54B2                 lea     eax, [ebp+var_8]
  58. CODE:005C54B5                 mov     edx, offset aWorld ; "World"
  59. CODE:005C54BA                 call    sub_405240
  60. CODE:005C54BF                 jmp     short loc_5C54CE
  61. CODE:005C54C1 ; --------------------------------------
  62. CODE:005C54C1 loc_5C54C1:
  63. CODE:005C54C1                 lea     eax, [ebp+var_8]
  64. CODE:005C54C4                 mov     edx, offset aPersonal ; "Personal"
  65. CODE:005C54C9                 call    sub_405240
  66. CODE:005C54CE loc_5C54CE:
  67. CODE:005C54CE                 mov     eax, ds:off_6022E0
  68. CODE:005C54D3                 mov     eax, [eax]
  69. CODE:005C54D5                 mov     eax, [eax+344h]
  70. CODE:005C54DB                 xor     edx, edx
  71. CODE:005C54DD                 call    sub_467FA8
  72. CODE:005C54E2                 mov     eax, ds:off_6022E0
Проверяется очень приметная конструкция byte ptr [ebx+640h], на основании значения этого байта или формируется сообщение об оставшихся днях или выбирается тип лицензии. Надо найти место, где этот байт инициализируется. Поиском по подстроке "+640h]," обнаруживается вот такой код:
  1. CODE:005C521F                 call    sub_4051FC
  2. CODE:005C5224                 mov     eax, ds:off_6024E0
  3. CODE:005C5229                 mov     edx, offset aSoftwareAdva_2
  4. ; "Software\\Advanced Find and Replace 8"
  5. CODE:005C522E                 call    sub_4051FC
  6. CODE:005C5233                 mov     eax, ds:off_6025CC
  7. CODE:005C5238                 mov     edx, offset aAfr8_0 ; "afr8"
  8. CODE:005C523D                 call    sub_4051FC
  9. CODE:005C5242                 lea     eax, [ebp+var_C]
  10. CODE:005C5245                 call    sub_5BF804
  11. CODE:005C524A                 lea     eax, [ebp+var_C]
  12. CODE:005C524D                 call    sub_5B1B84
  13. CODE:005C5252                 mov     eax, [ebp+var_C]
  14. CODE:005C5255                 call    sub_405478
  15. CODE:005C525A                 test    eax, eax
  16. CODE:005C525C                 jle     short loc_5C5267
  17. CODE:005C525E                 mov     byte ptr [ebx+640h], 1
  18. CODE:005C5265                 jmp     short loc_5C528E
  19. CODE:005C5267 ; --------------------------------------
  20. CODE:005C5267 loc_5C5267:
  21. CODE:005C5267                 mov     byte ptr [ebx+640h], 0
  22. CODE:005C526E                 mov     eax, ds:off_602224
  23. CODE:005C5273                 mov     dword ptr [eax], 15h
  24. CODE:005C5279                 call    sub_5BF678
  25. CODE:005C527E                 mov     eax, ds:off_6027AC
  26. CODE:005C5283                 cmp     dword ptr [eax], 0
  27. CODE:005C5286                 mov     eax, ds:off_602940
Работа с реестром, после этого вызов нескольких функций, а затем ветвление алгоритма, в одном случае в байт регистрации записывается 1, то есть программа считается лицензионной, или же 0, если программа работает в триальном режиме. За все отвечает один условный переход по адресу 005C525C. Если его заменить на команды NOP, то при любом раскладе байт регистрации будет проинициализирован нужным нам значением. Патчим, сохраняем изменения.

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

После запуска все внешние упоминания о триальном режиме исчезли, перевод системной даты на пару месяцев вперед тоже не сказывается на работоспособности. Только вот окно "О программе" выглядит немного странно, ну да ладно, переживем. Цель достигнута.

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

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

Комментарии

Отзывы посетителей сайта о статье
user (06.09.2020 в 22:56):
Тут есть два варианта - либо софт сообщает о "нарушении целостности" и не работает, либо не сообщает и работает втихаря с подлицой.
Была одна довольно популярная программка, так та сообщала,
мол "файл заражён вирусом" и тут же затирала MBR диска.
Конечно, это скотство, нормальный софт такого делать не должен.
Имиджевые потери таких хулиганов не тревожат,
а способа наказать их как-то иначе чаще всего не существует.
voffka (03.09.2020 в 16:00):
Андрей, Thaiphoon Burner вроде творил что-то такое с памятью, хотя автор софта сам та еще пасхалка.
ManHunter (03.09.2020 в 12:16):
Сталкивался, такие приколы от разработчиков были даже во времена MS-DOS. Их, конечно, выявляли и чморили всем миром, потому что целостность файла даже у легального пользователя могла быть попорчена битой дискеткой, вирусом, необычной конфигурацией окружения и еще пачкой всяких прочих причин.
Андрей (03.09.2020 в 12:07):
Спасибо за информацию.
Хотел задать вопрос.
Предыстория. В автоиндустрии полно специализированных программ. Которые так же имеют порой безумный ценник. Соответственно находятся энтузиасты, которые это дело поправляют. Так вот одна из фирм производящих данный софт, додумалась до того, что встроила в свой код "пасхалку". Т.е. проверку на подлинность/целостность. При не прохождении которого, программа порет софт подключенного к ней автожелеза. Затирает настройки и адаптации.

Срабатывает пасхалка не сразу, а по прошествии некоторого времени. И видимо не всегда. Т.е. действие её не очевидно. Поэтому ломанный софт успел разойтись по сообществам и наделать делов.

Собственно вопрос. В компьютерной индустрии с таким приемом ещё не сталкивались?

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

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

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