Blog. Just Blog

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

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

JPEG Imager от V-Methods Software - небольшая удобная программа для оптимизации графических файлов в формате JPEG, PNG и GIF. В ней собраны все основные инструменты, необходимые для работы с графикой: удаление шумов, изменение размера, корректировка цветности, контраста, яркости и т.д. Все управление интуитивно понятное. Конечно, все эти функции есть в серьезных графических пакетах типа Photoshop, но не всегда хочется запускать тяжеленный софт ради несложных корректировок изображения. Тут-то и окажется полезной программа JPEG Imager. Но как обычно все омрачается необходимостью расстаться с некоторой суммой денег за регистрацию.

Качаем дистрибутив, устанавливаем, запускаем. Из внешних признаков триальности - строка "Unregistered copy" в диалоговом окне "О программе". Исполняемый файл ничем не упакован, строка в нем находится легко.

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

В дизассемблере находим код, который на нее ссылается. А немного выше - проверка и условия срабатывания триальной ветки алгоритма:
  1. ...
  2. .text:0040918A                 mov     [ebp+var_4], edx
  3. .text:0040918D                 inc     dword ptr [ebx+1Ch]
  4. .text:00409190                 mov     word ptr [ebx+10h], 14h
  5. ; Прочитать двойное слово
  6. .text:00409196                 mov     ecx, [esi+0C34h]
  7. ; Сдвинуть на 10h бит вправо
  8. .text:0040919C                 sar     ecx, 10h
  9. ; Результат = 7E5A?
  10. .text:0040919F                 cmp     ecx, 7E5Ah
  11. .text:004091A5                 setz    al
  12. .text:004091A8                 and     eax, 1
  13. .text:004091AB                 test    al, al
  14. ; Нет, перейти на триальную ветку алгоритма
  15. .text:004091AD                 jz      short loc_40920B
  16. ; Программа зарегистрирована
  17. .text:004091AF                 mov     word ptr [ebx+10h], 20h
  18. .text:004091B5                 mov     edx, offset aRegisteredTo
  19. ; Строка "Registered to: "
  20. .text:004091BA                 lea     eax, [ebp+var_8]
  21. .text:004091BD                 call    sub_508548
  22. .text:004091C2                 inc     dword ptr [ebx+1Ch]
  23. .text:004091C5                 xor     edx, edx
  24. .text:004091C7                 mov     [ebp+var_C], edx
  25. ...
Код небольшой, но в нем сразу бросаются в глаза две сигнатуры - "+0C34h]" и "7E5Ah". Если поискать их в файле, то догадка подтвердится, это действительно условия срабатывания различных триальных веток алгоритма в программе, например:
  1. ...
  2. .text:004080AD                 mov     ecx, [esi+0C34h]
  3. .text:004080B3                 sar     ecx, 10h
  4. .text:004080B6                 cmp     ecx, 7E5Ah
  5. .text:004080BC                 setz    al
  6. .text:004080BF                 and     eax, 1
  7. .text:004080C2                 test    al, al
  8. .text:004080C4                 jnz     short loc_4080F7
  9. .text:004080C6                 mov     [ebp+var_38], 8
  10. .text:004080CC                 mov     edx, offset aWeAreSorryButY
  11. ; "We are sorry, but your 30-day trial per"...
  12. .text:004080D1                 lea     eax, [ebp+var_4]
  13. .text:004080D4                 call    sub_508548
  14. ...
Осталось найти место, где инициализируется двойное слово [reg+0C34h]. Этот код находится по тем же самым сигнатурам, что и триальные проверки:
  1. ...
  2. .text:0040F54C                 push    edx
  3. .text:0040F54D                 mov     ecx, [edx]
  4. .text:0040F54F                 call    dword ptr [ecx+20h]
  5. .text:0040F552                 cmp     eax, [ebp+var_10]
  6. ; Первая проверка зарегистрированности
  7. .text:0040F555                 jnz     short loc_40F592
  8. .text:0040F557                 push    60h
  9. .text:0040F559                 mov     eax, [ebp+var_10]
  10. .text:0040F55C                 push    eax
  11. .text:0040F55D                 mov     edx, [eax]
  12. .text:0040F55F                 call    dword ptr [edx+78h]
  13. .text:0040F562                 push    10000h
  14. .text:0040F567                 mov     ecx, [ebp+var_10]
  15. .text:0040F56A                 push    ecx
  16. .text:0040F56B                 mov     eax, [ecx]
  17. .text:0040F56D                 call    dword ptr [eax+30h]
  18. .text:0040F570                 test    eax, eax
  19. .text:0040F572                 setnle  dl
  20. .text:0040F575                 and     edx, 1
  21. .text:0040F578                 mov     eax, edx
  22. .text:0040F57A                 and     dword ptr [ebx+0C34h], 0FFFFh
  23. .text:0040F584                 test    al, al
  24. ; Вторая проверка зарегистрированности
  25. .text:0040F586                 jz      short loc_40F592
  26. ; Программа считается зарегистрированной. Записать 7E5A0000h в ячейку
  27. ; памяти [reg+0C34h]
  28. .text:0040F588                 or      dword ptr [ebx+0C34h], 7E5A0000h
  29. .text:0040F592 loc_40F592:
  30. .text:0040F592                 dec     dword ptr [esi+1Ch]
  31. .text:0040F595                 mov     eax, [ebp+var_14]
  32. ...
