Исследование защиты программы Sublime Text
Скриншот программы Sublime Text
Sublime Text - продвинутый редактор для программистов с множеством полезных функций, подсветкой синтаксиса различных языков программирования, автодополнением, а также с практически неограниченными возможностями по расширению функционала при помощи Python. Особых триальных ограничений в нем нет, за исключением наг-окна, которое может рандомно появиться при сохранении файла. Но мне очень не понравились комментарии на одном популярном IT-ресурсе, где этот редактор разрекламировали. Терпилы писали, что можно и потерпеть это окно, какие-то беспредельщики задвигали телеги, что "рабочий инструмент надо обязательно покупать", и все в таком духе. А правильным пацанам я сейчас расскажу как все сделать правильно.
Скачиваем с офсайта дистрибутив (а под раздачу в этой статье попадает портативная версия для 32-битных систем), распаковываем, смотрим. Главный исполняемый файл ничем не упакован, отправляем его в дизассемблер, а пока тот работает, поищем текст надоедливого наг-окна. Ничего сложного, все лежит в открытом виде:
Нехорошая строка найдена
Возвращаемся к дизассемблеру, а именно к тому месту, где этот текст появляется. Все очень красиво оформлено в виде отдельной процедуры:
Code (Assembler) : Убрать нумерацию
- .text:004C6C50 sub esp, 8
- ; Проверка байта, если он не равен 0, то сразу выход из процедуры
- .text:004C6C53 cmp byte_772F8C, 0
- .text:004C6C5A jnz loc_4C6CF3
- .text:004C6C60 push esi
- .text:004C6C61 push edi
- .text:004C6C62 call sub_408F00
- .text:004C6C67 mov esi, eax
- .text:004C6C69 sub eax, dword_772FA0
- .text:004C6C6F mov edi, edx
- .text:004C6C71 mov ecx, edi
- .text:004C6C73 sbb ecx, dword_772FA4
- .text:004C6C79 mov [esp+10h+var_4], ecx
- .text:004C6C7D js short loc_4C6CF1
- .text:004C6C7F jg short loc_4C6C88
- .text:004C6C81 cmp eax, 0A4CB80h
- .text:004C6C86 jb short loc_4C6CF1
- .text:004C6C88 loc_4C6C88:
- .text:004C6C88 inc dword_772F9C
- ; Наг-окно появляется рандомно, тут выполняется проверка показывать или нет
- .text:004C6C8E call ds:rand
- .text:004C6C94 and eax, 8000000Fh
- .text:004C6C99 jns short loc_4C6CA0
- .text:004C6C9B dec eax
- .text:004C6C9C or eax, 0FFFFFFF0h
- .text:004C6C9F inc eax
- .text:004C6CA0 loc_4C6CA0:
- .text:004C6CA0 mov eax, dword_772F9C
- .text:004C6CA5 jnz short loc_4C6CAC
- .text:004C6CA7 cmp eax, 2
- .text:004C6CAA jg short loc_4C6CB1
- .text:004C6CAC loc_4C6CAC:
- .text:004C6CAC cmp eax, 8
- .text:004C6CAF jle short loc_4C6CF1
- .text:004C6CB1 loc_4C6CB1:
- .text:004C6CB1 push offset aPurchase ; "Purchase"
- .text:004C6CB6 push offset aThisIsAnUnregi
- ; "This is an unregistered copy"
- .text:004C6CBB push offset aHelloThanksFor
- ; "Hello! Thanks for trying out Sublime Te"...
- .text:004C6CC0 push 0
- .text:004C6CC2 mov dword_772F9C, 0
- .text:004C6CCC mov dword_772FA0, esi
- .text:004C6CD2 mov dword_772FA4, edi
- .text:004C6CD8 call sub_41D160
- .text:004C6CDD add esp, 10h
- .text:004C6CE0 test al, al
- .text:004C6CE2 jz short loc_4C6CF1
- ; Если пользователь нажал "Купить", то перейти на страницу покупки
- .text:004C6CE4 push offset aHttpWww_sublim
- ; "http://www.sublimetext.com/buy"
- .text:004C6CE9 call sub_414C30
- .text:004C6CEE add esp, 4
- .text:004C6CF1 loc_4C6CF1:
- .text:004C6CF1 pop edi
- .text:004C6CF2 pop esi
- .text:004C6CF3 loc_4C6CF3:
- .text:004C6CF3 add esp, 8
- .text:004C6CF6 retn
Перекрестные ссылки на байт регистрации
Очевидно, что инициализация с предварительной проверкой может быть только в двух местах, где в байт заносится значение регистра AL. Вот первое место:
Code (Assembler) : Убрать нумерацию
- .text:004C71E7 push ecx
- .text:004C71E8 call sub_4C6A50
- .text:004C71ED add esp, 4
- .text:004C71F0 mov byte_772F8C, al
- .text:004C71F5 test al, al
- .text:004C71F7 jz loc_4C730B
Code (Assembler) : Убрать нумерацию
- .text:004CAC24 call sub_4C6A50
- .text:004CAC29 add esp, 4
- .text:004CAC2C lea ecx, [esp+34h+var_28]
- .text:004CAC30 mov byte_772F8C, al
Найденные криптоалгоритмы
Чтобы не тратить время, пропатчим функцию проверки серийного номера, записав в ее начало команды MOV AL,1 и RET. Сохраняем изменения, проверяем что получилось. Надпись "UNREGISTERED" в заголовке окна пропала, надоедливое окно не появляется, а программа теперь принимает любой регистрационный ключ:
Программа успешно "зарегистрирована"
Вот теперь все правильно. Барыги посрамлены, терпилы могут терпеть дальше, а правильным пацанам остается только внимательно изучить процедуру проверки регистрации, выделить сигнатуру для поиска и сделать универсальный патч, чтобы больше никогда не платить деньги за этот инструмент.
Просмотров: 10971 | Комментариев: 40
Метки: исследование защиты, Sublime Text
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Илья
(13.01.2023 в 18:05):
Слово "UNREGISTERED" в главном окне программы было закодировано. В коде вместо него было "@[GPR\\FAPGPQ". Это на примере версии Sublime Text Build 3211 x64. Рассмотрел ещё парочку других версий, там то же самое или похожая схема.
Илья
(13.01.2023 в 01:46):
Проблему выскакивающего окна при сохранении я решил довольно топорно, просто в месте проверки поменял jz на jnz (или наоборот). Для интереса разобрал две версии программы (3211 x32) и (4143 x64). В обеих версиях схема одна и та же и работает. И можно было бы на этом успокоиться со взломом этой программы в 2023 году, но как в заголовок основного окна попадает строка "(UNREGISTERED)", я так и не нашел, даже полнотекстовый поиск hiew не дал результатов. Неужели отдельными символами как-то подгружает и конкатенирует?
ManHunter
(12.01.2023 в 01:14):
Еще разок, специально для тех, кто в танке. Мне безразличнв 64-битные системы.
Илья
(11.01.2023 в 23:44):
А что делать если не как у вас, конкретный байт в памяти сравнивается (cmp byte_772F8C, 0), а вот такая строка:
cmp byte ptr [rcx+5], 0
Уже так просто по перекрёстным ссылкам его не найти, где он инициализируется и вычислить функцию проверки. А как его найти, не подскажете?
cmp byte ptr [rcx+5], 0
Уже так просто по перекрёстным ссылкам его не найти, где он инициализируется и вычислить функцию проверки. А как его найти, не подскажете?
ManHunter
(08.10.2015 в 23:21):
Я не вижу ни одной причины для перехода с x86 на что-то другое. Более-менее весомый аргумент - поддержка 4+ гигов памяти, но под мои задачи и 4 гига выше крыши. Кроме этого мне пока никто не привел ни одного разумного довода, чем 64 бита вот прям настолько лучше и почему надо обновляться.
hatmaster
(08.10.2015 в 22:31):
Ретроград :) А если серьезно, почему так? Как бэ будущее за х64...
ManHunter
(07.10.2015 в 00:23):
64-битные системы меня не волнуют. По крайней мере на ближайшие много-много лет.
hatmaster
(07.10.2015 в 00:16):
Для х64 версии данный патч актуален? Или там другие регистры используются?
ManHunter
(17.01.2015 в 21:26):
Если что-то не нравится, то всегда можно найти любой другой интересный сайт, где заголовки совпадают с содержимым. Интернет же прям ломится от обилия полезной и уникальной информации. А еще лучше - вычеркнуть из жизни недельку-другую, но зато написать офигенно крутую статью и привести ее в качестве примера.
Крестик в правом верхнем углу браузера весьма эффективно решает все внутренние конфликты и диссонансы.
Крестик в правом верхнем углу браузера весьма эффективно решает все внутренние конфликты и диссонансы.
Дмитрий
(17.01.2015 в 21:05):
Рабочий, неплохой блог, поэтому тут и задержался, быстро отвечаете.
Ну незнаю каким именно терминам вы удивились. Я указал
1. несоответсвие названия статьи и ее содержания. Согласитесь что исследование защиты подразумевает совсем другое?
2. также мне понравился ваш комментарий про программирование и искусство, но согласитесь что можно хотябы 30% описанных вами программ докопать до самого конца, не оставив ни одного черного пятна? Но вы этого не сделали. Возникает вопрос - почему? (вопрос возникает как раз в связи с понравившейся мне фразой)
3. И хочу напомнить, что исследование не подразумевает решения
P.S. ;-) означает улыбку, не сарказм.
Ну незнаю каким именно терминам вы удивились. Я указал
1. несоответсвие названия статьи и ее содержания. Согласитесь что исследование защиты подразумевает совсем другое?
2. также мне понравился ваш комментарий про программирование и искусство, но согласитесь что можно хотябы 30% описанных вами программ докопать до самого конца, не оставив ни одного черного пятна? Но вы этого не сделали. Возникает вопрос - почему? (вопрос возникает как раз в связи с понравившейся мне фразой)
3. И хочу напомнить, что исследование не подразумевает решения
P.S. ;-) означает улыбку, не сарказм.
ManHunter
(17.01.2015 в 20:44):
Ох ты, какие термины в ход пошли. Ну ок, сбруть RSA-1024 в обозримое время, потом продолжим беседу про красивый реверсинг, перерезание проводов и отрубание головы.
Дмитрий
(17.01.2015 в 20:24):
Понравился ваш комментарий:
>> Программирование - это не ремесло, а искусство,
>> но сейчас об этом почти забыли.
Это говорит тот, кто лечит человека отрубанием головы ;-) Причем как вижу не только для данной программы, но и в других статьях про “исследование”. Исследования конечно тут никакого нет, это с натяжкой можно назвать “обход защиты”.
Думаю все же под словосочетанием "исследованием защиты" должно скрываться более, чем анализ системы как черного ящика с перерезанием одного выходящего из него провода. Реверсинг (часть понятия программирование) тоже самое искусство, но кто хочет тратить на это время и усилия, если можно перерезать проводок с тем же результатом ;-) ?
>> Программирование - это не ремесло, а искусство,
>> но сейчас об этом почти забыли.
Это говорит тот, кто лечит человека отрубанием головы ;-) Причем как вижу не только для данной программы, но и в других статьях про “исследование”. Исследования конечно тут никакого нет, это с натяжкой можно назвать “обход защиты”.
Думаю все же под словосочетанием "исследованием защиты" должно скрываться более, чем анализ системы как черного ящика с перерезанием одного выходящего из него провода. Реверсинг (часть понятия программирование) тоже самое искусство, но кто хочет тратить на это время и усилия, если можно перерезать проводок с тем же результатом ;-) ?
GoodCat
(19.12.2014 в 12:20):
ахах афтар мощный чел "терпилы", "беспредел", "пацаны"...
ManHunter
(02.02.2014 в 01:52):
Одно из окон IDA
Nops
(02.02.2014 в 01:47):
ManHunter, что за программа для поиска перекрестных ссылок на скрине?
disciple27
(30.03.2013 в 09:20):
подсветочка, правда допиливать надо
https://github.com/Shirk/Sublime-FASM-x86
https://github.com/Shirk/Sublime-FASM-x86
ManHunter
(01.09.2012 в 21:30):
nikolas, каждый имеет право на свое мнение. Но перечитай еще раз про donationware, и про альтернативные источники доходов тоже. Не жалко денег - отдай, но сделай это тихонько и тем более не надо этим гордиться. А вообще я просто презираю людей, которые покупают софт, и не надо ждать от меня какого-то иного отношения к ним.
nikolas
(01.09.2012 в 20:41):
ManHunter, согласен насчет бесплатности, но ... Есть дизайнеры, есть программисты, менеджеры и черта в ступе. То есть существует КУЧА людей, которые физически ничего не создают, но тратят на работу свои деньги, нервы и прочая-прочая.
Это я к тому, что для работы дома, для ХОББИ вполне можно использовать и платный софт. А если уж с помощью софта хочешь что-то производить, что принесет тебе $$$ - оплати труд человека, вложившего в него свое Я.
Меня вообще твоя фраза "... просто офигел, сколько там мудаков, желающих покупать софт. Самые натуральные дятлы и терпилы." вогнала в ступор...
Если провести аналогию с фильмами, есть такие шедевры, которым не жалко отдать деньги (в правильной пропорции, конечно))
Я к тому, что не надо призывать НЕ покупать ничего. Эй, мы ведь здесь "for fun" или как?
Это я к тому, что для работы дома, для ХОББИ вполне можно использовать и платный софт. А если уж с помощью софта хочешь что-то производить, что принесет тебе $$$ - оплати труд человека, вложившего в него свое Я.
Меня вообще твоя фраза "... просто офигел, сколько там мудаков, желающих покупать софт. Самые натуральные дятлы и терпилы." вогнала в ступор...
Если провести аналогию с фильмами, есть такие шедевры, которым не жалко отдать деньги (в правильной пропорции, конечно))
Я к тому, что не надо призывать НЕ покупать ничего. Эй, мы ведь здесь "for fun" или как?
ManHunter
(21.08.2012 в 08:31):
Видишь как здорово, теперь ты совершенно бесплатно прокачал свой экспиренс по основам IDA. А так бы тупо получил адрес для патча и ничему бы не научился. Последняя сборка, кстати, 2.0.1 build 2217 stable.
Артём
(21.08.2012 в 02:06):
Смешной ты)) Да я лучше освою азы IDA, Hiew чтобы выяснить, что в build 2216 (x32; windows) необходимо по адресу .text:[deleted] записать MOV al,1 ;)
ManHunter
(19.08.2012 в 23:31):
50$
Артём
(19.08.2012 в 23:26):
Привет! Поможите веб-программисту, не шарящему в крекинге поломать build 2216. Единственное что я могу сделать — это открыть EXEшник в HEXeditor и немного его отредактировать))
ManHunter
(30.06.2012 в 16:27):
Так можно ж немного напрячься и сделать самому. Примеры валяются в папке "Pristine Packages", список ассемблерных команд для подсветки можно выдрать из hiew, остальное дело техники. Всей работы на пару часов, может даже меньше. Автокомплит основных конструкций языка не менее легко добивается сниппетами. Тут придется повозиться чуть подольше, зато один раз и надолго.
Mr. Done
(30.06.2012 в 16:24):
еще бы найти подсветку асм синтаксиса и автокомплит, и можно кодить :)
ManHunter
(29.06.2012 в 16:32):
Софт должен распространяться без каких-либо ограничений (триала, окон и прочей херни). Если пользователю софт нравится, то он перечисляет разработчику денежку, столько, сколько считает нужным. Это схема donationware, но не принудительного, как иногда бывает, а абсолютно добровольного. И вообще, софт можно запросто писать в свободное от основной работы время, в свое удовольствие и на благо остальных людей. Программирование - это искусство, а не ремесло.
Бабло можно отбивать на платной техподдержке, на реализации внеплановых заказов на какие-либо новые фичи и на корпоративных клиентах. А для частного использования любой софт должен быть абсолютно бесплатным.
И я не слышал, чтобы кто-то из нормальных разработчиков прекращал разработку из-за взломов. Бывают, конечно, какие-то обиженные школьники, которые накорябали стопицотый вариант платного медиа-конвертера, а их на следующий день зарелизили. Но обиженных ебут, это всем известно.
Бабло можно отбивать на платной техподдержке, на реализации внеплановых заказов на какие-либо новые фичи и на корпоративных клиентах. А для частного использования любой софт должен быть абсолютно бесплатным.
И я не слышал, чтобы кто-то из нормальных разработчиков прекращал разработку из-за взломов. Бывают, конечно, какие-то обиженные школьники, которые накорябали стопицотый вариант платного медиа-конвертера, а их на следующий день зарелизили. Но обиженных ебут, это всем известно.
Руслан
(29.06.2012 в 16:27):
Ну я как бы тоже не понимаю зачем платить, если можно бесплатно. Но с другой стороны, разработчик прекратит разработку без мотивации...
ManHunter
(27.06.2012 в 16:01):
Зафиналили, можно патчить :) Почитал "популярный IT-ресурс" и просто офигел, сколько там мудаков, желающих покупать софт. Самые натуральные дятлы и терпилы. Они даже гордятся и хвастаются тем, что КУПИЛИ его *facepalm*
Mr. Done
(19.06.2012 в 13:19):
О, видать следующую версию пропатчу именно так:)
А то я на скорую руку в хиеве патчил два байта:
1. Чтоб не показывало дурацкое сообщение рандомно при сохранении
2. Чтоб убирало из заголовка UNREGISTERED :)
А то я на скорую руку в хиеве патчил два байта:
1. Чтоб не показывало дурацкое сообщение рандомно при сохранении
2. Чтоб убирало из заголовка UNREGISTERED :)
Yoshida
(13.04.2012 в 14:27):
ManHunter, спасибо за развернутый ответ, это все объясняет. Сегодня уже не удивился, когда заглянул в DLL плагина к irfan view - CADImage.dll размером в 2 мб, который выдал при просмотре SVG файла "This Copy Not Registered" на все изображение. Дельфи. Может DLL действительно стоящая, на сайте производителя этой библиотеки написано, что поддерживается 30 форматов изображений, но, на мой взгляд, все преимущества сходят на нет, когда именно конечный пользователь должен платить бабки за использование этой библиотеки, а не разработчик, который ее использовал при написании своего кода. Это какой-то лохотрон получается :)
Только не подумай, что это "заказ"! Просто делюсь переживаниями о том, как много несправедливости в этой жизни.
Только не подумай, что это "заказ"! Просто делюсь переживаниями о том, как много несправедливости в этой жизни.
ManHunter
(13.04.2012 в 08:58):
Да вообще программ на Дельфи гораздо больше, видимо сказывается доступность и количество всяких готовых компонентов. Всяко ж проще слепить в кучу десяток мегабайт готовых кусков, чем сидеть и кропотливо отлаживать каждую строчку. После того, как будет высран очередной мультимедиа-конвертер или супер-пупер оптимизатор реестра, тут же возникает желание его продать. А как же, "программист" "трудился", пытался заставить чужие куски говна работать почти без ошибок в своей куче говна. Только за одно это весь мир уже должен ему бабосов.
Есть, конечно, действительно талантливые программисты на Дельфи и очень классные программы, только их мало. Программирование - это не ремесло, а искусство, но сейчас об этом почти забыли.
Есть, конечно, действительно талантливые программисты на Дельфи и очень классные программы, только их мало. Программирование - это не ремесло, а искусство, но сейчас об этом почти забыли.
Yoshida
(12.04.2012 в 23:23):
Manhunter, почему-то так сложилось, что большинство программ, которые я успел поковырять, написаны на Delphi. Создается впечатление, что люди, пишущие на Delphi, более жадные, чем программисты на других языках
Преждевременно "добавил". Так вот, собственно, хотел спросить: у тебя намного больше опыт, это действительно так, или просто так повезло? :)
Преждевременно "добавил". Так вот, собственно, хотел спросить: у тебя намного больше опыт, это действительно так, или просто так повезло? :)
vox13
(10.04.2012 в 23:54):
Не ожидал такого быстрого ответа ) Но кстати, разработчик Sublime похоже не очень то хотел защититься от хакеров..
ManHunter
(10.04.2012 в 23:51):
Нет, речь идет о хабре.
vox13
(10.04.2012 в 23:49):
Я а считаю что ManHunter - красавчег. А "популярный IT-ресурс" это не хакер ру случаем? :)
unix3d
(09.04.2012 в 11:24):
Всё работает и для х64 call sub_1400F31C0 патчим соответсвенно!!! Notepad++ выбор огромного числа людей )))))
ManHunter
(09.04.2012 в 10:43):
AyTkACT, действительно неплохой редактор. Перейти на него пока не решаюсь, т.к. Notepad++ лично для меня все-таки рулит, но портативный вариант буду держать под рукой.
AyTkACT
(09.04.2012 в 09:46):
Sublime Text стоил тех 2х минут затраченных на патчинг или очередной говнософтец?
ManHunter
(08.04.2012 в 19:34):
Лучше тренируйся на крякмисах: http://crackmes.de , они специально для этого делаются. Их там немеряно, любой сложности и на любом языке программирования. А потом уже сам выберешь реальную программу для ковыряния.
2
(08.04.2012 в 18:51):
:)
а можете посоветовать какие-нибудь проги для того чтоб потренится во взломе, на которые вам было лень писать статью? )) мне кажется таких куча ))
а можете посоветовать какие-нибудь проги для того чтоб потренится во взломе, на которые вам было лень писать статью? )) мне кажется таких куча ))
Добавить комментарий
Заполните форму для добавления комментария
Слово "UNREGISTERED" в главном окне программы закодировано просто сдвигом символов юникода на 11 и получилось "@[GPR\\FAPGPQ". При желании, можно туда таким же образом вписать, например, своё имя, что я и сделал.