Blog. Just Blog

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

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

Программа Remo Repair ZIP предназначена для восстановления поврежденных архивов в формате ZIP. Причины повреждения могут быть разными: неисправность носителя, программный сбой, вирусная атака и многое другое. Remo Repair ZIP вытащит из архива все, что только получится. Полезная в хозяйстве программа, но без регистрации восстановленная информация только показывается, сохранить ее не удастся. Это нехорошо. Придется привести программу в должный порядок.

Забираем с офсайта дистрибутив, устанавливаем, смотрим. В папке с программой несколько исполняемых файлов, нас интересует только rsziprpr.exe. Он ничем не упакован, отправляем его на дизассемблирование. Теперь потестируем программу на предмет триальности. Действительно, при попытке что-то сохранить появляется вот такое окно:

Триальное окно
Триальное окно

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

Строка в файле
Строка в файле

Первый же заход оказывается удачным. Обнаруживается строка, в которой присутствует "IsRegistered". Было бы странно, если бы она использовалась для чего-то кроме проверки статуса регистрации. Перейдем в дизассемблер и посмотрим, где и как она используется.
  1. .text:00441C24 dword_441C24    dd 3
  2. .text:00441C28                 dd offset dword_441C2C
  3. .text:00441C2C dword_441C2C    dd 0FFFFFDE8h, 1FEh
  4. .text:00441C34                 dd offset aSzisregistered ; "szIsRegistered"
  5. .text:00441C38                 dd 0FFFFFDDCh, 4
  6. .text:00441C40                 dd offset aSzallkeys_soft ; "szALLKEYS_SOFTREG"
  7. .text:00441C44                 dd 0FFFFFDD0h, 4
  8. .text:00441C4C                 dd offset aSzkeys_softreg ; "szKEYS_SOFTREG"
  9. .text:00441C50 aSzkeys_softreg db 'szKEYS_SOFTREG',0
  10. .text:00441C5F aSzallkeys_soft db 'szALLKEYS_SOFTREG',0
  11. .text:00441C71 aSzisregistered db 'szIsRegistered',0
Вот такой милый бутерброд из строк, указателей на строки и указателя на массив указателей на строки. Ничего страшного, подобные конструкции нам уже встречались не раз. Теперь посмотрим, где это все используется.
  1. .text:00441960                 push    ebp
  2. .text:00441961                 mov     ebp, esp
  3. .text:00441963                 push    0FFFFFFFFh
  4. .text:00441965                 push    offset loc_469ABD
  5. .text:0044196A                 mov     eax, large fs:0
  6. .text:00441970                 push    eax
  7. .text:00441971                 sub     esp, 238h
  8. .text:00441977                 push    esi
  9. .text:00441978                 push    edi
  10. .text:00441979                 push    ecx
  11. .text:0044197A                 lea     edi, [ebp+var_244]
  12. .text:00441980                 mov     ecx, 8Eh
  13. .text:00441985                 mov     eax, 0CCCCCCCCh
  14. .text:0044198A                 rep stosd
  15. .text:0044198C                 pop     ecx
  16. .text:0044198D                 mov     eax, dword_4AE028
  17. .text:00441992                 xor     eax, ebp
  18. .text:00441994                 mov     [ebp+var_10], eax
  19. .text:00441997                 push    eax
  20. .text:00441998                 lea     eax, [ebp+var_C]
  21. .text:0044199B                 mov     large fs:0, eax
  22. .text:004419A1                 mov     [ebp+var_14], ecx
  23. .text:004419A4                 push    1FEh            ; Size
  24. .text:004419A9                 push    0               ; Val
  25. .text:004419AB                 lea     eax, [ebp+Dst]
  26. .text:004419B1                 push    eax             ; Dst
  27. .text:004419B2                 call    memset
  28. .text:004419B7                 add     esp, 0Ch
  29. .text:004419BA                 push    1FEh            ; int
  30. .text:004419BF                 lea     ecx, [ebp+Dst]
  31. .text:004419C5                 push    ecx             ; Dst
  32. .text:004419C6                 sub     esp, 1Ch
  33. .text:004419C9                 mov     ecx, esp
  34. .text:004419CB                 mov     [ebp+var_238], esp
  35. .text:004419D1                 push    offset aSoftreg_0 ; "SOFTREG"
  36. .text:004419D6                 call    sub_409F80
  37. .text:004419DB                 mov     [ebp+var_240], eax
  38. .text:004419E1                 mov     edx, [ebp+var_240]
  39. .text:004419E7                 mov     [ebp+var_244], edx
  40. ...
Далеко ходить не пришлось, прямо над строками располагается функция, ссылающаяся на них. Но главное, что в ней присутствует приметная ссылка на строку "SOFTREG". Если посмотреть все места, откуда эта функция вызывается, то везде присутствует проверка регистра AL на предмет нулевого значения. То есть при хорошем раскладе эта функция должна возвращать AL=1. Отлично, впечатываем в ее начало по адресу 00441960 пару команд MOV AL,1 и RET, затем сохраняем изменения и пробуем что-нибудь восстановить.

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

Первое, что сразу бросается в глаза, кнопка "Register" поменяла свое название на "Registered". Ну и при восстановлении все данные сохраняются куда сказано. Цель достигнута. Кстати, у разработчика на сайте есть еще немало полезных программ аналогичного назначения, а защита на них обходится абсолютно так же.

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

Комментарии

Отзывы посетителей сайта о статье
Авася (29.05.2022 в 07:05):
С их видео-рекаверилками это не прокатывает. Мало им al-а равного 1.
ManHunter (26.03.2022 в 07:56):
Для потребителей могу написать попроще. Если программа в принципе не предназначена для работы с интернетом, то ей любой доступ в сеть должен быть перекрыт на фаерволе. Это правило касается не только этой проги, а вообще.
Жека (26.03.2022 в 01:11):
Товарищи-потребители санкционного импорта вас бы не поняли про баню:) Но смешно! Как говорится, недружественным нам "товарищам" всегда необходима баня во всех их окнах:)
ManHunter (26.03.2022 в 00:22):
- Товарищи, что за бардак!! Мне из окна видна женская баня, постоянно отвлекает!!!!
- Но из окна ничего не видно.
- Ага!!! А вы на шкаф залезьте!!!!
Жека (26.03.2022 в 00:05):
Всё замечательно, но есть одно но. Если нажать на вновь появившемся после патча - названии "Registered", всплывает окно об активации и если ради прикола нажать на кнопку АКТИВИРОВАТЬ, начнёт загружаться с Инета куча хлама размером больше 50 Мб. Лечится этот недочёт следующим патчем:     0040E180  55  <-- C3     push ebp
Можно и вашим любимым MOV AL,1 и RET, но мне понравился просто RET.

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

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

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