Сейчас на форуме: tyns777, cppasm, dutyfree, asfa (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Можно ли извлечь зашифрованные данные?
Посл.ответ Сообщение

Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 апреля 2017 08:35 · Поправил: CharlyChaplin
· Личное сообщение · #1

Сразу скажу, что программа написана мной и взламывать ничего не нужно. От вас я прошу всего лишь подсказать с какой стороны нужно искать подход к программе, которые имеет такой вид защиты. И вообще можно ли это назвать защитой и насколько легко и быстро её можно преодолеть?

Назначение программы - защитить данные, находящиеся в секции #Data. Чтобы нельзя было их подсмотреть. Программа привязывается к одному компьютеру. Реализован запрет запусков на других компьютерах. Первичный запуск сделан для того, чтобы запомнить своего "хозяина" и впредь работать только на нём.

1.)Имеется чистая программа, написанная на VB6.0. В ней ничего не сохранено.
2.)Имеются табличные значения, которые должны быть сохранены в программе.
Пункты 1 и 2 прикреплены во вложении.

Программа сохраняет данные в самой себе(exe-файле) и работает по такому принципу:
1.) Проверка на первичность запуска.
1.1.) Если запуск первый, то идёт запрос пароля(с помощью которого прога будет потом открываться), запрос имени пользователя на котором будет прога открываться и параметр ярлыка, для запуска без пароля в режиме просмотра. После чего идёт запись в себя и закрытие проги.
1.2.) Если запуск не первый, то
1.2.1) Если запустили из ярлыка И параметр ярлыка соответствует данным из п. 1.1, то открывается прога в режиме чтения.
1.2.2) Если запустили непосредственно exe-файл, то необходимо ввести пароль из п. 1.1. При неправильном вводе программа просто тихо закрывается.

2.) Повторно открываем прогу через exe. Вводим пароль и заполняем таблицу значениями. После сохраняем и прога закрывается, попутно записывая в себя табличные данные.

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

Помимо сохранения данных в самой себе, прога также их предварительно шифрует.
Как это происходит:
1.) После выполнения п. 1.1 перед закрытием, считывается ID модели, Serial Number и Firmware number жёсткого диска. Получается 3 значения, объединённые в одну строку. Например, мои значения это: HGST HTS541010A9E680 JD1009DM2Y9EAK JA0OA7J0.
2.) После чего берётся хеш SHA-2(256) из этой строки и урезается до 56 символов. 9d70066af4bebb6eb8d30223445ba1f9f9110c45d5c94f15d29f845595f596da и обрезаем до 56 символов.
3.) Результат из п.2 является ключём к шифрованию по алгоритму Blowfish табличных и авторизационных данных. То есть ключ из п.2 будет уникальным для каждого компьютера.

Вот непосредственная строка, которая создаётся и которая зашивается в прогу. Строка одна и содержит в себе как авторизационные, так и табличные данные:
#Auth^^OldPassPass_1^^NewPassPass_2^^UserNameWinUserName^^ShotcutParamCharly#Data3478238945873276... в секции Data помещается 200 цифр(4*50).

А теперь что происходит перед запуском такой проги, в которую уже записаны авторизационные и табличные значения:
1.) Считывается номер жёсткого диска
2.) Берётся хеш и обрезается, создавая ключ
3.) Этим ключём алгоритмом Blowfish расшифровывается записанная в прогу строка.
4.) Изымается из строки имя пользователя и сравнивается с текущим активным пользователем. Если совпадает, то появляется форма. Если не совпадает, то форма даже не появляется, а прога тихо закрывается. Несовпадать может только в 2-х случаях. Если запущено под другим пользователем, либо неправильная расшифровка из-за неверного ключа.
5.) Если ключ был верен, то появляется форма либо с запросом пароля(при запуске exe), либо режим чтения(при запуске с ярлыка).

То есть суть в том, что запускаемая прога сама ещё не знает свои авторизационные данные. Они получаются только после расшифровки. То есть в отладчике мы можем извлечь из проги зашифрованную строку(я это сам делал). А что с ней делать дальше?

Вот, собственно, и сам вопрос. Каким образом можно извлечь табличные или авторизационные данные из такой проги? Можно ли каким-либо образом "угадать" ключ, "угадав" при этом серийник жёсткого диска? Ведь если он будет неправильным, то расшифровка будет неверной. По этой причине будет попытка сравнения имени пользователя с "крякозябрами".

636b_03.04.2017_EXELAB.rU.tgz - Рабочий стол.rar




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 03 апреля 2017 08:58
· Личное сообщение · #2

CharlyChaplin

А нужны ли эти авториз данные.. пукт 4 отменяет смысл всего этого, так как это обычная условная конструкция. Такое можно даже автоматикой взять, обнаружив что сновной код просто скипается.

-----
vx




Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 апреля 2017 09:08 · Поправил: CharlyChaplin
· Личное сообщение · #3

difexacaw пишет:
А нужны ли эти авториз данные.. пукт 4 отменяет смысл всего этого, так как это обычная условная конструкция. Такое можно даже автоматикой взять, обнаружив что сновной код просто скипается.


Я согласен с вами. Но "сджампив" эту проверку, можно ли извлечь эти данные? Узнать пароль для запуска и т.д. Ведь самое ценное здесь - секция Data.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 03 апреля 2017 09:09
· Личное сообщение · #4

CharlyChaplin

Так ведь эти данные нужны для реализации данной проверки, потом не нужны.

-----
vx




Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 апреля 2017 09:18 · Поправил: CharlyChaplin
· Личное сообщение · #5

difexacaw пишет:
Так ведь эти данные нужны для реализации данной проверки, потом не нужны.


Нет. Если мы обходим авторизацию, то программа работать будет. Но она станет бесполезной и бессмысленной, т.к. основное её предназначение обезопасить данные в секции Data. Если есть желание, попробуйте внести цифровые данные(любые) в таблицу, а потом обойдя авторизацию извлечь эти данные. Если это получится, мне было бы интересно, каким образом.

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

Спустя время я и сам задумался, как своровать таблицу. Ведь строка будет зашифрованной и даже если обойти проверку пользователя, она всё равно останется зашифрованной. И сначала придётся расшифровать Blowfish. А если хочется узнать серийник НЖМД, то придётся найти исходные данные функции хеша. Думаю это займёт много времени. Более того, я долго искал информацию по расшифровке Blowfish. Если при 8-ми раундов шифрования ещё можно подобрать "плохие" ключи, то при 16-и раундов это имеет мало смысла. Я использую именно шифрование в 16 раундов.
Поэтому я решил обратиться на этот форум, чтобы здесь помогли найти подход к проге.



Ранг: 9.0 (гость), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 03 апреля 2017 10:57
· Личное сообщение · #6

В чем проблема получить расшифрованные данные на машине, где всё работает ?
Вся защита идет лесом ?!



Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 апреля 2017 11:04
· Личное сообщение · #7

dsrabot1 пишет:
В чем проблема получить расшифрованные данные на машине, где всё работает ?
Вся защита идет лесом ?!


Вся суть exelab.ru состоит в том, что здесь рассказывается как ломать программы. Вряд ли разработчик будет ломать свою же программу. Их обычно ломают на других компьютерах.

Попробуйте записать в программу таблицу. После чего запустите её на другом компьютере. Было бы интересно, узнать исходную таблицу, которая была зашита в программу вами же, на изначальном компе.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 03 апреля 2017 11:05 · Поправил: difexacaw
· Личное сообщение · #8

CharlyChaplin

Исходные данные/код должны быть зашифрованы, хорошим механизмом, что бы их нельзя было получить брутом или есчо как то, за приемлемое время. Тоесть какая то часть приложения должна отсутствовать, что сделает запуск принципиально невозможным.
А все эти извраты с ключами, проверками етц всё это бессмысленно. Антидампы/антидебаги туда же. Сейчас любой обмен данными - декрипт строки в памяти детектится автоматикой - это супер/гипервизоры, DBI etc. По мойму следует уже забыть про классическую защиту.

-----
vx




Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 апреля 2017 11:17 · Поправил: CharlyChaplin
· Личное сообщение · #9

difexacaw пишет:
Сейчас любой обмен данными - декрипт строки в памяти детектится автоматикой - это супер/гипервизоры, DBI etc.

Возможно. Но здесь ситуация такая, что "правильного" ключа как бы не существует. Расшифровка произойдёт с любым множеством ключей. Но только один ключ из множества в результате даст верную расшифровку. У меня попытка чтения данных будет происходить при любом раскладе - верная или неверная была расшифровка. Смысл только в том, что "крякозябр" не будет равен осмысленным данным. И программа сама не знает и, следовательно, не проверяет правильность данных(кроме имени пользователя, которое может совпасть с "крякозябром"). Она просто читает их и выводит пользователю. А правильный ли это символ или этот символ является "крякозябром" решает уже сам человек и тот интернет-сервис, что принимает данные. "Крякозябры" интернет-сервису точно не понравятся.
Конечно, автоматика сможет детектировать процесс расшифровки. Но автоматика не сможет узнать правильный ключ за приемлемое время.

Хотя я может и не правильно понял то, что вы хотели донести.



Ранг: 9.0 (гость), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 03 апреля 2017 11:17
· Личное сообщение · #10

CharlyChaplin
Вы либо новичок, либо не в теме. С чего вы взяли, что ломают на других ПК ? У меня была куча заказов, где я работал удаленно (по причине активации реальной лицензии проги на компе клиента с привязкой к хвид либо когда у клиента присутствовала любого рода железка, без которой особо не подебажишь отдельно софт у себя на машине).

Поэтому если вы думаете, что кто-то будет заморачиваться (или вообще качать и смотреть что там у вас запилено) - вы ошибаетесь. Если на реальной (а главное - кому-то очень нужной) проге будет ваша защита и кто-то её запросит отломать в теме "Поиск специалистов", то имея валидную пару, цена отлома такой вещи ( по моим оценкам) ~ 100-200$

А как ломать, тут уже как душа пожелает: либо эмуляция хвида под валидную лицуху либо декрипт нужных данных и их прикручивание ( с удалением вызова декрипта) либо еще как

| Сообщение посчитали полезным: CharlyChaplin

Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 апреля 2017 11:24
· Личное сообщение · #11

dsrabot1, конечно новичок, поэтому и пишу в этой теме. Спасибо, что прояснили.



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 апреля 2017 11:43
· Личное сообщение · #12

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

| Сообщение посчитали полезным: CharlyChaplin


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 03 апреля 2017 13:37
· Личное сообщение · #13

CharlyChaplin вполне себе имеет место быть и ваш вариант защиты. т.к. любая защита отвязывается при наличии валидной пары, а значит живёт в худшем случае до первой покупки продукта... И как бы вы её не накрутили суть не меняется, просто потратите больше времени на реализацию защиты.
Если вы достигли эффекта, что запустить без ключа не возможно в принципе, можете считать защиту "идеальной".
Если программа работает с сервером, там можно добавить какие-ниубдь неявные хитрости, чтобы тихо попытаться спалить клиента который её отломал/изменил и т.д.

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh


| Сообщение посчитали полезным: CharlyChaplin

Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 03 апреля 2017 15:28 · Поправил: dosprog
· Личное сообщение · #14

Isaev пишет:
просто потратите больше времени на реализацию защиты.

Пускай лучше программы пишет путные, чтоб удобно пользоваться было, и не занимается хернёй
Имхо

| Сообщение посчитали полезным: difexacaw

Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 апреля 2017 08:20 · Поправил: CharlyChaplin
· Личное сообщение · #15

dosprog давайте вы будете указывать что и кому писать в другой ветке форума. А здесь форум для новичков. Я специально в эту ветку обратился. Если вы такой профессионал и всё знаете, тогда идите указывайте другим профи. Те кто всё знает, сюда обращаться не будет. И заметьте, я общался вежливо, до вашего поста.


 eXeL@B —› Вопросы новичков —› Можно ли извлечь зашифрованные данные?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати