PDA

Показать полную графическую версию : [решено] Затруднить чтение пароля в Dos-окне...


registeruser1
16-02-2011, 13:08
Доброго дня всем форумчанам...
Не так давно нашел (может даже и здесь, не помню, много форумов перерыл) код, реализацию которого долго искал...
Сам принцип понял, но как-то он не работает...
А принцип как видите ниже - Затруднить чтение пароля в Dos-окне.

@Echo Off
Echo.
Echo.
Set /P $Input= Введите пароль для продолжения ^>
Call :GetPswd
If Not "%$Input%"=="%$Pswd%" Cls&Echo Неправильный пароль, завершение работы&Ping -n 5 127.0.0.1>nul&Exit /B 1

Rem Тут код батника
Exit

:GetPswd
Set $Pswd=2545694053132554185
set $Pswd=%$Pswd:2=%
Set $Pswd=%$Pswd:~-0,13%
Set $Pswd=%$Pswd:54=%
Set $Pswd=%$Pswd:940=%
Set $Pswd=%$Pswd:135=%
Set $Pswd=%$Pswd%5

Нашел вариант еще одной реализации, правда тут так закрученно, что я не все понял -

@echo off
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>in.com
set /p password=Enter password:<nul
for /f "tokens=*" %%i in ('in.com') do set "password=%%i"
del in.com
echo.
echo The Password is:"%password%"

Может поможете как-нибудь добить многих интересующую проблему..?
Буду очень признателен...

SendMessage
16-02-2011, 14:53
Сам принцип понял, но как-то он не работает... »
Ну почему не работает - наберите в поле пароля 565355 и пароль будет признан верным.

Во втором создается файл, который считывает нажатия в консоли. И передает в переменную. С ней потом можно работать.

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

Если их объединить - получится, наверное, то, что Вам нужно. :)

registeruser1
16-02-2011, 15:37
SendMessage
Спасибо за разъяснения, а можно объединив и дополнив их получить такой алгоритм -

Пароль что бы находился в файле *.dat, а при вводе так же на экране он не отображался...
P.s.
Конечно было бы супер если бы в место пароля код подставлял ****, но как меня уверили - это почти не реализуемо...

SendMessage
16-02-2011, 16:04
Вот компиляция этих батников:
@Echo Off
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>in.com
Set /P $Pswd=<x.dat
Echo.
Echo.
Set /P $Input= Введите пароль для продолжения: <nul
for /f "tokens=*" %%i in ('in.com') do set "$Input=%%i"
del in.com
If Not "%$Input%"=="%$Pswd%" Cls&Echo Неправильный пароль, завершение работы&Ping -n 5 127.0.0.1>nul&Exit /B 1
Rem Тут код батника
Exit
пароль лежит в файле x.dat

registeruser1
16-02-2011, 17:20
SendMessage, благодарю, не плохо получилось...
А можно что бы файлу in.com можно было бы путь прописать где он должен появляться...?

P.s.
А зачем ping нужен там..? Вроде бы и так успевает удалять файл...

amel27
16-02-2011, 17:45
для XP и выше можно через WSH:
@set @x=0 /*
@echo off

SETLOCAL EnableDelayedExpansion
set /p $Pswd=<x.dat
set /p $Input= Введите пароль для продолжения: <nul
for /f "delims=" %%a in ('cscript /nologo /e:jscript "%~f0"') do set "$Input=%%a"
if not "!$Input!"=="!$Pswd!" Cls&echo Неправильный пароль, завершение работы&Ping -n 5 127.0.0.1>nul&Exit /B 1
::
:: Тут код батника
::
exit>nul */
WScript.Echo(WScript.CreateObject("ScriptPW.Password").GetPassword());


А зачем ping нужен там..? »это у автора оригинала надо спросить ;)

Iska
16-02-2011, 18:03
…и выше »
Вроде ж «%systemroot%\system32\scriptpw.dll» убирали из Vista+?!

registeruser1
16-02-2011, 18:11
amel27, SendMessage, спасибо большое, то что нужно...

P.s. тему в принципе можно считать закрытой, буду использовать этот вариант и по ходу искать возможности со звездочками...
Благодарю...!

