Что нового

Пароль к своей программе

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
как уже сказали, лучший способ - хранить в скрипте хэш пароля, а сам пароль держать в голове, передавать устно или любым другим способом не связанным со скриптом
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Ребят, если говорить о защите кода программы, то если один человек зашифровал, то при большом желании другой расшифрует. С паролем, та же история. Остаётся сделать процесс шифрования настолько уникальным, чтобы попытка расшифровать, занимала катастрофически много времени.
Если нужен просто пароль, думаю, MD5 вполне пригоден. Хеш пароля можно хранить и в скрипте, даже если его вытащить, то уж подобрать будет достаточно проблематично.
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Kaster сказал(а):
брутфорсом? это практически невозможно.
Если пароль не очень сложный - можно пробить его по базе md5 хэшей, благо таких сервисов - уйма.
А вот если комбинировать это все с солью или делать Sha1(MD5($str)) - то перебор уже будет только прямой, например прогой PasswordsPro.
Если пароль реально крутой - взломать его действительно будет нереально (долго).
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
Всем привет!

Вот начитался я тут постов повыше и у меня возникла одна интересная идея. Хочу ее проверить. :smile:

В общем был у меня один скриптик "GetRGB". Я его запаролил.
Интересно сможет ли кто-то из форумчан его взломать.

Я не претендую на уникальность и невозможность это сделать. Просто интересно. Если кому-то надоест ломать голову, пишите мне в личку. Обязательно всем отвечу. Потом чуть позже выложу ответ для всех в этой теме. Сразу делать это не хочу, а то никто даже и не попробует. :smile:

GetRGB hackme
 

sss

Продвинутый
Сообщения
332
Репутация
96
Оригинально. Молодец, хороший метод, так просто не открыть! Буду использовать, спасибо ))
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Pelerin [?]
сможет ли кто-то из форумчан его взломать
Сам пароль получить будет не просто, но вот код программы, почти весь можно получить.
Меня больше интересует не то как поставить на пароль (эту возможность уже продемонстрировал dwerf выше), а то как ты компилировал Encrypted.exe, у него не все куски кода декомпилировались, а это значит, что в эти куски можно в принципе и пароль спрятать :smile:
Понял, там нехватает данных, которые позже добавляются при получений пароля.

Я правда не вижу в этом смысла, пароль всё равно будет непросто получить, ведь требуется ввод пользователя, и без пароля расшифровать не получится.
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
CreatoR
Я правда не вижу в этом смысла, пароль всё равно будет непросто получить, ведь требуется ввод пользователя, и без пароля расшифровать не получится.
Осталось только придумать, как и кому давать пароль (если предполагается использовать программу в коммерческих целях)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR
Честно говоря, я вашу мысль не улавливаю :scratch:
Если вопрос в защите от декомпиляции, то IMHO это напрасная трата времени.
А если вопрос в хранение пароля внутри программы, то мне интересно, чем плох MD5?
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
AZJIO
идея с шифрованием пароля самим паролем
не пойму... :scratch: это не так... пароль паролем я не шифровал... (Или может мы о разных вещах говорим?)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
Честно говоря, я вашу мысль не улавливаю
Какю именно?

Если вопрос в защите от декомпиляции, то IMHO это напрасная трата времени.
Так я о чём и говорю, для хранения пароля при условий что требуется ввод пароля пользователем, достаточно метода от dwerf (зашифровка пароля самим паролем), а всё остальное лишнее.

если вопрос в хранение пароля внутри программы, то мне интересно, чем плох MD5?
MD5 чего? ещё раз повторю, если не требуется ввод пользователя, то нет надёжного способа хранения пароля в программе.


AZJIO [?]
Свой же пароль зашифрован паролем?
Да! см. тему с начала.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Pelerin [?]
пароль паролем я не шифровал
Шифровал часть данных из Encrypted.exe, пароем который вводит пользователь. Т.ч вся кухня с дополнительным exe лишняя.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR [?]
если не требуется ввод пользователя
Согласен.
Скажу больше, в чём тогда вообще смысл пароля, если не нужна ответная часть.
Пароль IMHO на то и пароль, чтобы были две части. Это сравни замку! Зачем ключ если нет замка, и наоборот.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
Скажу больше, в чём тогда вообще смысл пароля, если не нужна ответная часть.
Смысл есть, у меня есть пару программ где мне нужно хранить пароль от почтового ящика в скрипте (для отправки писем из скрипта). Пока обошёлся созданием отдельно ящика, специально для программы :smile:
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
как то не до конца...
Чего я и хотел добиться - скрыть код проги от посторонних глаз

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


Добавлено:
Сообщение автоматически объединено:

В общем вот то что я наваял: :smile:
Encryptor:
Код:
#include <string.au3>

$File_to_encrypt = FileOpenDialog ('', '', '(*.exe)', 1)
if $File_to_encrypt = '' then Exit
$password = InputBox ('', '', '', '*')
If $password = '' then Exit

$open_file_to_encrypt = FileOpen($File_to_encrypt, 16)
$data_file_to_encrypt = FileRead($open_file_to_encrypt)
FileClose($open_file_to_encrypt)

$part_to_encrypt = StringRight($data_file_to_encrypt, 256)
$key = StringRight($data_file_to_encrypt, 128)

$encrypted_part = _StringEncrypt(1, $part_to_encrypt, $password)
$encrypted_part_len = StringLen ($encrypted_part)

$data_file_to_encrypt = StringReplace ($data_file_to_encrypt, $part_to_encrypt, $encrypted_part)

$open_file_to_encrypt = FileOpen (@ScriptDir&'\Enrcypted.exe', 18)
FileWrite($open_file_to_encrypt, $data_file_to_encrypt)
FileClose($open_file_to_encrypt)

$key_file = FileOpen (@ScriptDir&'\key.txt', 2)
FileWrite($key_file, $key&@CRLF&$encrypted_part_len)
FileClose($key_file)
;----------------------------------


Decryptor:
Код:
#include <string.au3>
#include <file.au3>
$tmp_encrypted = _TempFile()
$tmp_decrypted = _TempFile()

FileInstall ('d:\Danil\Рабочий стол\TestAutoit\Enrcypted.exe', $tmp_encrypted)
$open_file_to_decrypt = FileOpen ($tmp_encrypted, 16)
$data_file_to_decrypt = FileRead ($open_file_to_decrypt)
FileClose($open_file_to_decrypt)
$encrypted_part = StringRight ($data_file_to_decrypt, 'Здесь должна быть длина зашифрованного куска')

Do
   $password = InputBox (@ScriptName, 'Пароль пожалста....', '', '*', 200, 100)
   If $password = '' then
      FileDelete ($tmp_encrypted)
      Exit
   EndIf
   $decrypted_part = _StringEncrypt(0, $encrypted_part, $password)
Until StringInStr ($decrypted_part, 'Сюда нужно вставить ключ') <> 0

$data_file_to_decrypt = StringReplace ($data_file_to_decrypt, $encrypted_part, $decrypted_part)
$open_file_to_decrypt = FileOpen ($tmp_decrypted, 18)
FileWrite ($open_file_to_decrypt, $data_file_to_decrypt)
FileClose ($open_file_to_decrypt)

RunWait ($tmp_decrypted)
FileDelete ($tmp_decrypted)
FileDelete ($tmp_encrypted)


$key - это только половина шифруемой части. Если бы я использовал весь шифруемый участок в качестве ключа, то его можно было бы просто подставить вместо зашифрованной части и получить рабочий exe. А так половина ключа остается неизвестной... даже мне :smile: .

Мне понравилось решение dwerf, но тут можно декомпилировать код и увидеть тело программы.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Pelerin [?]
тогда можно декомпилировать скрипт, повырезать "мешающие" куски, скомпилировать и пользоваться дальше... Поэтому я и использовал внутренний exe (который по идее не должен декомпилироваться, т.к. в нем "не правильный" кусок).
+1. Теперь стало ясно для чего эта заморочка.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ну что, вы придумали способ как обмануть отца русской демократии пиратов? :smile:
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
AZJIO
Конечно, без пароля не возможно вытащить код, но работа программы как бы предполагает наличие пароля, а иначе её можно просто упаковать в архив с паролем.
Ну в принципе да. А у меня получилось, что пароль нужен и для работы и для открытия кода. Единственный минус - если знаешь пароль то легко можно стащить из папки tmp рабочий exe. Но можно еще и слежение за буфером прикрутить, но мне было лень :smile:

Кстати пароль от GetRGB_hackme: 'Non hacked' (если кому еще интересно)
 

ZlojBoter

Новичок
Сообщения
55
Репутация
0
Интересный способ, по крайней мере позволяет запаролить прогу до первой покупки хацкером, а дальше, имея пароль все равно он сможет выдрать нужный кусок и скомпилировать в рабочий скрипт.
Интересует один вопрос: шифруется весь текст, имея часть незашифрованного текста чисто математически, может облегчиться процесс расшифровки всего текста?
 
Верх