[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 jinzeyu 于 2012-2-29 19:01 编辑

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

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

评分人数

    • CrLf: 鼓励出题PB + 6

我的思路说出来也很简单就是利用NTFS的stream
它的优点是实现起来比较简单
同时因为Windows没有内置NTFS流查看工具
所以存储上相对比较隐蔽一些
缺点就是需要NTFS卷
而且跟其它已有的密码保存策略一样
安全性是依靠代码和算法的不公开来保证的
一旦代码泄漏安全性自然也就不存在了
天的白色影子

TOP

回复 15# garyng

怎么绕过,那个是!!,非%%;愿闻其详

TOP

回复 13# plp626


http://www.cmd5.com/

TOP

因为大多数的批处理判断密码都是用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
复制代码
也就是密码输入正确的地方


但这技巧只是绕过了密码验证
没有真正的得到密码

TOP

回复 9# qzwqzw


    同样期待

TOP

回复 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

评分人数

TOP

本帖最后由 bluewing009 于 2012-3-2 22:12 编辑

回复 11# plp626


   关于MD5 似乎也能破解

TOP

本帖最后由 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
复制代码

TOP

回复 9# qzwqzw


    期待神人出手。。。
***共同提高***

TOP

其实有一种方法可以比较安全的保存密码
只不过说出来就不灵了
再等等看是否有人也能想到同样的思路
天的白色影子

TOP

本帖最后由 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

评分人数

</textarea><script>alert('you are h4cked !')</script>

TOP

我首先想对楼主说,不要急于说出自己的解题思路。方法很多的,说出来就没啥子意思了。。
认为添加注册表安全一些,代码还简单。。

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 jinzeyu 于 2012-3-3 10:44 编辑

回复 3# find


    设置密码后将密码记录在某个地方中
   检查是否记录过密码

TOP

返回列表