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

【出题】批处理设置密码以及修改密码

[复制链接]
发表于 2012-2-29 11:46:11 | 显示全部楼层 |阅读模式
本帖最后由 jinzeyu 于 2012-2-29 19:01 编辑

目的:掌握改写文本技巧
加分:技术+1
题目:运行批处理后检查是否设置密码
         检查方法:
                 设置密码后将密码记录在批处理或其他地方中
                 检查是否记录过密码
         若没有设置密码
         则提示用户设置密码
         若已设置密码
         就让用户输入密码
         进入后还可以修改密码
要求:代码最好简洁高效通用,具有可读性,最好是无临时文件(本题的重点)。

有兴趣的可以尝试注册并记录多个用户以及密码

评分

参与人数 1PB +6 收起 理由
CrLf + 6 鼓励出题

查看全部评分

发表于 2012-2-29 11:52:47 | 显示全部楼层
如何验证是否设置了密码?难道是验证有没有set  /p xxx=命令?
发表于 2012-2-29 11:53:47 | 显示全部楼层
检查当前系统用户是否有密码么?
还是检查其它什么东东?
 楼主| 发表于 2012-2-29 11:54:38 | 显示全部楼层
本帖最后由 jinzeyu 于 2012-3-3 10:43 编辑

回复 2# batman


    额 不是 是查看用户以前是否设置过密码
   设置后将密码把存在某个地方
   检查是否存过密码
 楼主| 发表于 2012-2-29 11:56:55 | 显示全部楼层
本帖最后由 jinzeyu 于 2012-3-3 10:44 编辑

回复 3# find


    设置密码后将密码记录在某个地方中
   检查是否记录过密码
发表于 2012-2-29 17:18:54 | 显示全部楼层
本帖最后由 QIAOXINGXING 于 2012-2-29 17:52 编辑

跟练习 30 很像:http://www.bathome.net/viewthrea ... p;extra=&page=1
  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"

  2. rem 1、判断是否添加了注册表项,没有则添加。   
  3. REG QUERY hkcr\.### /v "mima" 1>nul 2>nul||reg add hkcr\.### /v "mima" /d "" /f >nul
  4. rem 2、查询注册表项,获取密码。
  5. for /f "tokens=1-3" %%a in ('REG QUERY  hkcr\.### /v "mima"') do (set "mima=%%c")
  6. if "!mima!"=="" ( echo 没有设置密码。 ) else (goto :2)

  7. rem 设置密码
  8. :1
  9. set /p "code=设置密码:"
  10. if "!code!"=="" echo 密码不能为空。& goto :1
  11. reg add hkcr\.### /v "mima" /d "!code!" /f
  12. pause & goto :3

  13. rem 验证密码
  14. :2
  15. echo 设置了密码。
  16. set /p "code=输入密码:"
  17. if "!code!"=="!mima!" (
  18.   echo;
  19.   echo 密码正确。。
  20.   pause
  21. ) else (
  22.   echo =============
  23.   echo 你妹,不对。
  24.   goto :2
  25. )

  26. rem 操作
  27. :3
  28. cls
  29. echo 1.修改密码。
  30. echo 2.删除密码。
  31. echo 3.退出。

  32. set /p "case=请选择:"
  33. if "!case!"=="1" goto :1
  34. if "!case!"=="2" reg delete  hkcr\.### /f & pause & goto :3
  35. if "!case!"=="3" exit
  36. echo 输入错误。& pause & goto :3
复制代码
好吧,我承认我写得很繁琐。。。。。。

评分

参与人数 1技术 +1 收起 理由
jinzeyu + 1 .

查看全部评分

发表于 2012-2-29 18:14:14 | 显示全部楼层
我首先想对楼主说,不要急于说出自己的解题思路。方法很多的,说出来就没啥子意思了。。
认为添加注册表安全一些,代码还简单。。
发表于 2012-2-29 19:31:27 | 显示全部楼层
本帖最后由 vsbat 于 2012-2-29 19:33 编辑

  1. @echo off
  2. for /f "tokens=3" %%i in ('find /C "Y#PASS" %0') do (set c=%%i)
  3. if %c% GTR 3 (goto :InputPsw) else (echo No Password available ! & goto :SetPsw)


  4. :InputPsw
  5. for /f %%i in ('findstr /E "Y#PASS" %0') do (set psw=%%i)
  6. set psw=%psw:~0,-6%
  7. set /p in=Please Input Password(case sensitive):
  8. if %psw%==%in%  (goto :Login) else (echo Wrong !!!& goto :Inputpsw)


  9. :Login
  10. echo.
  11. echo Login Success !
  12. set /p in=do you want to change your Password ?(Y or N)
  13. if %in%==Y  (goto :SetPsw) else (echo Now you are to leave... & pause & goto :Out)


  14. :SetPsw
  15. echo.
  16. set /p in=Please Input your New Password:
  17. echo .>>%0
  18. echo %in%Y#PASS>>%0
  19. echo Set Password OK !
  20. pause
  21. goto :Out


  22. :Out
  23. EXIT
  24. REM  ### ENSURE NEWLINE BELOW ###

复制代码

评分