Дизассемблер показывает несколько проверок, которые "перепрыгивают" через инициализацию, поэтому правильнее всего будет пройти этот участок кода под отладчиком. Пошаговой трассировкой выясняем, что срабатывает первый переход по адресу 0040F555. Если его пропатчить, то триальные ограничения пропадают. Элегантный однобайтовый патч.

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

Интересно, что если сперва под отладчиком поставить точку останова на этот переход, попытаться ввести какой-нибудь неправильный код, а затем пропатчить переход в памяти, то в папке с программой будет создан файл ji2.key примерно такого содержания:

[JPEG Imager 2.0]
UserName=ManHunter / PCL
UserKey=123123123

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

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

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

Комментарии

Отзывы посетителей сайта о статье
Vampir (17.05.2010 в 09:17):
SVS, если забыл, то ManHunter раньше постоянно выкладывал патчи. По крайней мере и на определенном форуме появлялись...
SVS (06.05.2010 в 16:34):
Vampir, ошибсо адресом :) это не варез-сайт. Всякие патчи готовые ищи в другом месте. Здесь немного другой смысл: исследование защитных свойств. ManHunter пишет это для тех, кто кумекает, а для тех, кто не очень - есть другие сайты, где описываются почему так, а не так как тебе подумалось. Смысл не в том, чтоб всенепременно сломать нужную в хозяйстве прогу, смысл гораздо глубже и доступен тому, кто поймёт ;)
Alex, твои действия, по твоим словам, напоминают тоже некую ситуёвину, раз ManHunter у нас "заяц в общественном транспорте": стоит во дворе машина. Чужая. Не твоя. А ты ключи втихаря подобрал и сел покататься. Причём даже на место не вернул. Угнал типа. И не спешишь хозяину машины доложить, что у машинки сигнализация уй какая херовая, надо бы поменять или пользоваться другими системами защиты. Чуствуешь теперь разницу между собой и ManHunter'ом? Так кто из вас праведник, а кто - грешник? То-то... Так что подумай на досуге, если не дошло...
Isaev (05.05.2010 в 20:33):
Alex,
imho программа, вся защита которой сводится к патчу 1 байта не достойна того, чтобы секрет её взлома ещё и в привате хранить :)))
А "жить в 'нормальном' обществе" мы и так не будем (по крайней мере мы в любом случае), т.к. для того, чтобы всё привести в нормальный вид нужно поколения 3, при учёте что у власти будут люди, которые будут хоть немного об этом думать, а не только тащить! т.ч. не надо тут разводить вот это ;)
ManHunter (05.05.2010 в 10:11):
Представляешь, я тоже пишу программы, всякие скрипты и прочее. И выкладываю это все совершенно бесплатно, чтобы люди ими пользовались. Хотя я больше чем уверен, что если бы я распространял их по схеме donationware, то получал бы с них неплохой навар.
Alex (05.05.2010 в 09:18):
Добрый день.
Вот я тоже такое делаю с программами(чисто для себя), но зачем же выкладывать такое в паблик?
Я конечно понимаю, что есть желание поделиться полученными результатами, но считаю надо уважать труд других.
Простой пример - представьте, что вы написали эту программу.
Вот вы замечали, что люди отказываются от билетов в общественном транспорте? Как считаете хорошо это или плохо?
Я считаю плохо. Так мы никогда не будем жить в "нормальном" обществе.
И вывод только один - воровать, взламывать ведь живем для себя.
Vampir (04.05.2010 в 16:27):
Можно было б для тех, кому "уже не интересно" в асме копаться выложить патчик ;)
Isaev (04.05.2010 в 03:04):
ManHunter, Да ты, в общем, и сам смог бы вполне, просто ленишься :)
ManHunter (04.05.2010 в 01:13):
Isaev, ну так блеснул бы правильной статейкой, я уверен, многие люди сказали бы спасибо. А то осуждать что-то, не предлагая никакой альтернативы - это тоже не есть хорошо.
x (04.05.2010 в 00:44):
Эти статьи из разряда "делай как я, и меньше вопросов". От новичка скрыта идея, почему та или иная инструкция опознана ManHunterом, как проверка или переход в алгоритме поиска лицензии. То есть нет четкой логики, почему ищем именно так, а не иначе. На какой базе выбрана линия лома. Мне повезло, я нахожусь на уровне между теми, кому это не ясно и теми для когда это уже не интересно. :)
Andrey (03.05.2010 в 23:31):
Программа из категории MUST HAVE....Спасибо!
Isaev (03.05.2010 в 22:42):
Чтобы пропатчить прогу надо минут 5-10 макс. Практически стандартная последовательность действий и в результате не интересно и после 1-2 раз уже ничему не учишься... А криптокейген интереснее на много.
ManHunter (03.05.2010 в 20:58):
Не вижу ничего плохого в патче.
Isaev (03.05.2010 в 20:52):
Там такая прикольная рега (просто проверка кривыми руками написана)!
А ты учишь людей патчить...
Лучше бы разобрал алго и показал, как кейгенят такие вещи ;)
INC. (02.05.2010 в 09:23):
Thanks

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

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

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