amel27
17-02-2011, 06:14
Вроде ж «%systemroot%\system32\scriptpw.dll» убирали из Vista+?! »
точно!.. не ожидал такого от MS, значит, только копировать DLL с XP и регистрировать вручную (

kiripanda
18-02-2011, 12:59
Пароль что бы находился в файле *.dat»
хеш в самом батнике (http://www.dostips.com/forum/viewtopic.php?p=6323#p6323)

Конечно было бы супер если бы в место пароля код подставлял **** »
http://www.dostips.com/forum/viewtopic.php?p=6065#p6065

Anonymоus
18-02-2011, 15:19
это у автора оригинала надо спросить »
Очевидно же, сообщение выводится на время, достаточное для его прочтения, потом батник завершает свою работу. Удобнее, чем "Для продолжения нажмите любую клавишу"

Anonymоus
18-02-2011, 18:07
Немного посидел, и написал вот такое решение. Код прокомментирован, но если будут вопросы - пожалуйста. Использованное стороннее ПО - Wbat: реализация красивостей интерфейса и "звездочек" в пароле; 7zip: поддержка шифрования. Проверено на ОС WinXP SP3. Кодировка батника - 866 DOS
Особенности реализации: Защита по паре логин-пароль, ничего из этого не светится в открытом виде перед пользователем, просто открывшим скрипт для просмотра. При желании можно прикрутить несколько аккаунтов через цикл for. Authorization.dat представляет из себя 7-zip архив, содержащий файл pswd с паролем внутри, и запароленный на нужный логин пользователя. (При желании можно прикрутить проверку authorization.dat по md5, чтобы предотвратить его замену пользователем)
Недостатки: Wbat - 16-битная программа, поэтому она не совсем корректно работает с длинными путями, содержащими пробелы и русские символы, для обхода этой проблемы было применено временное монтирование виртуального логического диска и добавление его в PATH (только на время работы скрипта).
Демо: архив со скриптом и требуемыми ему утилитами можно скачать здесь. http://rghost.ru/4432044 Данные авторизации для скрипта - логин: Anonymous пароль: JHDRn45hdciw
Скриншот: http://rghost.ru/4432055/image.png
Описание: Для начала монтируется временный диск с содержимым директории bin, он же прописывается в PATH. Затем идет вызов собственно, самого скрипта, и отрисовка главного окна и поясняющего текста. Далее, отрисовывается слой с боковы меню - Вход и Отмена, в зависимости от выбора пользователя происходит либо выход из скрипта, либо появление всплывающего окна с формой логина. Если ничего не введено, либо форма закрыта - возврат к главному окну. Если заполнены оба поля - идет их проверка, сначала логина - потом, если он подходит - пароля. Если что-то не подходит - об этом сообщается соответствующим сообщением снизу "окна" с формой авторизации. Если все ок - перенаправляется на нужную часть скрипта, когда она отрабатывает - отмонтирует временный логический диск и завершает работу.

@Echo Off
Rem Загрузчик, выполняющий создание виртуального логического диска
Rem и нужных переменных, затем загружающий выбранный скрипт.
If Not Exist bin Echo Требуемая для работы директория не найдена&Echo Нажмите любую кнопку для выхода&Pause>nul&Exit
Set Disk=X
Set WorkDir=%cd%
Set BinDir=%cd%\bin
Subst %Disk%: "%BinDir%"
Set Path=%Path%;%Disk%:\
Cls
Rem Начало исполняемого скрипта (вызовите его через Call)
Rem Возможно использование этого же файла, для этого код скрипта нужно разместить
Rem в :Script и вызывать эту секцию, а ресурсы в :Resources, и использовать их
Rem конструкцией вида @%~nx0:Labelname
Color 71
Mode CON Cols=80 Lines=25
Call :Script
Rem Конец исполняемого скрипта
Subst /D %Disk%:
Exit


Rem Тело скрипта
:Script
Cls
Title Test
Wbat text @%~nx0:MainPage
Set wShadow=none&Set wBar=+white on blue&Set wHotkey=None
Wbat fix box 2,1 @%~nx0:Menu
Set wShadow=&Set wBar=&Set wHotkey=
If "%Errorlevel%"=="1" Set LoginMsg= &GoTo :Login
Exit /B
:Login
Set Login=&Set Pass=
Call w.bat box 14,25 @%~nx0:LoginForm
If %Errorlevel%==100 GoTo Script
If "%Login%"=="" Set LoginMsg=Не все поля заполнены&GoTo Login
If "%Pass%"=="" Set LoginMsg=Не все поля заполнены&GoTo Login
7z.exe x -p%Login% -y authorization.dat 1>nul
If %Errorlevel%==2 Del pswd&Set LoginMsg=Пользователь не найден&GoTo Login
Set /P Verify=<pswd&Del pswd
If %Verify%==%Pass% (GoTo Data) Else (Set LoginMsg=Неверный пароль&GoTo Login)
:Data
Rem Именно здесь располагаются основные функции скрипта, но так как это
Rem просто пример - здесь стоит заглушка в виде одной-единственной кнопки
Title Авторизация успешна
Wbat cls
Wbat box [OK]
Exit /B


Rem Ресурсы
:Resources
:MainPage
# Меню ^

Это пример скрипта, обеспечивающего базовую
аутентификацию пользователя. Сам пароль
хранится в зашифрованном виде и не доступен
для просмотра.
При создании скрипта использовалось стороннее
ПО: ~Wbat~ и ~7-zip~.
:Menu
[ Вход ]
[ Отмена ]
:LoginForm " Требуется авторизация " [X]
Логин:
[$ login,20 ]
Пароль:
[$ pass,20P ]
~%LoginMsg%~
[Ввод] [? Отмена]

UPD: Скрипт дополнен, исправлен переход к основному меню при отказе от логина, в форму добавлены кнопки "Ввод" и "Отмена"




© OSzone.net 2001-2012