Blog. Just Blog

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

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

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

С офсайта можно скачать несколько вариантов программы, они отличаются только языками интерфейса и платформами. Я буду исследовать, естественно, русскоязычный вариант под Windows. Распаковываем архив, запускаем. Вылазит наг-окно, о котором я говорил:

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

Поищем строчку из окна в файле. Он, кстати, ничем не упакован. Для ускорения процесса сразу же отправим файл на дизассемблирование.

Нехорошая строка найдена
Нехорошая строка найдена

Строчка нашлась, она хранится в юникоде. Переходим к листингу дизассемблера. На строку сообщения ссылается один единственный указатель:
  1. .rdata:0053ED38 off_53ED38      dd offset aThisCopyOfSpre
  2. ; DATA XREF: DialogFunc+4C
  3. .rdata:0053ED38 ; "This copy of Spread32 is Shareware.\nFor"...
На него, в свою очередь, ссылается следующий код:
  1. ; Выбор действия: инициализация окна, создание, закрытие
  2. .text:00445380                 mov     eax, [esp+arg_4]
  3. .text:00445384                 sub     esp, 34h
  4. .text:00445387                 sub     eax, 110h
  5. .text:0044538C                 jz      short loc_4453BA
  6. .text:0044538E                 dec     eax
  7. .text:0044538F                 jnz     short loc_44539A
  8. .text:00445391                 cmp     [esp+34h+arg_8], 50Ch
  9. .text:00445398                 jz      short loc_4453A2
  10. .text:0044539A loc_44539A:
  11. .text:0044539A                 xor     eax, eax
  12. .text:0044539C                 add     esp, 34h
  13. .text:0044539F                 retn    10h
  14. .text:004453A2 ; -----------------------------------------
  15. .text:004453A2 loc_4453A2:
  16. .text:004453A2                 mov     eax, [esp+34h+hDlg]
  17. .text:004453A6                 push    0               ; nResult
  18. .text:004453A8                 push    eax             ; hDlg
  19. .text:004453A9                 call    ds:EndDialog
  20. .text:004453AF                 mov     eax, 1
  21. .text:004453B4                 add     esp, 34h
  22. .text:004453B7                 retn    10h
  23. .text:004453BA ; -----------------------------------------
  24. .text:004453BA loc_4453BA:
  25. .text:004453BA                 mov     ecx, ds:lpCaption
  26. .text:004453C0                 push    esi
  27. .text:004453C1                 mov     esi, [esp+38h+hDlg]
  28. .text:004453C5                 push    ecx             ; lpWideCharStr
  29. .text:004453C6                 push    esi             ; hWnd
  30. .text:004453C7                 call    sub_41A2E0
  31. ; Загрузить строку и записать ее в наг-окно
  32. .text:004453CC                 mov     edx, ds:off_53ED38
  33. .text:004453D2                 push    edx             ; lpWideCharStr
  34. .text:004453D3                 push    50Bh            ; nIDDlgItem
  35. .text:004453D8                 push    esi             ; hDlg
  36. .text:004453D9                 call    sub_445420
  37. .text:004453DE                 add     esp, 14h
  38. .text:004453E1                 call    near ptr off_52B600+0D3h
  39. .text:004453E6                 push    eax
  40. .text:004453E7                 mov     eax, ds:off_53E604
  41. .text:004453EC                 push    eax
  42. .text:004453ED                 call    near ptr off_52B600+0D3h
  43. .text:004453F2                 push    eax             ; Format
  44. .text:004453F3                 lea     ecx, [esp+44h+WideCharStr]
  45. .text:004453F7                 push    offset a8xS8x   ; "%8X\n%s\n%8X"
  46. .text:004453FC                 push    ecx             ; String
  47. .text:004453FD                 call    _swprintf
  48. .text:00445402                 lea     edx, [esp+4Ch+WideCharStr]
  49. .text:00445406                 push    edx             ; lpWideCharStr
  50. .text:00445407                 push    50Ch            ; nIDDlgItem
  51. .text:0044540C                 push    esi             ; hDlg
  52. .text:0044540D                 call    sub_445420
  53. .text:00445412                 add     esp, 20h
  54. .text:00445415                 xor     eax, eax
  55. .text:00445417                 pop     esi
  56. .text:00445418                 add     esp, 34h
  57. .text:0044541B                 retn    10h
Что мы имеем? Процедуру обработчика наг-окна, которая выполняет три действия: инициализация окна с записью в него заголовка и строки сообщения о шароварной копии, открытие окна и его закрытие. Просто пропатчить начало функции на RET не получится, наг-окно так и будет висеть без текста, но к тому же без возможности его закрытия. Значит надо изменить обработчик, чтобы при любом действии вызывалась функция закрытия EndDialog. Для этого два условных перехода по адресам 0044538C и 0044538F забиваем NOP'ами, а третий условный переход по адресу 00445398 заменяем на безусловный JMP. Сохраняем изменения, запускаем программу. Надоедливое окно при запуске исчезло. Попробуем теперь выполнить какие-нибудь файловые операции, например, открыть файл и сохранить его под другим именем. И тоже не появляется никаких нежелательных окон. Цель достигнута. При желании можно даже сделать универсальный патч для всех будущих версий и различных языков.

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

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

Комментарии

Отзывы посетителей сайта о статье
xussr (27.01.2018 в 22:36):
IDA в помощ все сраслось спасибо за пример!
xussr (04.12.2017 в 07:50):
Как найти указатели?
NPV (14.07.2017 в 16:48):
ManHunter, разобрался как искать в Unicode и выделять текст, но не могу понять как искать указатели сейчас делаю F8-F6(встаю на строку .rdata)-F6, но картинка совсем не та. Всё ли так делаю? или на этом этапе уже не в hiew работаем?
ManHunter (13.07.2017 в 20:57):
Все версии ломаются одинаково
NPV (13.07.2017 в 20:17):
ManHunter, пытаюсь то же самое проделать с новой версией - не могу найти текста в hex редакторе, анализаторы говорят "не залочено", я что-то не так делаю или автор программы доработал?
Андрей (27.01.2016 в 11:26):
В мире пятигагибайтных мсоффисов и гагабайтных либреоффисов иногда нужно просто взять и ПОСЧИТАТЬ.
Из живых аналогов только GS-Calc, но она триальная, 30-ти дневная.
ManHunter (10.08.2011 в 10:44):
А я бы тоже не отказался от аналога Word такого же размера :) Но пока его нет.
Isaev (09.08.2011 в 00:52):
Классная программка!
Ещё бы от OpenOfice файлы понимала цены бы ей вообще не было
ManHunter (07.08.2011 в 10:28):
Ну кто ж так JMP'ы NOP'ит? Надо ж все байты команды забивать, а не только первый. Посмотри в режиме дизассемблера сколько они занимают байт.
Guest (07.08.2011 в 08:37):
http://img33.imageshack.us/img...10807001.jpg
после сохранения вылетает. что я делаю не так?
dgkf (05.08.2011 в 20:07):
лучше SoftMaker Office 2010: занимает 9Мб (без спелчекера) и поддерживает работу с docx, xlsx, то почти полноценный Office (кроме VBS)
ManHunter (05.08.2011 в 16:08):
Скорее всего это была какая-то утекшая ретайловая версия или уже подлеченная демка.
Matsist (05.08.2011 в 16:07):
Я видел эту программку в сборке FloppyOffice, сборка портативных офисных крохотуль) Spread32 очень понравилась! Правда ни на какие окна я не натыкался, видимо была ранняя чисто бесплатная версия.
landf (04.08.2011 в 02:32):
Пасиб, посмотрю.
ManHunter (03.08.2011 в 21:46):
AbiWord, Atlantis Word Processor, нет?
landf (03.08.2011 в 21:20):
А такой же невесомости, совместимости и мобильности "Word" никому не попадался?
ManHunter (02.08.2011 в 22:35):
Какой-то FileInsight неповоротливый, имхо. HIEW как-то привычнее.
Zhelezyaka (02.08.2011 в 22:29):
Спасибо, маэстро, всё получилось..)))
кстати, чтобы "отутюжить", использовал FileInsight (http://download.nai.com/products/mcafee-avert/fileinsight.zip)
мне понравилось)
Zhelezyaka (02.08.2011 в 22:15):
сегодня ещё одно открытие, что NOP: 0x90, блин, а я привык что 0х00, ну, у микроконтроллеров..
Zhelezyaka (02.08.2011 в 11:40):
опа, теперь и я люблю таблицы, спасибо)
ManHunter (02.08.2011 в 10:59):
74h -> EBh
Beginner (02.08.2011 в 10:57):
а как jz заменить на безусловный переход?

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

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

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