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

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

19.11.2012, 17:40. Показов 1494. Ответов 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
18033 / 7736 / 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
18033 / 7736 / 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
18033 / 7736 / 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
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru