С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10

О ненадежности хранения пароля в программе

19.11.2012, 17:40. Показов 1479. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
 Комментарий модератора 
Прим. Часть сообщений из темы Регистрация ActiveX-DLL без прав администратора
выделено в новую "Прячем пароль в скомпилированной программе"


Цитата Сообщение от Dragokas Посмотреть сообщение
Итак, с целью спрятать пароль подключения к базе данных
Интересна эта часть. Действительно удалось спрятать пароль внутри программы так, что его нет возможности подсмотреть? Даже при пошаговом выполнении в дебагере?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2012, 17:40
Ответы с готовыми решениями:

Класс для хранения логина-пароля
Здравствуйте, уважаемые. Накидал некоторый ГУЙ (Windows Forms) для MySQL. Текстбоксы для ввода логина-пароля и dataGridView для...

Способ хранения картинок в программе
Здравствуйте. Планирую написать некоторую программу, в которой подразумевается работа с изображениями, вывод их на экран. Изображения не...

Организация хранения данных в программе тестирования знаний
Добрый день, форумчане. Возникла необходимость написать программу для тестирования знаний. И тут возник вопрос: где и как лучше...

7
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
19.11.2012, 20:55
Оффтоп:

Pro_grammer, можешь посмотреть принцип "шифрования" в теме:
Синхронизация программ через реестр (код № 2 строки №№ 6,7 - шифрофраза "3.14" ). Если расчеты предварительно не присваивать переменной, то через дебаггер, думаю, это будет весьма сложно отловить.
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
19.11.2012, 21:45  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Если расчеты предварительно не присваивать переменной, то через дебаггер, думаю, это будет весьма сложно отловить.
Как это "не присваивать расчеты переменной"? То что я увидел в коде интересно, но бессмысленно
Это
Visual Basic
1
2
3
Pi = (((Sin(0.7) ^ 2 + Cos(0.7) ^ 2 + 1) * 10 + 11) * 100 + Asc("*") + True) * 10 + _
Int((Tan(0.3) + Atn(0.3)) * 10) - 1 & Asc("\")
Pi = Pi / 1000000
компилятор скорее всего заменит на это
Visual Basic
1
Pi =3,141592
Когда пароль вводиться из вне, тогда это не ломаемо ( по типу архиватора WinRAR), а когда пароль храниться внутри программы, то я всегда думал, что это крайне ненадежно, потому и заинтересовался вашей наработкой.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
19.11.2012, 22:49
Ну, например, так:
Visual Basic
oConn.Open "Driver={MySQL ODBC 5.2w Driver};Server=localhost;Database=sara;charset=cp1251;User=root;Password=" & _
(((Sin(0.7) ^ 2 + Cos(0.7) ^ 2 + 1) * 10 + 11) * 100 + Asc("*") + True) * 10 + _
Int((Tan(0.3) + Atn(0.3)) * 10) - 1 & Asc("\") & ";Option=3;"
Цитата Сообщение от Pro_grammer Посмотреть сообщение
а когда пароль храниться внутри программы, то я всегда думал, что это крайне ненадежно
Вполне согласен. У меня недостаточно знаний, чтобы такое оспорить.

Но согласитесь, такой принцип в скомпилированном виде тянет чуть больше, чем защита на дурака.
2
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
19.11.2012, 23:09  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Ну, например, так:
Надо будет испробовать!

Добавлено через 14 минут
Попробовал. Чуда нет, в программе этот кусок виден как
БББ;Driver={MySQL ODBC 5.2w Driver};Server=localhost;Database=sara;c harset=cp1251;User=root;Password=БББ;Opt ion=3;БББ
А это значит, что компилятор просто вычислил значение выражения и записал в код. Т.е. нет смысла писать формулу - в скомпилированном виде обычное число имело бы такой же эффект.
А раз так, то дебагером его вытащить не составит труда.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.11.2012, 01:43
Гм, "не виноватая я", это я у INV.DS подсмотрел ).

Цитата Сообщение от Pro_grammer Посмотреть сообщение
компилятор просто вычислил значение выражения и записал в код.
Интересно, все ли компиляторы других ЯП поступают подобным образом (С++ например).

А если наоборот разнести во множество переменных.
А пароль в строке коннекта записать, как A + B + C ...

Понимаю, что бред. Но все же, хочется получить из этого что-нибудь полезное.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.11.2012, 08:35  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dragokas Посмотреть сообщение
нтересно, все ли компиляторы других ЯП поступают подобным образом
Да, все вменяемые компиляторы упрощают выражения, складывают переменные, если заранее известно их значение. Оптимизируют оптимально код.
Проблема скрытия ключа внутри программы - стара, как программирование.
И к сожалению неразрешима в полной мере. Есть комплексные решения, затрудняющие его обнаружение. Первое и обязательное это шифрование ключа. Т.е шифруется ключик заранее, другим кодом, а расшифровывается непосредственно перед применением уже в вашей программе. Пусть даже банальным XOR. Но ни как не формулы писать - это мы уже выяснили, не шифрование, а просто легкая задачка компилятору.
Второе - это противодействие декомпиляции и отладчикам. Это защита в виде различных упаковщиков-протекторов. Обфускация. В нашем примере срока
Visual Basic
1
Server=localhost;Database=sara;charset=cp1251;User=r oot;Password=
торчит в программе как маяк, её видно просто в любом текстовом редакторе, не говоря уж о специальных средствах. При таком подходе в любом отладчике поставить точку останова и при пошаговом выполнении программы подсмотреть пароль дело пары минут. И не важно, как до этого мы его зашифровали - ведь при передаче в строку мы его будем обязаны расшифровать!
А вот если эта строка будет невидима в коде, то поиск может затянуться.
3
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.11.2012, 09:43
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dragokas Посмотреть сообщение
Интересно, все ли компиляторы других ЯП поступают подобным образом (С++ например)
От конкретного языка программирования это слабо зависит. В случае Си и Си++ функции sin, cos и прочие, которые номинально являются внешними по отношению к твоей программе, на самом деле описаны в стандарте, а потому компилятор имеет право выполнить для них превращение в константу, если аргумент функции является константой (и в погоне за публикуемыми цифрами производительности основные современные компиляторы делают это по умолчанию).

Конечно же код:

C
1
2
3
4
5
6
void func (void)
{
  ...
  x = sin (0.5) + cos (0.6);
  ...
}
можно переписать в виде

C
1
2
3
4
5
6
7
8
9
double const1 = 0.5;
double const2 = 0.6;
 
void func (void)
{
  ...
  x = sin (const1) + cos (const2);
  ...
}
и компилятор свёртку констант выполнить не сможет, но в отладчике всё равно можно посмотреть значение в процессе исполнения.

По поводу постановки вопроса в общем:
1. Программу любого уровня сложности можно просмотреть в отладчике или, на крайний случай, в программном симуляторе машины. Любое значение, получаемое в процессе исполнения, вычисляется, вопрос исключительно в затратах времени и желании
2. Любая программа, работающая с паролем, работает с каким-то внешним ресурсом (удалённым сайтом, базой данных и т.п.), а потому данные утекают за предел адресного пространства программы, а потому эти данные тупо перехватываются
3. Любая передача пароля в незашифрованном виде - это дыра в безопасности (и ловится хоть первым пунктом, хоть вторым). Собственно, в посте #7 об этом уже написано
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2012, 09:43
Помогаю со студенческими работами здесь

Выбор места для хранения текста в программе
Добрый вечер. Мне в программе надо выводить на экран небольшой текст на родном языке (50 строк по 20 символов). Есть несколько способов это...

Как поменять в программе путь хранения настроек
Есть программа с открытым исходным кодом (LazyCure). Мне не нравится, что она сохраняет настройки в Local Settings\Application Data, так...

Организация пароля в программе
штосьци ругается на getpass и на 8 строчку #include <stdio.h> #include <conio.h> #include <string.h> int main(void) ...

Подбор пароля в программе
Здравствуйте форумчане, у нас на работе один кулхацкер наваял программу для работников (андроид и иос). Программа защищена 4-х значным...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru