Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защита кода, в поиск непосылать нет таково вроде 
:(
    Опции темы
frodo
Дата 4.4.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Вот такая ситуация, в программе  две формы, в одной вводится пароль если он правильный тогда открывается вторая!!!Но дело в том, что, если запустить хотябы ollydbg то ету проседуру сразже в 5сек обойдеш!!! я конечно понимаю что на 100% незашитиш, но всеже как можно сделать чтоб нетак просто ето было обойти!!!
И еше как можно проверять соответствие введенного пароля с хранимым не используя If!
PM MAIL   Вверх
hijaq
Дата 4.4.2008, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.4.2007

Репутация: нет
Всего: нет



Можно получать хэш от пароля и использовать его (хэш) для инициализации (или расшифровки) параметров, используемых при открытии второго окна (и, возможно, использовать далее в программе). А сверху всего этого повесить хороший обфускатор (например, VMProtect). Естественно, это самый простой вариант, далее развивать эти идеи надо уже зная специфику программы и её внутреннее устройство. Конечно, это не спасет от взлома усердными копателями, но определенную их часть отсеит. Это всё для случая, если программа недорогая (до $200). Если дороже - существуют более действенные способы защиты.
PM MAIL WWW   Вверх
v2v
Дата 4.4.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



была не плохая статья Криса Касперского про отладку и защиту от отладки кода.

Добавлено через 11 секунд
в журнале "Хакер"


--------------------
PM   Вверх
Denjs
Дата 5.4.2008, 03:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Цитата(v2v @  4.4.2008,  21:48 Найти цитируемый пост)
была не плохая статья Криса Касперского про отладку и защиту от отладки кода.

ХА! была целая книга! ога ;)

Добавлено сразу:
но не в журнале хрюкер ;)
PM MAIL   Вверх
frodo
Дата 5.4.2008, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Цитата(hijaq @ 4.4.2008,  21:31)
Можно получать хэш от пароля и использовать его (хэш) для инициализации (или расшифровки) параметров, используемых при открытии второго окна (и, возможно, использовать далее в программе).

Хеш пароля я получаю, также сравниваю етот хеш с ведденным пользователем, а каким образом его использовать для открытия второго окна?  А можно ли сравнивать введенные хеши неиспользуя ператор IF? а то его тоже легко отследить!!!
PM MAIL   Вверх
W4FhLF
Дата 5.4.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Цитата(frodo @  5.4.2008,  05:58 Найти цитируемый пост)
Хеш пароля я получаю, также сравниваю етот хеш с ведденным пользователем, а каким образом его использовать для открытия второго окна?  А можно ли сравнивать введенные хеши неиспользуя ператор IF? а то его тоже легко отследить!!!


Ты не совсем понял идею. Хотя с параметрами я идею не особо поддерживаю, слишком уж она завязана на специфике. 

Предлагаю сделать так. Процедура, которой передаётся управление от первого окна, работает с какими-то данными. Эти данные ты можешь объединить в структуру. Будем считать эту структуру вектором исходных данных. Далее зашифровываешь их(исходные данные) каким-нибудь блочным шифром, причём ключом должен служить верный пароль(тот, который пользователь должен будет ввести). Кроме того, тебе надо вычислить и где-нибудь сохранить контрольную сумму исходного вектора. При вводе пользователем пароля, ты пытаешься расшифровать данные, используя в качестве ключа пароль введённый пользователем. Если контрольная сумма полученного вектора не совпадает с контрольной суммой исходного вектора(которую ты уже вычислил и сохранил), то следовательно пользователь ввёл неверный пароль. Ты можешь его об этом предупредить и предложить закончить работу с программой, если же он откажется это сделать, то в дальнейшем программа будет себя вести непредсказуемо(скорее всего упадёт просто), т.к. расшифрованные неверным ключом данные не соответствуют вектору исходных данных. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
frodo
Дата 5.4.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Цитата(W4FhLF @ 5.4.2008,  09:44)
Ты не совсем понял идею. Хотя с параметрами я идею не особо поддерживаю, слишком уж она завязана на специфике. 

Предлагаю сделать так. Процедура, которой передаётся управление от первого окна, работает с какими-то данными. Эти данные ты можешь объединить в структуру. Будем считать эту структуру вектором исходных данных. Далее зашифровываешь их(исходные данные) каким-нибудь блочным шифром, причём ключом должен служить верный пароль(тот, который пользователь должен будет ввести). Кроме того, тебе надо вычислить и где-нибудь сохранить контрольную сумму исходного вектора. При вводе пользователем пароля, ты пытаешься расшифровать данные, используя в качестве ключа пароль введённый пользователем. Если контрольная сумма полученного вектора не совпадает с контрольной суммой исходного вектора(которую ты уже вычислил и сохранил), то следовательно пользователь ввёл неверный пароль. Ты можешь его об этом предупредить и предложить закончить работу с программой, если же он откажется это сделать, то в дальнейшем программа будет себя вести непредсказуемо(скорее всего упадёт просто), т.к. расшифрованные неверным ключом данные не соответствуют вектору исходных данных.

ет что получается мне все данные так шифровать чтоли? Всеравно же будет проверка, на совпадение? а проверку придется осуществлять такимже способом!!!
PM MAIL   Вверх
W4FhLF
Дата 5.4.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Цитата(frodo @  5.4.2008,  10:17 Найти цитируемый пост)
ет что получается мне все данные так шифровать чтоли?


Нет, только те, которые являются критическими при выполнении программы(т.е. от которых напрямую зависит логика работы).


Цитата(frodo @  5.4.2008,  10:17 Найти цитируемый пост)
 Всеравно же будет проверка, на совпадение? а проверку придется осуществлять такимже способом!!!


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


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
frodo
Дата 5.4.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



W4FhLF спс за идею!!!! но  я покамись на первую версию просто оставлю проверку пароля, так как несильно понимаю ету шифровку
а в дальнейшем уже как разберусь чтонить буду думать!!!
Кстати а мануала по такому(с примерчиком) нету?

Это сообщение отредактировал(а) frodo - 5.4.2008, 11:07
PM MAIL   Вверх
W4FhLF
Дата 5.4.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Цитата(frodo @  5.4.2008,  11:07 Найти цитируемый пост)
Кстати а мануала по такому(с примерчиком) нету?


Я не встречал.

Ну схематично это можно описать так:

Код

array_of_critical_data; // любые критические данные уже зашифрованные
check_sum_of_critical_data; // контрольная сумма незашифрованных критических данных

f a()
  user_pwd = get_pwd_input_by_user();
  b(user_pwd);
end;

f b(user_pwd)
  decrypted_data = try_to_decrypt(array_of_critical_data, user_pwd);
  if (compute_check_sum(decrypted_data) != check_sum_of_critical_data)
     Alert("Warn, inputed password is wrong, you should exit programm!!!")
end;


В качестве криптоалгоритма можешь взять простейший XTEA или RC4.

Это сообщение отредактировал(а) W4FhLF - 5.4.2008, 11:31


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
frodo
Дата 5.4.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



W4FhLF, лады посмотрим, что получится!!!!
PM MAIL   Вверх
v2v
Дата 5.4.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Цитата(W4FhLF @  5.4.2008,  11:29 Найти цитируемый пост)

Ну схематично это можно описать так:

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


--------------------
PM   Вверх
W4FhLF
Дата 5.4.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



v2v, я понимаю минусы данной схемы. Подобное реализовано во многих протекторах(ASProtect, WinLisence, Armadillo). 

Мне как-то попадалась программа в которой использовалась данная схема, но там бало зашифровано начало процедуры(исполняемый код прямо). Но автор не подумал, что начало процедур у программ, скомпилированных одним и тем же компилятором, одинаковое. В итоге удалось написать брутфорсер, который за десять минут подобрал правильный ключ. smile 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
v2v
Дата 5.4.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Вот статья , о которой я упоминал.
http://www.xakep.ru/magazine/xs/057/070/1.asp


--------------------
PM   Вверх
hijaq
Дата 7.4.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.4.2007

Репутация: нет
Всего: нет



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


Чтобы не было одинаковых паролей, можно для расшифровки использовать часть пароля (например, 10 символов из 16, а оставшиеся 6 - для идентификации клиента). Дополнительно, сам пароль можно поверх шифровать через White Box AES (чтобы взломщик не смог быстро достать пароль шифрования и произвести обратную процедуру).

Это сообщение отредактировал(а) hijaq - 7.4.2008, 09:33
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Технологии защиты программного обеспечения | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.