标题: [ 新手习题 8 ] 批处理密码破译 [打印本页]
作者: wxcute 时间: 2008-11-19 12:04 标题: [ 新手习题 8 ] 批处理密码破译
- @echo off
- setlocal enableDelayedExpansion
- set x=%systemroot:~-7%
- for /l %%i in (0 1 6) do (
- if /i "!x:~%%i,1!"=="D" set d=%%i
- if /i "!x:~%%i,1!"=="S" set s=%%i
- if /i "!x:~%%i,1!"=="N" set n=%%i
- set "!d!=!d!!n!!s!" 2>nul
- )
- set/p pwd=请输入密码:
- if "!%d:~,1%!"=="!pwd!" (
- echo 这里是 BATHOME 最高机密处——欢迎进入!
- ) else (echo 非法输入,举起手来 ^^_^^)
- pause>nul
复制代码
出题目的:学会看代码,分析代码。
别看代码很牛的样子,其实找出密码很简单。
(另:2K 与 XP 系统会不一样。)
方法不限。答对加分鼓励,说明怎么找出的。
作者: lhjoanna 时间: 2008-11-19 13:59
呵,我的xp,密码是326
我是一步步推的,可以直接echo !%d:~,1%!,呵,钻个空子!
我推的过程:执行完for后,d的值为3,此处set "!d!=!d!!n!!s!" 2>nul,不是set "d=!d!!n!!s!" 2>nul。所以%d:~,1%为3,而密码为!%d:~,1%!,所以密码为!3!。而执行完for之后!3!即为326,所以密码为326.有点绕,呵~~~
[ 本帖最后由 lhjoanna 于 2008-11-19 14:30 编辑 ]
作者: stalker 时间: 2008-11-19 17:06
- @echo off
- 关闭命令回显
- setlocal enableDelayedExpansion
- 启动变量延迟
- set x=%systemroot:~-7%
- 设置x为%systemroot%(我的系统下为C:\WINDOWS)的后七个字母
- 即x=WINDOWS
- for /l %%i in (0 1 6) do (
- 变量%%i从0每次累加1循环到6执行以下判断
- if /i "!x:~%%i,1!"=="D" set d=%%i
- 如果偏移%%i处为D,则设置变量d为%%i,在本机d=3
- if /i "!x:~%%i,1!"=="S" set s=%%i
- 如果偏移%%i处为S,则设置变量s为%%i,在本机s=6
- if /i "!x:~%%i,1!"=="N" set n=%%i
- 如果偏移%%i处为N,则设置变量n为%%i,在本机n=2
- set "!d!=!d!!n!!s!" 2>nul
- 设置变量!d!(即3为dns,在本机即为326,这里很迷惑人!d!不是d而是3)
- )
- set/p pwd=请输入密码:
- 等待用户输入密码
- if "!%d:~,1%!"=="!pwd!" (
-
- %d:~,1%截取偏移0开始的1位字符,%d%=3,因此%d:~,1%=3
- !%d:~,1%!=!3!=326,这就是最终的密码拉(^_^)
-
- echo 这里是 BATHOME 最高机密处——欢迎进入!
- ) else (echo 非法输入,举起手来 ^^_^^)
- pause>nul
复制代码
[ 本帖最后由 stalker 于 2008-11-19 17:11 编辑 ]
作者: cailinfeng 时间: 2008-11-19 19:15
呵呵…………我是这样的
set/p pwd=请输入密码:
if "!%d:~,1%!"=="!pwd!" (
echo 这里是 BATHOME 最高机密处——欢迎进入!
) else (
echo 非法输入,举起手来 ^^_^^
echo !%d%!)
pause>nul
哈哈…… 真难猜啊,326算出来了,就是被这个搞晕了 "!%d:~,1%!" 嘻嘻
作者: 辉少 时间: 2008-11-21 12:38
326
一开始没留意题目
直接从1开始算了
呵呵
想不留心点都不行呀
作者: pusofalse 时间: 2008-11-22 16:42
在wxcute兄的引导下,新手肯定会进步更加快速了。
PS: 我是直接echo !%d:~,1%!知道的~
作者: firewolf85 时间: 2009-1-12 17:49
326- @echo off
- setlocal enableDelayedExpansion
- set x=%systemroot:~-7%
- for /l %%i in (0 1 6) do (
- if /i "!x:~%%i,1!"=="D" set d=%%i
- if /i "!x:~%%i,1!"=="S" set s=%%i
- if /i "!x:~%%i,1!"=="N" set n=%%i
- set "!d!=!d!!n!!s!" 2>nul
- )
-
- ECHO "!%d:~,1%!"
复制代码
偷懒了
作者: p05401144 时间: 2009-1-14 12:26
326
哈哈,很有意思
就是不知道set "!d!=!d!!n!!s!" 2>nul 为什么要弄个2>nul
作者: denev2004 时间: 2009-2-3 17:42
set x=%systemroot:~-7%
取最后7个,我这里的systemroot是c:\windows
于是是windows
if /i "!x:~%%i,1!"=="D" set d=%%i
if /i "!x:~%%i,1!"=="S" set s=%%i
if /i "!x:~%%i,1!"=="N" set n=%%i
在1的时候没有
在2的时候有n
在3的时候有d
在4的时候没有
在5的时候没有
在6的时候有s
set "!d!=!d!!n!!s!"
这样变量3就是326
if "!%d:~,1%!"=="!pwd!"
326得到3,变量3是326
作者: a5417871 时间: 2009-3-31 02:05
看不懂怎么办?有没有简单一点的!5555555偶菜鸟刚学
作者: Batcher 时间: 2009-3-31 02:20 标题: 回复 10楼 的帖子
先看教程吧,别着急做题。
作者: cainiao736 时间: 2009-4-1 20:57
密码是326
执行完set x=%systemroot:~-7%这句之后x的值是Windows,再根据三个if语句分别得出d、n、s的值,三位合起来就是密码。
不过不明白set "!d!=!d!!n!!s!" 2>nul这句的意思,是不是因为它的作用造成了在for循环之后不能用echo输出d的值?
看完三楼和六楼的回复,但是对set "!d!=!d!!n!!s!" 2>nul这句还是很迷惑,难道它的作用是把d的后两位隐藏?希望版主帮帮忙,解释下,谢谢了!
[ 本帖最后由 cainiao736 于 2009-4-1 21:05 编辑 ]
作者: qianfeng 时间: 2009-6-18 10:31
set "!d!=!d!!n!!s!" 2>nul这句我也没看懂,希望高手解释一下
作者: wxcute 时间: 2009-7-4 18:56 标题: 回复 12楼:cainiao736 ,13楼:qianfeng 的帖子
set "d=!a!!n!!s!"
是将后面的几个变量的值赋给字母 d 这个变量。如:
a=1,n=2,s=3
则d=!a!!n!!s!=123
===================
set d=2 这时d=2
set d=!d!8 这时d=28,即原先设置的 d 值与后面的 8 合在一起得到的值。
===================
合起来,若原先d=num,n=5,s=6
set "!d!=!d!!n!!s!" 执行后,num=num56,
原因是前面一个!d!=num,后面也等于num,!n!等于5,最后!s!=6
这样就得到num=num56。
作者: poxi 时间: 2010-7-19 22:50
答:
观察可知:
- @echo off
- setlocal enableDelayedExpansion
- set x=%systemroot:~-7%
- for /l %%i in (0 1 6) do (
- if /i "!x:~%%i,1!"=="D" set d=%%i
- if /i "!x:~%%i,1!"=="S" set s=%%i
- if /i "!x:~%%i,1!"=="N" set n=%%i
- set "!d!=!d!!n!!s!" 2>nul
- )
复制代码
这一段设置了d的值
而复制代码
是密码,那就写个p
- @echo off
- setlocal enableDelayedExpansion
- set x=%systemroot:~-7%
- for /l %%i in (0 1 6) do (
- if /i "!x:~%%i,1!"=="D" set d=%%i
- if /i "!x:~%%i,1!"=="S" set s=%%i
- if /i "!x:~%%i,1!"=="N" set n=%%i
- set "!d!=!d!!n!!s!" 2>nul
- )
- echo !%d:~,1%!
- pause
复制代码
ok,解决了...密码326
作者: broly 时间: 2010-7-22 13:39
这题呢。。。首先变量
set x=%systemroot:~-7% 截取变量%x%为windows
if /i "!x:~%%i,1!"=="D" set d=%%i
if /i "!x:~%%i,1!"=="S" set s=%%i
if /i "!x:~%%i,1!"=="N" set n=%%i
set "!d!=!d!!n!!s!" 2>nul 这里由于当%%i为2,3,6时 ,变量d s n 才全部被定义 此时!d!才可以有意义。不难看出,%d%=3 %n%=2 %s%=6
此时set "!d!=!d!!n!!s!" 这句相当于 set "3=326" 所以变量%3%的值为326
if "!%d:~,1%!"=="!pwd!" 这句中%d:~,1%的值是3,所以!%d:~,1%!即为!3!,当输入密码326时,即可
密码326
作者: rogue_1983 时间: 2010-7-24 00:29 标题: 再做一个吧?
@echo off
echo 这里是国家国防部机密室
setlocal enableDelayedExpansion
set x=%username:~-13%
for /l %%i in (0 1 13) do (
if /i "!x:~%%i,1!"=="s" set s=%%i
if /i "!x:~%%i,1!"=="m" set m=%%i
if /i "!x:~%%i,1!"=="d" set d=%%i
set "!s!=!m!!d!!s!" 2>nul
)
:a
set/p pwd=请输入密码:
if "!%s:~,1%!"=="!pwd!" (
echo 这里是 BATHOME 最高机密处——欢迎进入!
) else (echo 非法输入,举起手来 ^^_^^)&pause&goto :a
pause>nul
作者: broly 时间: 2010-7-24 00:31 标题: 回复 17楼 的帖子
这个密码恐怕只有你自己知道。。。%username%。。。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |