Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Затруднить чтение пароля в Dos-окне... (http://forum.oszone.net/showthread.php?t=199630)

registeruser1 16-02-2011 13:08 1614326

Затруднить чтение пароля в Dos-окне...
 
Доброго дня всем форумчанам...
Не так давно нашел (может даже и здесь, не помню, много форумов перерыл) код, реализацию которого долго искал...
Сам принцип понял, но как-то он не работает...
А принцип как видите ниже - Затруднить чтение пароля в 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 1614410

Цитата:

Цитата registeruser1
Сам принцип понял, но как-то он не работает... »

Ну почему не работает - наберите в поле пароля 565355 и пароль будет признан верным.

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

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

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

registeruser1 16-02-2011 15:37 1614463

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

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

SendMessage 16-02-2011 16:04 1614481

Вот компиляция этих батников:
Код:

@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 1614560

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

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

amel27 16-02-2011 17:45 1614583

для 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());

Цитата:

Цитата registeruser1
А зачем ping нужен там..? »

это у автора оригинала надо спросить ;)

Iska 16-02-2011 18:03 1614597

Цитата:

Цитата amel27
…и выше »

Вроде ж «%systemroot%\system32\scriptpw.dll» убирали из Vista+?!

registeruser1 16-02-2011 18:11 1614601

amel27, SendMessage, спасибо большое, то что нужно...

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

amel27 17-02-2011 06:14 1614999

Цитата:

Цитата Iska
Вроде ж «%systemroot%\system32\scriptpw.dll» убирали из Vista+?! »

точно!.. не ожидал такого от MS, значит, только копировать DLL с XP и регистрировать вручную (

kiripanda 18-02-2011 12:59 1616098

Цитата:

Цитата registeruser1
Пароль что бы находился в файле *.dat»

хеш в самом батнике

Цитата:

Цитата registeruser1
Конечно было бы супер если бы в место пароля код подставлял **** »

http://www.dostips.com/forum/viewtopic.php?p=6065#p6065

Anonymоus 18-02-2011 15:19 1616218

Цитата:

Цитата amel27
это у автора оригинала надо спросить »

Очевидно же, сообщение выводится на время, достаточное для его прочтения, потом батник завершает свою работу. Удобнее, чем "Для продолжения нажмите любую клавишу"

Anonymоus 18-02-2011 18:07 1616414

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


Время: 19:57.

Время: 19:57.
© OSzone.net 2001-