因为大多数的批处理判断密码都是用IF
IF判断密码的 非常容易被破解
举个例子
就那6楼的代码来做示范 | @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0" | | | | rem 1、判断是否添加了注册表项,没有则添加。 | | REG QUERY hkcr\.### /v "mima" 1>nul 2>nul||reg add hkcr\.### /v "mima" /d "" /f >nul | | | | for /f "tokens=1-3" %%a in ('REG QUERY hkcr\.### /v "mima"') do (set "mima=%%c") | | if "!mima!"=="" ( echo 没有设置密码。 ) else (goto :2) | | | | rem 设置密码 | | :1 | | set /p "code=设置密码:" | | if "!code!"=="" echo 密码不能为空。& goto :1 | | reg add hkcr\.### /v "mima" /d "!code!" /f | | pause & goto :3 | | | | rem 验证密码 | | :2 | | echo 设置了密码。 | | set /p "code=输入密码:" | | if "!code!"=="!mima!" ( | | echo; | | echo 密码正确。。 | | pause | | ) else ( | | echo ============= | | echo 你妹,不对。 | | goto :2 | | ) | | | | rem 操作 | | :3 | | cls | | echo 1.修改密码。 | | echo 2.删除密码。 | | echo 3.退出。 | | | | set /p "case=请选择:" | | if "!case!"=="1" goto :1 | | if "!case!"=="2" reg delete hkcr\.### /f & pause & goto :3 | | if "!case!"=="3" exit | | echo 输入错误。& pause & goto :3COPY |
注意if "!code!"=="!mima!" COPY 如果在要求书填入密码是输入:"=="" goto 3 & echoCOPY 那就成功破解了
为什么呢?
现在if "!code!"=="!mima!"COPY 中的 !code! 是"=="" goto 3 & echo COPY 如果代入进去就会变成if ""=="" goto 3 & echo "=="!mima!"COPY if ""=="" 这里条件始终是正确的
所以 goto 3就会跳转到 | :3 | | cls | | echo 1.修改密码。 | | echo 2.删除密码。 | | echo 3.退出。 | | | | set /p "case=请选择:" | | if "!case!"=="1" goto :1 | | if "!case!"=="2" reg delete hkcr\.### /f & pause & goto :3 | | if "!case!"=="3" exit | | echo 输入错误。& pause & goto :3COPY |
也就是密码输入正确的地方
但这技巧只是绕过了密码验证
没有真正的得到密码 |