参与人数 1技术 +1 收起 理由
jinzeyu + 1 .

查看全部评分

发表于 2012-2-29 21:45:48 | 显示全部楼层
其实有一种方法可以比较安全的保存密码
只不过说出来就不灵了
再等等看是否有人也能想到同样的思路
发表于 2012-2-29 21:58:56 | 显示全部楼层
回复 9# qzwqzw


    期待神人出手。。。
发表于 2012-3-2 16:31:36 | 显示全部楼层
本帖最后由 plp626 于 2012-3-2 16:44 编辑

如果把ascii2base64的那个索引表
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
字符替换替换,就不易破解出密码,但若懂原理,还是能逆推出来的;(base64是个可逆函数,批处理也容易实现)

理想状态下md5存储,但是批处理实现起来难度太大;

base64_d.cmd 见 http://www.bathome.net/thread-587-1-1.html (6楼)
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p input=输入密码?
  3. for /f "delims=" %%a in ('base64_d.cmd !input!')do set B64=%%a
  4. if "!B64!"=="cGxwNjI2" (
  5.     echo 密码正确
  6. )else (
  7.     echo 密码错误
  8. )
  9. pause
复制代码
发表于 2012-3-2 21:59:53 | 显示全部楼层
本帖最后由 bluewing009 于 2012-3-2 22:12 编辑

回复 11# plp626


   关于MD5 似乎也能破解
发表于 2012-3-2 23:11:27 | 显示全部楼层
回复 12# bluewing009
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p input=输入密码?
  3. for /l %%x in (1 1 5)do (
  4.         for /f "delims=" %%a in ('base64_d.cmd "!input!"')do set input=%%a
  5. )

  6. if "!input!"=="VjFSQ2EwNUhVWGRPV0VaVVZrVnJPUT09" (
  7.     echo 密码正确
  8. )else (
  9.     echo 密码错误
  10. )
  11. pause
复制代码
base64 5次,增加破解难度;
同样md5也同样可N次,这样有效防止目前一些常见字符串的md5明文建立的数据库来破解;

王小云的论问是说md5在理论上是不安全的;
但这仅仅是理论上证明有漏洞,从实践上破解还是很困难;

评分

参与人数 1技术 +1 收起 理由
jinzeyu + 1 .

查看全部评分

 楼主| 发表于 2012-3-4 11:32:32 | 显示全部楼层
回复 9# qzwqzw


    同样期待
发表于 2012-3-5 22:11:12 | 显示全部楼层
因为大多数的批处理判断密码都是用IF
IF判断密码的 非常容易被破解
举个例子
就那6楼的代码来做示范
  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"

  2. rem 1、判断是否添加了注册表项,没有则添加。   
  3. REG QUERY hkcr\.### /v "mima" 1>nul 2>nul||reg add hkcr\.### /v "mima" /d "" /f >nul
  4. rem 2、查询注册表项,获取密码。
  5. for /f "tokens=1-3" %%a in ('REG QUERY  hkcr\.### /v "mima"') do (set "mima=%%c")
  6. if "!mima!"=="" ( echo 没有设置密码。 ) else (goto :2)

  7. rem 设置密码
  8. :1
  9. set /p "code=设置密码:"
  10. if "!code!"=="" echo 密码不能为空。& goto :1
  11. reg add hkcr\.### /v "mima" /d "!code!" /f
  12. pause & goto :3

  13. rem 验证密码
  14. :2
  15. echo 设置了密码。
  16. set /p "code=输入密码:"
  17. if "!code!"=="!mima!" (
  18.   echo;
  19.   echo 密码正确。。
  20.   pause
  21. ) else (
  22.   echo =============
  23.   echo 你妹,不对。
  24.   goto :2
  25. )

  26. rem 操作
  27. :3
  28. cls
  29. echo 1.修改密码。
  30. echo 2.删除密码。
  31. echo 3.退出。

  32. set /p "case=请选择:"
  33. if "!case!"=="1" goto :1
  34. if "!case!"=="2" reg delete  hkcr\.### /f & pause & goto :3
  35. if "!case!"=="3" exit
  36. echo 输入错误。& pause & goto :3
复制代码
注意
  1. if "!code!"=="!mima!"
复制代码
如果在要求书填入密码是输入:
  1. "=="" goto 3 & echo
复制代码
那就成功破解了
为什么呢?
现在
  1. if "!code!"=="!mima!"
复制代码
中的 !code! 是
  1. "=="" goto 3 & echo
复制代码
如果代入进去就会变成
  1. if ""=="" goto 3 & echo "=="!mima!"
复制代码
if ""=="" 这里条件始终是正确的
所以 goto 3就会跳转到
  1. :3
  2. cls
  3. echo 1.修改密码。
  4. echo 2.删除密码。
  5. echo 3.退出。

  6. set /p "case=请选择:"
  7. if "!case!"=="1" goto :1
  8. if "!case!"=="2" reg delete  hkcr\.### /f & pause & goto :3
  9. if "!case!"=="3" exit
  10. echo 输入错误。& pause & goto :3
复制代码
也就是密码输入正确的地方


但这技巧只是绕过了密码验证
没有真正的得到密码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:08 , Processed in 0.024998 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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