找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 38686|回复: 17

[ 新手习题 8 ] 批处理密码破译

[复制链接]
发表于 2008-11-19 12:04:48 | 显示全部楼层 |阅读模式
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set x=%systemroot:~-7%
  4. for /l %%i in (0 1 6) do (
  5.  if /i "!x:~%%i,1!"=="D" set d=%%i
  6.  if /i "!x:~%%i,1!"=="S" set s=%%i
  7.  if /i "!x:~%%i,1!"=="N" set n=%%i
  8. set "!d!=!d!!n!!s!" 2>nul
  9. )
  10. set/p pwd=请输入密码:
  11. if "!%d:~,1%!"=="!pwd!" (
  12.  echo 这里是 BATHOME 最高机密处——欢迎进入!
  13. ) else (echo 非法输入,举起手来 ^^_^^)
  14. pause>nul
复制代码


出题目的:学会看代码,分析代码。
别看代码很牛的样子,其实找出密码很简单。
(另:2K 与 XP 系统会不一样。)

方法不限。答对加分鼓励,说明怎么找出的。

评分

参与人数 1PB +5 收起 理由
Batcher + 5 Good work!

查看全部评分

发表于 2008-11-19 13:59:29 | 显示全部楼层
呵,我的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 编辑 ]

评分

参与人数 1PB +10 收起 理由
wxcute + 10 对了,无所谓钻空子,其实这就是分析代码的 ...

查看全部评分

发表于 2008-11-19 17:06:19 | 显示全部楼层
  1. @echo off
  2. 关闭命令回显
  3. setlocal enableDelayedExpansion
  4. 启动变量延迟
  5. set x=%systemroot:~-7%
  6. 设置x为%systemroot%(我的系统下为C:\WINDOWS)的后七个字母
  7. 即x=WINDOWS
  8. for /l %%i in (0 1 6) do (
  9. 变量%%i从0每次累加1循环到6执行以下判断
  10.  if /i "!x:~%%i,1!"=="D" set d=%%i
  11. 如果偏移%%i处为D,则设置变量d为%%i,在本机d=3
  12.  if /i "!x:~%%i,1!"=="S" set s=%%i
  13. 如果偏移%%i处为S,则设置变量s为%%i,在本机s=6
  14.  if /i "!x:~%%i,1!"=="N" set n=%%i
  15. 如果偏移%%i处为N,则设置变量n为%%i,在本机n=2
  16. set "!d!=!d!!n!!s!" 2>nul
  17. 设置变量!d!(即3为dns,在本机即为326,这里很迷惑人!d!不是d而是3)
  18. )
  19. set/p pwd=请输入密码:
  20. 等待用户输入密码
  21. if "!%d:~,1%!"=="!pwd!" (

  22. %d:~,1%截取偏移0开始的1位字符,%d%=3,因此%d:~,1%=3
  23. !%d:~,1%!=!3!=326,这就是最终的密码拉(^_^)

  24.  echo 这里是 BATHOME 最高机密处——欢迎进入!
  25. ) else (echo 非法输入,举起手来 ^^_^^)
  26. pause>nul
复制代码

[ 本帖最后由 stalker 于 2008-11-19 17:11 编辑 ]

评分

参与人数 2PB +14 收起 理由
firewolf85 + 4 分析的很细致,谢谢
wxcute + 10 I 服了 U,太牛了。

查看全部评分

发表于 2008-11-19 19:15:58 | 显示全部楼层
呵呵…………我是这样的

set/p pwd=请输入密码:
if "!%d:~,1%!"=="!pwd!" (
 echo 这里是 BATHOME 最高机密处——欢迎进入!
  ) else (
    echo 非法输入,举起手来 ^^_^^
    echo !%d%!)
    pause>nul

哈哈…… 真难猜啊,326算出来了,就是被这个搞晕了 "!%d:~,1%!" 嘻嘻

评分

参与人数 1PB +5 收起 理由
wxcute + 5 鼓励一下

查看全部评分

发表于 2008-11-21 12:38:12 | 显示全部楼层
326

一开始没留意题目
直接从1开始算了
呵呵
想不留心点都不行呀

评分

参与人数 1PB +3 收起 理由
wxcute + 3 鼓励一个

查看全部评分

发表于 2008-11-22 16:42:17 | 显示全部楼层
在wxcute兄的引导下,新手肯定会进步更加快速了。
PS: 我是直接echo !%d:~,1%!知道的~
发表于 2009-1-12 17:49:44 | 显示全部楼层
326
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set x=%systemroot:~-7%
  4. for /l %%i in (0 1 6) do (
  5.  if /i "!x:~%%i,1!"=="D" set d=%%i
  6.  if /i "!x:~%%i,1!"=="S" set s=%%i
  7.  if /i "!x:~%%i,1!"=="N" set n=%%i
  8. set "!d!=!d!!n!!s!" 2>nul
  9. )

  10. ECHO "!%d:~,1%!"
复制代码
偷懒了

评分

参与人数 1PB +2 收起 理由
wxcute + 2 鼓励下

查看全部评分

发表于 2009-1-14 12:26:30 | 显示全部楼层
326
哈哈,很有意思
就是不知道set "!d!=!d!!n!!s!" 2>nul 为什么要弄个2>nul

评分

参与人数 1PB +2 收起 理由
wxcute + 2 鼓励下。防止错误信息。

查看全部评分

发表于 2009-2-3 17:42:26 | 显示全部楼层
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

评分

参与人数 1PB +3 收起 理由
wxcute + 3 新年快乐

查看全部评分

发表于 2009-3-31 02:05:33 | 显示全部楼层
看不懂怎么办?有没有简单一点的!5555555偶菜鸟刚学
发表于 2009-3-31 02:20:19 | 显示全部楼层

回复 10楼 的帖子

先看教程吧,别着急做题。
发表于 2009-4-1 20:57:54 | 显示全部楼层
密码是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 编辑 ]
发表于 2009-6-18 10:31:56 | 显示全部楼层
set "!d!=!d!!n!!s!" 2>nul这句我也没看懂,希望高手解释一下
 楼主| 发表于 2009-7-4 18:56:58 | 显示全部楼层

回复 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。
发表于 2010-7-19 22:50:03 | 显示全部楼层
答:
观察可知:
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set x=%systemroot:~-7%
  4. for /l %%i in (0 1 6) do (
  5.  if /i "!x:~%%i,1!"=="D" set d=%%i
  6.  if /i "!x:~%%i,1!"=="S" set s=%%i
  7.  if /i "!x:~%%i,1!"=="N" set n=%%i
  8. set "!d!=!d!!n!!s!" 2>nul
  9. )
复制代码

这一段设置了d的值
  1. !%d:~,1%!
复制代码
是密码,那就写个p
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set x=%systemroot:~-7%
  4. for /l %%i in (0 1 6) do (
  5.  if /i "!x:~%%i,1!"=="D" set d=%%i
  6.  if /i "!x:~%%i,1!"=="S" set s=%%i
  7.  if /i "!x:~%%i,1!"=="N" set n=%%i
  8. set "!d!=!d!!n!!s!" 2>nul
  9. )
  10. echo !%d:~,1%!
  11. pause
复制代码


ok,解决了...密码326
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:46 , Processed in 0.046883 second(s), 19 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表