Исследование защиты программы 3StepIcon
Скриншот программы 3StepIcon
3StepIcon - простенький редактор для создания иконок из изображений. В принципе, делает то же самое, что и ворованный Photoshop или ворованный AWIcons Pro, даже меньше, так что интерес представляет исключительно в образовательных целях.
Забираем с сайта дистрибутив, устанавливаем. Сразу после запуска появляется триальное окно с предложением активировать программу или сходить в кассу и оплатить эту возможность. Касса пока подождет, попробуем активировать программу произвольными данными:
Сообщение о неправильной регистрации
Теперь у нас есть текст сообщения о неправильной регистрации. Это хорошо. Основной файл ничем не упакован, отправляем его на разбор в дизассемблер и поищем строчку, которая выводится при неправильной регистрации.
Текст сообщения в файле
Строчка найдена. Там же рядом находится строка, которая выводится при правильной регистрации. Это тоже может пригодиться. А пока посмотрим в листинге дизассемблера код, который отвечает за вывод обеих строк:
Code (Assembler) : Убрать нумерацию
- .text:0041CA58 mov ecx, [ecx+18h]
- .text:0041CA5B call esi ; QLineEdit::text(void)
- .text:0041CA5D push ecx
- .text:0041CA5E mov ecx, [edi+18h]
- .text:0041CA61 push esp
- .text:0041CA62 mov dword ptr [esp+3Ch], 4
- .text:0041CA6A mov ecx, [ecx+24h]
- .text:0041CA6D call esi ; QLineEdit::text(void)
- .text:0041CA6F mov dword ptr [esp+38h], 0FFFFFFFFh
- .text:0041CA77 mov ecx, [edi+1Ch]
- ; Вызвать функцию проверки
- .text:0041CA7A call sub_41B2B0
- .text:0041CA7F mov esi, ds:?fromAscii_helper@QString
- ; Если она вернула AL=0, то введенный серийник неправильный
- .text:0041CA85 test al, al
- .text:0041CA87 jz loc_41CB12
- ; Вывести сообщение об успешной регистрации
- .text:0041CA8D push 28h
- .text:0041CA8F push offset a3stepiconHasBe
- ; "3StepIcon has been activated. Thank you"...
- .text:0041CA94 call esi
- .text:0041CA96 mov [esp+1Ch], eax
- .text:0041CA9A push 0
- ...
- ...
- ...
- .text:0041CB0E add esp, 24h
- .text:0041CB11 retn
- .text:0041CB12 ; -------------------------------
- .text:0041CB12 loc_41CB12:
- ; Вывести сообщение о неуспешной регистрации
- .text:0041CB12 push 5Eh
- .text:0041CB14 push offset aTheEmailAndLic
- ; "The email and license key you entered a"...
- .text:0041CB19 call esi
- .text:0041CB1B mov [esp+28h], eax
- .text:0041CB1F push 0
- .text:0041CB21 push offset unk_425DCE
- .text:0041CB26 mov dword ptr [esp+40h], 7
Code (Assembler) : Убрать нумерацию
- .text:0041B2FC mov ecx, esp
- .text:0041B2FE push eax
- .text:0041B2FF call ds:??0QString@@QAE@ABV0@@Z
- .text:0041B305 mov ecx, esi
- ; Вызывать функцию проверки
- .text:0041B307 call sub_41B440
- .text:0041B30C test al, al
- ; AL=0 - вернуться из функции с ошибкой регистрации
- .text:0041B30E jz loc_41B400
- .text:0041B314 push 0
- .text:0041B316 lea ecx, [esp+38h+var_24]
- .text:0041B31A mov byte ptr [esi+4], 1
Последняя функция проверки начинается с побайтовых преобразований строк, затем идет блок математики на SSE-регистрах и строковые операции.
Code (Assembler) : Убрать нумерацию
- .text:0041B6DA call ds:?toLower@QString@@QBE?AV1@XZ
- .text:0041B6E0 push eax
- .text:0041B6E1 lea ecx, [esp+94h+var_78]
- .text:0041B6E5 call ds:??4QString@@QAEAAV0@$$QAV0@@Z
- .text:0041B6EB lea ecx, [esp+90h+var_7C]
- .text:0041B6EF call ds:??1QString@@QAE@XZ
- .text:0041B6F5 lea eax, [esp+90h+var_78]
- .text:0041B6F9 push eax
- .text:0041B6FA lea eax, [esp+94h+var_78+0Ch]
- .text:0041B6FE push eax
- ; Сравнение двух строк
- .text:0041B6FF call ds:??8@YA_NABVQString@@0@Z
- ; operator==(QString const &,QString const &)
- .text:0041B705 add esp, 8
- .text:0041B708 mov byte ptr [esp+90h+var_4], 2
- .text:0041B710 lea ecx, [esp+90h+var_78]
- .text:0041B714 mov bl, al
- .text:0041B716 call ds:??1QString@@QAE@XZ
- .text:0041B71C lea ecx, [esp+90h+var_78+0Ch]
- .text:0041B720 mov byte ptr [esp+90h+var_4], 1
- .text:0041B728 call ds:??1QString@@QAE@XZ
- .text:0041B72E lea ecx, [esp+90h+arg_0]
- .text:0041B735 mov byte ptr [esp+90h+var_4], 0
- .text:0041B73D call ds:??1QString@@QAE@XZ
- .text:0041B743 lea ecx, [esp+90h+arg_4]
- .text:0041B74A mov [esp+90h+var_4], 0FFFFFFFFh
- .text:0041B755 call ds:??1QString@@QAE@XZ
- .text:0041B75B mov al, bl
- .text:0041B75D mov ecx, [esp+90h+var_C]
- .text:0041B764 mov large fs:0, ecx
- .text:0041B76B pop ecx
Первая строка
Вторая строка
Вот, по одному из указателей у нас находится введенный левый серийник, а по второму - юникодная строка "5e2ded618e0d3e498b0b". Несложно догадаться, что это и есть правильный серийный номер для введенного регистрационного имени. Итого у нас есть регистрационное имя "manhunter@pcl" и вычисленный для него серийник. Выходим из отладчика, повторяем регистрацию, но на этот раз с правильными данными. Программа благодарит за успешную активацию. Да всегда пожалуйста, нам не жалко, обращайтесь еще.
Программа успешно зарегистрирована
Для верности перезапускаем программу. Триальное окно при старте пропало, при повторной попытке активации программа сообщает, что уже активирована. Цель достигнута.
Просмотров: 2450 | Комментариев: 19
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
олег
(07.12.2019 в 17:46):
Go to the "Activate" section of the interface.
Enter the user ID and registration code data below.
Email:
user@giveawayoftheday.com
Key:
BE757-4909D-59EE7-D6946
Enter the user ID and registration code data below.
Email:
user@giveawayoftheday.com
Key:
BE757-4909D-59EE7-D6946
ManHunter
(28.02.2018 в 16:56):
В блоге http://eugenys.blogspot.ru автор иногда выкладывает всякие интересные примеры и особенности работы hiew.
nubuser
(28.02.2018 в 16:54):
В hiew8.hlp - это всё, что известно?
Хотя Alt+F6 - "String collection" там есть.
Но всё равно, очень не очень описания и названия для хелпа...
Спасибо за поднятые веки :)
В hiew_ru.txt к восьмому упоиянут hiew7.hlp
Он такой же по объему, не больше восьмого?
*упомянут
И еще раз спасибо. В этих файлах действительно много информации.
Хотя Alt+F6 - "String collection" там есть.
Но всё равно, очень не очень описания и названия для хелпа...
Спасибо за поднятые веки :)
В hiew_ru.txt к восьмому упоиянут hiew7.hlp
Он такой же по объему, не больше восьмого?
*упомянут
И еще раз спасибо. В этих файлах действительно много информации.
ManHunter
(28.02.2018 в 16:42):
hiew_ru.txt же
nubuser
(28.02.2018 в 16:24):
А и правда, где эти (хотя бы) клавиатурные комбинации Hiew?
По F1 совсем мало.
По F1 совсем мало.
ManHunter
(20.02.2018 в 07:12):
Конечно умеет, и даже без скриптов. Alt+F6 - найти все строки. Затем F10 - сохранить в файл с адресами строк.
brute
(20.02.2018 в 05:30):
я пойду другим путём. Не показывает мой хиев столбцы текста или показывает в ascii (лень искать клавишу переключения). Не нравится это консольное окно на физиологическом уровне: его маленький размер, отсутствие нормального диалога открытия файла, поиска юникодных строк (да, там есть какая-то хитрая комбинация клавиш, но почему бы не сделать ещё одно поле ввода или чекбокс?, отсутствие нормально мануала и примеров использования хотя бы на сайте (также тишина в инете, похоже, очень мало его используют). Если бы было обычное виндовое, то, возможно, даже купил хиев. Уж за столько лет можно было его сделать?). Не нравится "закрытость" программы - рассылка только лично в руки, полных версий не найти даже пятилетней давности. Ради популяризации и увеличения продаж, имхо, просто необходимо выкладывать старые полные версии. Какой-то священный незаменимый грааль.. Что касается строк, позволяет ли хиев найти их ВСЕ и сохранить в файл со смещениями, как это умеет делать 010 Editor скриптом DumpStrings?
ManHunter
(18.02.2018 в 10:31):
brute, не дофига ли движений, чтобы просто взять и найти строчку? IDR, map, PE Explorer, плагины какие-то. Зачем это все? Только чтобы принципиально не использовать HIEW? Ну да пожалуйста, не используй, никто же не принуждает. А я буду работать в привычном мне окружении с привычными мне инструментами.
Как бы это сказать помягче... Меня мало волнует, отличатся ли эта строка от других, не отличается ли, распознает IDA ее "из коробки" или придется шаманить с плагинами, я ПРОСТО ХОЧУ НАЙТИ СТРОКУ. HiEW позволяет мне это сделать со 100% (прописью: стопроцентной) гарантией всего лишь за несколько секунд. И меня это устраивает. Поэтому я буду ей пользоваться дальше.
Как бы это сказать помягче... Меня мало волнует, отличатся ли эта строка от других, не отличается ли, распознает IDA ее "из коробки" или придется шаманить с плагинами, я ПРОСТО ХОЧУ НАЙТИ СТРОКУ. HiEW позволяет мне это сделать со 100% (прописью: стопроцентной) гарантией всего лишь за несколько секунд. И меня это устраивает. Поэтому я буду ей пользоваться дальше.
brute
(18.02.2018 в 09:40):
"комментарии излишни". Хотелось бы их услышать, что не так с Идой? Не распознала "License Key"? Эта строка чем-то отличается от остальных. Мне помог плагин "Cyrillic.plw" (без него действительно Ида эту строку не видела) и поиск по юникоду. Ещё лучше открыть в IDR, создать map и импортировать его в Иду. Порадовал PE Explorer..
http://i.prntscr.com/Jz7v59MrS...Soz0aWSQ.png
http://i.prntscr.com/302hVTHyQ...8ftB9NDQ.png
http://i.prntscr.com/FyZUSf8jT...vu-rTziw.png
http://i.prntscr.com/bae_Jlq0Q...5cwhsYVw.png
http://i.prntscr.com/TPq1MoL6R...6eerDzSQ.png
http://i.prntscr.com/3ee9UqokT...BaKRyzJQ.png
http://i.prntscr.com/wrdm-IfKR...qWsqrrjg.png
http://i.prntscr.com/qnv1q86IR...TRpsqOSw.png
http://i.prntscr.com/Jz7v59MrS...Soz0aWSQ.png
http://i.prntscr.com/302hVTHyQ...8ftB9NDQ.png
http://i.prntscr.com/FyZUSf8jT...vu-rTziw.png
http://i.prntscr.com/bae_Jlq0Q...5cwhsYVw.png
http://i.prntscr.com/TPq1MoL6R...6eerDzSQ.png
http://i.prntscr.com/3ee9UqokT...BaKRyzJQ.png
http://i.prntscr.com/wrdm-IfKR...qWsqrrjg.png
http://i.prntscr.com/qnv1q86IR...TRpsqOSw.png
voffka
(05.02.2018 в 18:47):
Ну я допустим к IDA прибегаю в последний момент, когда нужно найти какую-то строчку непонятно как вызываемую, тут у нее мозгов побольше в плане анализа. hiew+IDA пользовался несколько раз сугубо для патча x64, пока не изобрели x64_dbg. Мессаджи привык "ловить" в ольке через Alt+F9->Call Back.
В общем реверсинг у всех разный.
В общем реверсинг у всех разный.
ManHunter
(02.02.2018 в 11:06):
Чтобы не быть голословным. Никаких постановок, абсолютно реальная ситуация на абсолютно реальном софте. Вот картинка из IDA:
http://i103.fastpic.ru/big/201...147b76b2.png
И это же место в файле в HiEW:
http://i99.fastpic.ru/big/2018...b2c41582.png
Комментарии, как говорится, излишни.
http://i103.fastpic.ru/big/201...147b76b2.png
И это же место в файле в HiEW:
http://i99.fastpic.ru/big/2018...b2c41582.png
Комментарии, как говорится, излишни.
ManHunter
(30.01.2018 в 21:30):
voffka, и все бы ничего, но слишком часто IDA ошибается в определении строк, подставляя вместо них, например, адреса. Это же касается и строк в юникоде. Hiew всегда ищет именно строку, без всякой самодеятельности. Искать строчки в отладчике тоже еще то удовольствие. Так что оставь людям привычный набор инструментов и последовательность действий с ними.
voffka
(30.01.2018 в 21:17):
xussr, Категорически не согласен!
Hiew - ищем строку, нафига?
IDA - Shift+F12, Hiew уже не нужен
ollydbg1.10 - ПКМ - Search for ...
Hiew - ищем строку, нафига?
IDA - Shift+F12, Hiew уже не нужен
ollydbg1.10 - ПКМ - Search for ...
xussr
(29.01.2018 в 21:40):
IDA рулит Hiew тоже спасибо за пример!
Arttomov
(27.01.2018 в 21:15):
ManHunter,друг посещая Ваш блог решил освоить Hiew.Но как часто у нас бывает
найти подробный GUID как пользоваться проблематично.Если Вас не затруднит добавьте несколько статей,как освоить Hiew.
Успехов Вам.
найти подробный GUID как пользоваться проблематично.Если Вас не затруднит добавьте несколько статей,как освоить Hiew.
Успехов Вам.
voffka
(27.01.2018 в 14:30):
Новиков, Синий скриншот это hiew, Code (Assembler) - листинг от IDA, скриншот с ключем ollydbg.
Первые 2 программы сугубо на любителя и в исследовании данной программы абсолютно не нужны.
Первые 2 программы сугубо на любителя и в исследовании данной программы абсолютно не нужны.
ManHunter
(26.01.2018 в 22:24):
IDA
Новиков
(26.01.2018 в 22:20):
А чем дизассемблируете? Извиняюсь, если уже спрашивали, я просто новенький)
Добавить комментарий
Заполните форму для добавления комментария
https://taviso.github.io/hiewdocs/index.htm