It allows you to protect your files using ACL's, and encode them using Base64.
All you need is create an account, and only your account can unlock the files you protected before.
File: iProtect.cmd
Code: Select all
:: 6/3/14 21:09 - 5/4/14 03:18
:: iProtect 4.1
:: Criador: rafael.flip@hotmail.com
:: Versão anterior (4.0) -----> http://pastebin.com/QBjhnQvf
:: Basta seguir as instruções dos menus do programa
:: Incluida barra de progresso ao criptografar
@echo off
setlocal enabledelayedexpansion
mode con cols=69 lines=20
:Inicio
cls&call:welcome&echo/
call:menu "Login" "Cadastrar" "Site" "Sair"
if not defined choice call:mostraErro "Op‡Æo inv lida!"&goto Inicio
if "!choice!" == "1" (
goto Login
)
if "!choice!" == "2" (
goto cadastro
)
if "!choice!" == "3" (
goto Site
)
if "!choice!" == "4" (
goto sair
)
::=====================================================SEÇÕES===========================================
::=====================================================SEÇÕES===========================================
::=====================================================SEÇÕES===========================================
:cadastro
cls
setlocal
set /p "usuario=Seu nome de usu rio: "
if "%usuario%" == "" (endlocal&goto cadastro)
call:ler HKCU\Software\HNDSofts\iProtect\4\Users\%usuario% nome
if "%result%" neq "" (call:mostraErro "Usu rio %usuario% j existe"set result=&endlocal&goto inicio)
call:mostrarComCor "Sua senhaÿ" "0c"
call:criptografarSenha
if defined senhaCript (
call:gravar HKCU\Software\HNDSofts\iProtect\4\Users\%usuario% string nome %usuario%
call:gravar HKCU\Software\HNDSofts\iProtect\4\Users\%usuario% string senha "!senhaCript!"
call:mostraSucesso "Usu rio %usuario% criado com sucesso"&timeout 3 1>nul
) else (
call:mostraErro "Digite sua senha"&timeout 3 1>nul
)
endlocal
goto inicio
:Login
cls
setlocal
set /p "usuario=Seu nome de usu rio: "
if "%usuario%" == "" (endlocal&goto cadastro)
call:ler HKCU\Software\HNDSofts\iProtect\4\Users\%usuario% nome
if "%result%" equ "" (call:mostraErro "Usu rio %usuario% nÆo existe"&timeout 3 1>nul&endlocal&goto inicio)
call:ler HKCU\Software\HNDSofts\iProtect\4\Users\%usuario% senha
call:mostrarComCor "Sua senhaÿ" "0c"
call:criptografarSenha
if defined senhaCript (if "%result%" == "%senhaCript%" (
call:telaInicial
) else (
echo/&call:mostraErro "Senha incorreta"
)) else (
echo/&call:mostraErro "Senha incorreta"
)
endlocal
goto inicio
:site
(
echo/[InternetShortcut]
echo/URL=http://www.hndsofts.com
) > site.url
site.url&del site.url
goto inicio
:sair
endlocal
exit/b
::====================================================TELA USER=========================================
:telaInicial
cls
call:menu "Proteger arquivos" "Desproteger arquivos" "Criptografar arquivos" "Descriptografar arquivos" "Configurar conta" "Logout"
if not defined choice call:mostraErro "Op‡Æo inv lida!"&goto telaInicial
if "!choice!" == "1" (
goto _proteger
)
if "!choice!" == "2" (
goto _desproteger
)
if "!choice!" == "3" (
goto _criptografarArquivos
)
if "!choice!" == "4" (
goto _descriptografarArquivos
)
if "!choice!" == "5" (
goto configurarConta
)
if "!choice!" == "6" (
goto logOut
)
:_proteger
goto proteger
:_desproteger
goto desproteger
:_criptografarArquivos
goto criptografar
:_descriptografarArquivos
goto descriptografar
:_configurarConta
goto configurarConta
:logOut
endlocal
goto:eof
::==================================================TELA PROTEGER========================================
:proteger
set "result="&cls&echo/
call:mostrarComCor "Arraste e solte aqui seu arquivo ou ou pasta e tecle enter" "a0"
echo/&call:mostrarComCor "Ou digite seu o caminho completo" "a0"
echo/&echo/&set/p "file="
if exist "%file%" (
for /f "delims=*" %%a in ("%file%") do (set "file_f=%%~fa")
call:criptografarChave "!file_f!*%usuario%"
echo/
call:ler Software\HNDSofts\iProtect\4\System files "multi:hkcu"
if exist "multLine.txt" (
call:verificarProtegido
) else (set arquivoProtegido=0)
if !arquivoProtegido! equ 1 (
call:mostraErro "Arquivo ja protegido!"
del multLine.txt
endlocal
goto telaInicial
)
if !arquivoProtegido! equ 2 (
set "merge=!keyencode!"
for /F %%r in (multLine.txt) do (
set "merge=!merge!$%%r"
)
del multLine.txt
)
if !arquivoProtegido! equ 0 (
set "merge=!keyEncode!"
)
cacls "!file_f!" /e /c /p Todos:N 1>nul 2>nul||cacls "!file_f!" /e /c /p Everyone:N 1>nul 2>nul
call:gravar HKCU\Software\HNDSofts\iProtect\4\System multi files "!merge!" "/s $"
call:mostraSucesso "Arquivo protegido com sucesso"
endlocal
goto telaInicial
) else (
call:mostraErro "Arquivo inexistente!"
endlocal
goto telaInicial
)
endlocal
goto inicio
:verificarProtegido
set arquivoProtegido=
for /f %%r in (multLine.txt) do (
echo/%%r>_decode0.txt
certutil -decode _decode0.txt _decode1.txt 1>nul 2>nul
certutil -decode _decode1.txt _decode2.txt 1>nul 2>nul
Set /p _decode2=<_decode2.txt
del _decode0.txt & del _decode1.txt & del _decode2.txt
for /F "delims=* tokens=1" %%c in ('echo/!_decode2!') do (
if "!file_f!" equ "%%c" set arquivoProtegido=1
)
)
if not defined arquivoProtegido set arquivoProtegido=2
exit/b
::================================================TELA DESPROTEGER======================================
:desproteger
set "result="&cls&echo/
call:mostrarComCor "Arraste e solte aqui seu arquivo ou ou pasta e tecle enter" "b0"
echo/&call:mostrarComCor "Ou digite seu o caminho completo" "b0"
echo/&echo/&set/p "file="
if exist "!file!" (
for /f "delims=*" %%a in ("!file!") do (set "file_f=%%~fa")
) else (
call:mostraErro "Arquivo inexistente"
endlocal
goto telaInicial
)
call:ler Software\HNDSofts\iProtect\4\System files "multi:hkcu"
if exist "multLine.txt" (
set protegido=0
for /F %%a in (multLine.txt) do (
echo/%%a>_decode0.txt
certutil -decode _decode0.txt _decode1.txt 1>nul 2>nul
certutil -decode _decode1.txt _decode2.txt 1>nul 2>nul
Set /p _decode2=<_decode2.txt
del _decode0.txt & del _decode1.txt & del _decode2.txt
for /F "delims=* tokens=1" %%c in ('echo/!_decode2!') do (
if "!file_f!" equ "%%c" (
set protegido=1
set "atual=%%a"
set "_atual=!_decode2!"
)
)
)
if !protegido! equ 1 (
for /F "delims=* tokens=2" %%c in ('echo/!_atual!') do (
if "!usuario!" equ "%%c" (
for /F %%z in (multLine.txt) do (
if "!atual!" neq "%%z" echo/%%z>>newMulti.txt
)
reg delete HKCU\Software\HNDSofts\iProtect\4\System /v files /f 1>nul 2>nul
if exist newMulti.txt (
set merge=
for /F %%Z in (newMulti.txt) do (
set "merge=!merge!$%%Z
)
set "merge=!merge:~1!
call:gravar HKCU\Software\HNDSofts\iProtect\4\System multi files "!merge!" "/s $"
)
del multLine.txt & del newMulti.txt 2>nul
cacls "!file_f!" /e /c /p Todos:F 1>nul 2>nul||cacls "!file_f!" /e /c /p Everyone:F 1>nul 2>nul
call:mostraSucesso "Arquivo desprotegido"
endlocal
goto telaInicial
) else (
del multLine.txt
call:mostraErro "Voce nao pode desproteger este arquivo"
endlocal
goto telaInicial
)
)
) else (
del multLine.txt
call:mostraErro "Arquivo nao esta sendo protegido"
endlocal
goto telaInicial
)
) else (
call:mostraErro "Nao ha arquivos protegidos"
endlocal
goto telaInicial
)
::================================================TELA CRIPTOGRAFAR======================================
:criptografar
set "result="&cls&echo/
set "SenhaCript="
call:mostrarComCor "Arraste e solte aqui seu arquivo ou ou pasta e tecle enter" "e0"
echo/&call:mostrarComCor "Ou digite seu o caminho completo" "e0"
echo/&echo/&set/p "file="
if exist "%file%" (
for /f %%a in ("!file!") do (set "attr=%%~aa")
if /i "!attr:~0,1!" == "d" (
call:mostraErro "Pastas nao sao permitidas"
endlocal
goto telaInicial)
call:mostrarComCor "Digite uma senha para este arquivoÿ" "c0"
call:criptografarSenha
if "!SenhaCript!" neq "" (
echo/&call:mostrarComCor "Aguarde..." "b0"
for /f %%a in ("!file!") do (set "localFile=%%~dpa")
for /f %%a in ("!file!") do (set "fileName=%%~nxa")
certutil -encode "!file!" "!file!_" 1>nul 2>nul
for /f %%a in ("!file!_") do (set actualSiz=%%~za)
for /f %%a in ('type !file!_') do (
echo/%%a|find "----">nul||echo/%%a>>"!file!_2"
if exist "!file!_2" (
set /a progress_ = progress
for /f %%i in ("!file!_2") do (set actualSiz_=%%~zi)
set /a progress=actualSiz_*100
set /a progress=progress/actualSiz
)
if !progress_! lss !progress! (
CALL:PROGRESSBAR 50 !progress!&echo/
call:mostrarComCor "Passo 1 de 2" "0a"
)
)
certutil -encode "!file!_2" "!file!_3" 1>nul 2>nul
for /f %%a in ("!file!_3") do (set actualSiz=%%~za)
for /f %%a in ('type !file!_3') do (
echo/%%a|find "----">nul||echo/%%a>>"!file!_4"
if exist "!file!_4" (
set /a progress_ = progress
for /f %%i in ("!file!_4") do (set actualSiz_=%%~zi)
set /a progress=actualSiz_*100
set /a progress=progress/actualSiz
)
if !progress_! lss !progress! (
CALL:PROGRESSBAR 50 !progress!&echo/
call:mostrarComCor "Passo 2 de 2" "0a"
)
)
ren "!localFile!!fileName!" "[backup]_!fileName!" 1>nul 2>nul
echo/!SenhaCript!:iProtect>!file!
type "!file!_4">>!file!
del !file!_ & del !file!_2 & del !file!_3 & del !file!_4
attrib +r "!file!"
call:mostraSucesso "Arquivo criptografado com sucesso"
endlocal
goto telaInicial
) else (
call:mostraErro "Digite uma senha"
endlocal
goto telaInicial
)
) else (
call:mostraErro "Arquivo inexistente"
endlocal
goto telaInicial
)
::================================================TELA DESCRIPTOGRAFAR======================================
:descriptografar
set "result="&cls&echo/
set "SenhaCript="
call:mostrarComCor "Arraste e solte aqui seu arquivo ou ou pasta e tecle enter" "e0"
echo/&call:mostrarComCor "Ou digite seu o caminho completo" "e0"
echo/&echo/&set/p "file="
if exist "%file%" (
for /f %%a in ("!file!") do (set "attr=%%~aa")
if /i "!attr:~0,1!" == "d" (
call:mostraErro "Pastas nao sao permitidas"
endlocal
goto telaInicial)
call:mostrarComCor "Este arquivo necessita de uma senha, digite-aÿ" "c0"
call:criptografarSenha
if "!SenhaCript!" neq "" (
set /p certificado=<!file!
for /f "delims=: tokens=1,2" %%a in ('echo/!certificado!') do (echo/%%a>_temp.$$$&set "isIpt=%%b")
if "!isIpt!" neq "iProtect" (
call:mostraErro "Este arquivo nao foi criptografado pelo iProtect"
endlocal
goto telaInicial
)
set /p savedPass=<_temp.$$$
del _temp.$$$
if "!savedPass!" equ "!SenhaCript!" (
for /f %%a in ("!file!") do (set "localFile=%%~dpa")
for /f %%a in ("!file!") do (set "fileName=%%~nxa")
for /f "skip=1" %%a in ('type !file!') do (echo/%%a>>"!localFile!_0!fileName!")
certutil -decode "!localFile!_0!fileName!" "!localFile!_!fileName!" 1>nul 2>nul
certutil -decode "!localFile!_!fileName!" "!localFile!_1!fileName!" 1>nul 2>nul
attrib -r "!file!" 2>nul
copy /y "!localFile!_1!fileName!" "!file!" 1>nul 2>nul
del "!localFile!_0!fileName!" & del "!localFile!_!fileName!" & del "!localFile!_1!fileName!"
call:mostraSucesso "Arquivo descriptografado com sucesso"
endlocal
goto telaInicial
) else (
call:mostraErro "Senha incorreta"
endlocal
goto telaInicial
)
) else (
call:mostraErro "Digite uma senha"
endlocal
goto telaInicial
)
) else (
call:mostraErro "Arquivo inexistente"
endlocal
goto telaInicial
)
::==============================================CONFIGURAR CONTA========================================
::======================================================================================================
:configurarConta
cls
call:menu "Alterar senha" "Excluir conta" "Voltar"
if not defined choice call:mostraErro "Op‡Æo inv lida!"&goto configurarConta
if "!choice!" == "1" (
goto alterarSenha
)
if "!choice!" == "2" (
goto excluirConta
)
if "!choice!" == "3" (
endlocal
goto telaInicial
)
::===================================================ALTERAR SENHA======================================
:alterarSenha
echo/&call:mostrarComCor "Sua senha antigaÿ" "0c"
call:criptografarSenha
if "!SenhaCript!" neq "" (
call:ler HKCU\Software\HNDSofts\iProtect\4\Users\!usuario! senha
if "!SenhaCript!" equ "!result!" (
:digitaNovaSenha
echo/&call:mostrarComCor "Nova senhaÿÿÿÿÿÿ" "0a"
call:criptografarSenha
if "!SenhaCript!" neq "" (set "novaSenha=!SenhaCript!") else (goto digitaNovaSenha)
echo/&call:mostrarComCor "Confirmar senhaÿ" "0a"
call:criptografarSenha
if "!SenhaCript!" neq "!novaSenha!" (
echo/&call:mostraErro "Senhas nao combinam"
goto digitaNovaSenha)
call:gravar HKCU\Software\HNDSofts\iProtect\4\Users\!usuario! string senha "!novaSenha!"
echo/&call:mostraSucesso "Senha alterada com sucesso"
endlocal
goto configurarConta
) else (
echo/&call:mostraErro "Senha incorreta"
endlocal
goto configurarConta
)
)
::===================================================EXCLUIR CONTA======================================
:excluirConta
echo/&call:mostrarComCor "Sua senhaÿ" "0c"
call:criptografarSenha
if "!SenhaCript!" neq "" (
call:ler HKCU\Software\HNDSofts\iProtect\4\Users\!usuario! senha
if "!SenhaCript!" equ "!result!" (
call:beep 4
call:mostrarComCor "Aten‡aoÿ" "e0"
call:mostrarComCor "Se excluir sua conta, todos arquivos que voce protege serao desprotegidos" "cF"
echo/&set /p "killME=Continuar [S/N] "
if /i "!killME!" equ "S" (
call:ler Software\HNDSofts\iProtect\4\System files "multi:hkcu"
if exist "multLine.txt" (
for /F %%a in (multLine.txt) do (
echo/%%a>_decode0.txt
certutil -decode _decode0.txt _decode1.txt 1>nul 2>nul
certutil -decode _decode1.txt _decode2.txt 1>nul 2>nul
Set /p _decode2=<_decode2.txt
del _decode0.txt & del _decode1.txt & del _decode2.txt
for /F "delims=* tokens=1,2" %%c in ('echo/!_decode2!') do (
set "currentFile=%%c"
set "isMine=0"
if "!usuario!" equ "%%d" (
set "isMine=1"
)
)
if "!isMine!" equ "1" (echo/!currentFile!>>Mine.txt) else (echo/%%a>>notMine.txt)
)
reg delete HKCU\Software\HNDSofts\iProtect\4\System /v files /f 1>nul 2>nul
del multLine.txt
)
if exist notMine.txt (
set merge=
for /F %%Z in (notMine.txt) do (
set "merge=!merge!$%%Z
)
set "merge=!merge:~1!
call:gravar HKCU\Software\HNDSofts\iProtect\4\System multi files "!merge!" "/s $"
del notMine.txt 2>nul
)
if exist Mine.txt (
for /F %%Z in ('type Mine.txt') do (
cacls "%%Z" /e /c /p Todos:F 1>nul 2>nul||cacls "%%Z" /e /c /p Everyone:F 1>nul 2>nul
)
del Mine.txt 2>nul
)
reg delete HKCU\Software\HNDSofts\iProtect\4\Users\!usuario! /f 1>nul 2>nul
set "usuario=" & set "result="
call:mostraErro "Sua conta foi excluida"
endlocal
exit/b
)
) else (
echo/&call:mostraErro "Senha incorreta"
endlocal
goto configurarConta
)
) else (
echo/&call:mostraErro "Digite a senha"
endlocal
goto configurarConta
)
::=====================================================FUNÇÕES==========================================
::=====================================================FUNÇÕES==========================================
::=====================================================FUNÇÕES==========================================
:welcome
call:mostrarComCor "===================================================================" "08"&echo/
call:mostrarComCor "====================" "02"&call:mostrarComCor "iProtect 4.0" "30"
call:mostrarComCor " MS-DOS is back!" "3f"&call:mostrarComCor "====================" "02"&echo/
call:mostrarComCor "===================================================================" "04"&echo/
exit/b
:menu
title iProtect - %date% %time:~0,5%
set /a menuCount=0
set choice=
for %%m in (%*) do (
set /a cor=!random! * 8/32768 + 2
set /a menuCount+=1
call:mostrarComCor "!menuCount! - %%~m" "0!cor!"&echo/)
echo/&set /p "choice=> "
if "%choice%" == "" goto:eof
if %choice% GTR %menuCount% set choice=
if !choice! LEQ 0 set choice=
set tem=false
for /l %%c in (1,1,%menuCount%) do (
if !menuCount! EQU %%c set tem=true
)
if %tem% NEQ true set choice=
exit/b
:mostrarComCor [txt][cor]
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
call :ColorText %~2 "%~1"
exit/b
:ColorText
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
exit/b
:mostraErro
call:mostrarcomcor "%~1" "cF"
call:beep 3
timeout 3 1>nul
exit/b
:mostraSucesso
call:beep 2
call:mostrarcomcor "%~1" "a0"
timeout 3 1>nul
exit/b
:beep [vezes]
for /l %%i in (1,1,%~1) do (echo/)
:GRAVAR [root tipo nome valor [opcoes adicionais]]
if /i "%~2" == "string" set tipo=REG_SZ
if /i "%~2" == "integer" set tipo=REG_DWORD
if /i "%~2" == "multi" set tipo=REG_MULTI_SZ
reg add "%~1" /v %~3 /d "%~4" /t %tipo% %~5 /f 1>nul 2>nul
exit/b
:LER [root nome [opcoes adicionais]]
echo/%~3|find /i "multi" 1>nul 2>nul && goto LERMULTI
for /F "tokens=3" %%a in ('reg query "%~1" /v %~2 %~3 2^>nul') do (
set result=%%a
)
exit/b
:LERMULTI
for /f "delims=: tokens=2" %%s in ('echo/%~3') do (set "rootKey=%%s")
if /i "%rootKey%" equ "hkcu" set CONST=H80000001
if /i "%rootKey%" equ "hklm" set CONST=H80000002
if /i "%rootKey%" equ "hkcr" set CONST=H80000000
(
echo/Const ROOTKEY = ^&%CONST%
echo/strComputer = "."
echo/Set oReg=GetObject^("winmgmts:{impersonationLevel=impersonate}!\\" ^& _
echo/ strComputer ^& "\root\default:StdRegProv"^)
echo/strKeyPath = "%~1"
echo/strValueName = "%~2"
echo/oReg.GetMultiStringValue ROOTKEY,strKeyPath, _
echo/ strValueName,arrValues
echo/For Each strValue In arrValues
echo/ Wscript.Echo strValue
echo/Next)>readMulti.vbs
for /f "tokens=*" %%a in ('cscript //nologo readMulti.vbs 2^>nul') do (echo/%%a>>multLine.txt)
del readMulti.vbs
exit/b
:SenhaOculta
set "str="
:Escrevendo
set "key="
for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
if not defined key set "key=%%L"
)
setlocal EnableDelayedExpansion
set "key=!key:~-1!"
if "%key%" == "" (goto passwordInputComplete)
call:mostrarComCor "-" "0c"
set "str=!str!!key!"
goto :Escrevendo
:passwordInputComplete
echo/%str%>pwd.txt
exit/b
:trimPass
set "pwd=%~1"
echo/%pwd%>pwd.txt
exit/b
:criptografarSenha
call:senhaOculta
if not exist "%~dp0pwd.txt" (
exit/b
)
certutil -encode pwd.txt encodePwd.txt 1>nul 2>nul
for /f "skip=2" %%a in ('find /v /i "certifi" encodePwd.txt') do (echo/%%a>encodePwd.txt)
certutil -encode encodePwd.txt ReEncodedPwd.txt 1>nul 2>nul
for /f "skip=2" %%a in ('find /v /i "certifi" ReEncodedPwd.txt') do (set "senhaCript=%%a")
del pwd.txt& del encodePwd.txt& del ReEncodedPwd.txt
exit/b
:criptografarChave
set keyEncode=
echo/%~1>toEncode.txt
certutil -encode toEncode.txt encoded.txt 1>nul 2>nul
set firstEnc=
for /f "skip=2" %%a in ('find /v "-" "encoded.txt"') do (
set "firstEnc=!firstEnc!%%a"
)
echo/%firstEnc%>encoded.txt
certutil -encode encoded.txt encoded2.txt 1>nul 2>nul
for /f "skip=2" %%a in ('find /v "-" "encoded2.txt"') do (set "keyEncode=!keyEncode!%%a")
del toEncode.txt & del encoded.txt & del encoded2.txt
exit/b
:PROGRESSBAR [total progresso]
set /a full = %~1
for /l %%m in (1,1,%~1) do (
set "fullBar=!fullBar!_"
set "tags=!tags!#"
)
set number=%~2
set /a number = number /2
set /a pct=full-number
echo/echo/[%%tags:~0,%number%%%%%fullBar:~0,%pct%%%] !progress!%%%%%>_temp.bat
cls&call _temp.bat
del _temp.bat
exit/b