中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [小游戏]大家来解密批处理加密密码
作者:
标题: [小游戏]大家来解密批处理加密密码 上一主题 | 下一主题
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
状态 离线
『第 2 楼』:  

没人看?

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
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: