|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『楼 主』:
[小游戏]大家来解密批处理加密密码
参考资料
[url= http://www.cn-dos.net/forum/viewthread.php?tid=19819&fpage=1&highlight=%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%95%BF%E5%BA%A6][讨论][NT]计算字符串长度批处理代码查错[/url]
呵呵,看谁能算出来密码
最后一行就是密码,你可以删除这一行后执行就能建立自已的密码了
@ECHO OFF
:TOP
SETLOCAL ENABLEDELAYEDEXPANSION
SET A_X=9
SET B_Y=9
SET C_Z=9
SET BOOT=1
SET BASE=%RANDOM%
CALL :CRY
IF NOT "%CRY%" == "" SET BOOT=0&&CALL :IN
SET DIC=abcdefghijklmnopqrstuvwxyz0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ
CALL :LOS %DIC%
SET DL=%LOS%&&SET /A IDE=%LOS%%%9
IF %LOS% GTR 120 CLS&&ECHO 字典超长....&&GOTO END
IF NOT "%IDE%" == "0" ECHO 字典设置错误&&GOTO END
:inp
IF "%BOOT%" == "1" (
SET MSG0=开始创建新密码...&&SET MSG=请输入新密码&&SET MSG9=密码创建中.
) ELSE SET MSG0=本文档存在密码保护...&&SET MSG=请输入&&SET MSG9=密码验证中.
ECHO.
ECHO 密码字典为(密码长度不能超过40位,字典长度不超过120位):&&ECHO %DIC%
ECHO 对大小字敏感,不能设置除字典外的字符或空格&&ECHO.
ECHO %MSG0%
:inp1
SET /P PWS="%MSG% PWS:>"
ECHO %PWS%|findstr /r "[^%DIC%]">nul&&GOTO INP
IF "%BOOT%" == "1" (
SET /P FWS="再输入一次 PWS:>"
IF NOT "%PWS%" == "!FWS!" (
SET MSG=两次输入不同 请输入新密码
GOTO INP1)
)
SET/P=%MSG9%<nul
CALL :LOS %PWS%
SET PL=%LOS%&&IF %LOS% GTR 40 ECHO 密码长度不能越过40&&pause&&CLS&&GOTO TOP
SET NPL=%PL%
:calc
IF %NPL% GEQ %DL% SET /A NPL=%NPL%-%DL%&&GOTO CAL
SET /A HPL=%DL%-%NPL%
CALL :CONVERSE 0 %NPL% %NPL% %HPL%
CALL :CONVERSE -%NPL% %NPL% 0 -%NPL%
SET /A HDL=(%DL%-%DL%%%2)/2
SET ADL=!NDIC:~0,%HDL%!&&SET BDL=!NDIC:~%HDL%!&&SET NDIC=
FOR /L %%i IN (0,1,%HDL%) DO SET NDIC=!NDIC!!BDL:~%%i,1!!ADL:~%%i,1!
FOR /L %%z IN (0,1,%C_Z%) DO (
FOR /L %%y IN (0,1,%B_Y%) DO (
FOR /L %%x IN (0,1,%A_X%) DO (
SET /a WD=1%%x%%y%%z%%%DL%
CALL :TEXT !WD!
SET _d_%%x%%y%%z=!TEXT!)
)
SET/P=.<nul)
::set _d_>1.txt&&goto chk
:create
FOR /L %%i IN (0,1,%NNPL%) DO (
FOR /F "tokens=2,3 delims=_=" %%a IN ('SET _d_^|find "=!PWS:~%%i,1!"') DO (
SET /A FF=!FF!+1
SET S!FF!=%%a
)
SET /A CF=%BASE%%%!FF!+1
CALL :OUT !CF!
SET/P=.<nul)
SET NCRY=%BASE%-%JG%
IF "%BOOT%" == "1" (
ECHO.>>"%~dpnx0"&&ECHO SET CRY=%NCRY%>>"%~dpnx0"
ECHO 密码设置成功
GOTO END
) ELSE IF "%NCRY%" == "%BASE%-%CRY%" (
ECHO 验证成功&&GOTO NEXT
) ELSE (
ECHO 密码错误&&pause&&GOTO ENDSET)
GOTO END
:los
SET STR=%1
FOR /L %%i IN (0,1,128) DO if "!STR:~%%i,1!" == "" SET LOS=%%i&&GOTO :EOF
GOTO :EOF
:text
SET TEXT=!NDIC:~%1,1!
GOTO :EOF
:converse
SET /A NNPL=%NPL%-1
SET _tmp2=
SET _tmp1=!DIC:~%1,%2!
FOR /L %%i IN (%NNPL%,-1,0) DO SET _tmp2=!_tmp2!!_tmp1:~%%i,1!
SET NDIC=%_tmp2%!DIC:~%3,%4!
GOTO :EOF
:out
SET JG=!JG!!S%1!&&SET FF=
GOTO :EOF
:in
FOR /F "tokens=1,2 delims=-" %%i IN ("%CRY%") DO SET BASE=%%i&&SET CRY=%%j
CALL :LOS %CRY%
SET HCRY=%LOS%&&SET /A CHK=%LOS%%%3
IF NOT "%CHK%" == "0" ECHO 密文被破坏!&&GOTO END
GOTO :EOF
:endset
ENDLOCAL&cls
GOTO TOP
:next
ECHO OK..
GOTO END
:chk
::check label:calc matrix
for /l %%j in (0,1,62) do (
set /a sh=0
for /f "tokens=2 delims==" %%i in (1.txt) do (
if "!DIC:~%%j,1!" == "%%i" set /a sh=!sh!+1)
echo !DIC:~%%j,1! !sh! >>sh.txt)
:end
rem copyright:12232-530502-12000-046006035061035000002030034
PAUSE>nul
EXIT
:cry
::SET /A NDL=%DL%-1
::FOR /L %%i IN (0,1,%NDL%) DO ECHO %PWS%|find "!NDIC:~%%i,1!">nul&&SET BIY=!BIY!!NDIC:~%%i,1!
SET CRY=7304-552511527557551535939937543939547 [ Last edited by everest79 on 2006-12-31 at 05:06 AM ]
此帖被 +17 点积分 点击查看详情 评分人:【 redtek 】 | 分数: +7 | 时间:2007-1-1 00:07 | 评分人:【 qzwqzw 】 | 分数: +8 | 时间:2007-1-2 01:38 | 评分人:【 0401 】 | 分数: +2 | 时间:2007-1-3 08:30 |
|
|
|
2006-12-31 18:05 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2006-12-31 23:56 |
|
|
tghksj
社区乞丐
此图片另存后死机
积分 -49
发帖 90
注册 2006-12-2
状态 离线
|
『第
3 楼』:
%RANDOM%
怎么可能被反算???
难道反向枚举?????
|
我的网络笔记本.[color=Red]非联系本人请勿访问![/color]http://w.vicp.net[img]http://zhenlove.com.cn/cndos/fileup/files/QM2.jpg[/img] |
|
2007-1-1 04:28 |
|
|
Michale
初级用户
积分 52
发帖 27
注册 2006-10-6 来自 ☆逍遥宫☆
状态 离线
|
『第
4 楼』:
试试看~~
|
爱! |
|
2007-1-1 05:04 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by tghksj at 2006-12-31 03:28 PM:
%RANDOM%
怎么可能被反算???
难道反向枚举????? |
|
当密码存在时,所赋的%random%被替换了仔细看下IN这一段
|
|
2007-1-1 23:13 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
6 楼』:
Quote: | Originally posted by Michale at 2006-12-31 04:04 PM:
试试看~~ |
|
加油呀,这个密码的确是可以通过很简单的方法就算出来的
因为计算时间问题,其中一段加密我给删掉了,要不然很耗时间
|
|
2007-1-1 23:16 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
7 楼』:
密码为
DOSlianmeng 这个加密最大的漏洞就是密码长度是计算的关键,只要枚举1-40的密码长度就可以得到加密矩阵,然后反查密文,每三位一段就可以获取密码了
|
|
2007-1-2 01:03 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
8 楼』:
理论价值很高,实用价值不高
批处理代码很容易被修改,所以不适于用作口令验证程序
倒是可以用于文本的加密,只是效率让人担心
而且此算法解密不需要密钥也降低了安全性
[ Last edited by qzwqzw on 2007-1-1 at 12:56 PM ]
|
|
2007-1-2 01:47 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
9 楼』:
Quote: | Originally posted by qzwqzw at 2007-1-1 12:47 PM:
理论价值很高,实用价值不高
批处理代码很容易被修改,所以不适于用作口令验证程序
倒是可以用于文本的加密,只是效率让人担心
而且此算 ... |
|
这几天一直在想这个加密如何能在不需较长时间下进行深层计算,贴出来也就是希望大家能有自已的看法
设想的应用对像就是加密批处理自身,其实也不能算真正的加密,因为不可能做到加密标准的一体三分,只不过多设一个坎,增加一点难度的同时再多点趣味性
|
|
2007-1-2 06:46 |
|
|
0401
中级用户
带走
积分 435
发帖 88
注册 2005-9-24
状态 离线
|
『第
10 楼』:
解密的P处理。直接拷贝楼主你的代码,拼凑而成。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET A_X=9
SET B_Y=9
SET C_Z=9
SET DIC=abcdefghijklmnopqrstuvwxyz0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ
set error= 密文格式错误。
CALL :LOS %DIC%
SET DL=%LOS%
cls
:TOP
set NCRY=
set/p NCRY=请输入密文:
if not defined NCRY goto :top
for /f "tokens=1,2 delims=-" %%i in ("%NCRY%") do set BASE=%%i&set JG=%%j
if not defined BASE echo %error% & goto :top
if not defined JG echo %error% & goto :top
call :los %JG%
set/a NPL=%LOS%/3
set/a MPL=%LOS%%%3
if not %MPL%==0 echo %error% & goto :top
SET /A HPL=%DL%-%NPL%
CALL :CONVERSE -%NPL% %NPL% 0 -%NPL%
SET /A HDL=(%DL%-%DL%%%2)/2
SET ADL=!NDIC:~0,%HDL%!&&SET BDL=!NDIC:~%HDL%!&&SET NDIC=
FOR /L %%i IN (0,1,%HDL%) DO SET NDIC=!NDIC!!BDL:~%%i,1!!ADL:~%%i,1!
FOR /L %%z IN (0,1,%C_Z%) DO (
FOR /L %%y IN (0,1,%B_Y%) DO (
FOR /L %%x IN (0,1,%A_X%) DO (
SET /a WD=1%%x%%y%%z%%%DL%
CALL :TEXT !WD!
SET _d_%%x%%y%%z=!TEXT!)
)
SET/P=.<nul)
set /a enpl=nnpl*3
echo.密码为:
for /l %%i in (0,3,!enpl!) do (
for /f "tokens=2 delims==" %%j in ('set _d_^|find "!JG:~%%i,3!"') do (
set/p=%%j<nul
)
)
echo. & pause>nul
EXIT/B
:converse
SET /A NNPL=%NPL%-1
SET _tmp2=
SET _tmp1=!DIC:~%1,%2!
FOR /L %%i IN (%NNPL%,-1,0) DO SET _tmp2=!_tmp2!!_tmp1:~%%i,1!
SET NDIC=%_tmp2%!DIC:~%3,%4!
GOTO :EOF
:text
SET TEXT=!NDIC:~%1,1!
GOTO :EOF
:los
SET STR=%1
FOR /L %%i IN (0,1,128) DO if "!STR:~%%i,1!" == "" SET LOS=%%i&&GOTO :EOF
GOTO :EOF [ Last edited by 0401 on 2007-1-3 at 08:27 AM ]
|
|
2007-1-3 08:24 |
|
|
0401
中级用户
带走
积分 435
发帖 88
注册 2005-9-24
状态 离线
|
『第
11 楼』:
Quote: | Originally posted by everest79 at 2007-1-1 23:16:
加油呀,这个密码的确是可以通过很简单的方法就算出来的
因为计算时间问题,其中一段加密我给删掉了,要不然很耗时间 |
|
楼主能将完整的贴一份吗?
|
|
2007-1-3 08:32 |
|
|