标题: [文本处理] 批处理密码破解 [打印本页]
作者: canyuexiaolang 时间: 2010-7-3 15:01 标题: 批处理密码破解
或许很多人会用- set /p pass=请输入密码:
- if "%pass%"=="12345" echo 密码正确!&pause&goto :test
复制代码
但是这样,密码会被破解的!
只要输入 1"=="1" echo
(echo后面有一个空格)
密码就出来了
测试代码与测试结果如下
测试代码- @echo off
- :start
- set /p pass=请输入密码:
- if "%pass%"=="12345" (
- goto test
- ) else (
- echo 密码错误
- pause>nul
- goto start
- )
- :test
- echo 密码正确!
- pause
复制代码
测试结果- 请输入密码:1"=="1" echo
- "=="12345" (
- 密码正确!
- 请按任意键继续. . .
复制代码
直接通过了,也有不通过的,但是密码早就已经暴露出来了
============================================================
解决方法:
把- if "%pass%"=="12345" (
- goto test
- ) else (
- echo 密码错误
- pause>nul
- goto start
- )
复制代码
中的"%pass%"改成- if \\"%pass%"\\==\\"12345"\\ (
- goto test
- ) else (
- echo 密码错误
- pause>nul
- goto start
- )
复制代码
这样就破解不出来了
作者: raymai97 时间: 2010-7-3 15:38
楼主太厉害了!这样都给你破解到!佩服佩服!!
作者: zqz0012005 时间: 2010-7-3 16:11
原来你们引用密码都不用!password!的形式啊?
set /p pass=请输入密码: " neq "bathome" (call type "%~f0" & pause) else call type "%~f0" & pause
作者: Seter 时间: 2010-7-3 16:27
LZ试试输入- 1"\\==\\"1"\\ echo
- echo后有一个空格
复制代码
提出自己观点前先了解批处理机制
作者: Spring 时间: 2010-7-3 16:41
http://cn-dos.net/forum/viewthread.php?tid=50178
作者: neorobin 时间: 2010-7-3 16:58
再出一盾:- @echo off & setlocal enableDelayedExpansion
- set "#12345=pwd" & rem 密码原文为 12345
- set /p pwdin=请输入密码:
- set "pwdin=!pwdin: =!"
- set "pwdin=!pwdin:a=z!"
- set "pwdin=!pwdin:e=x!"
- set "pwdin=!pwdin:i=c!"
- set "pwdin=!pwdin:o=v!"
- set "pwdin=!pwdin:u=b!"
- for %%p in (!pwdin!) do (
- if not defined #%%p exit
- if !#%%p!==pwd (echo 密码正确...)&pause
- )
- exit /b
复制代码
告知 代码使用了 set 和 for 的转换方式, 但 第 2 行, 4--11行具体代码不明, 再求输入方式破解
作者: sgaizxt001 时间: 2010-7-3 21:51 标题: 回复6楼
你的密码设置的太简单了,set /p到for之间完全是误导,没起作用啊。
作者: neorobin 时间: 2010-7-3 21:55 标题: 回复 7楼 的帖子
这只是举例而已, 而且这种做法也是不完善的, 比如产生额外的假密码也可过关
这只是一个想法, 用 3 楼输入
" neq "bathome" (call type "%~f0" & pause) else call type "%~f0" & pause
的方式是不会显示出代码原文的
[ 本帖最后由 neorobin 于 2010-7-3 21:59 编辑 ]
作者: sgaizxt001 时间: 2010-7-3 21:57
哦,原来如此,我对设置密码破解密码一点都不懂。
学习学习
作者: zqz0012005 时间: 2010-7-4 00:00 标题: 回复 6楼 的帖子
既然用了!password!的形式(使用变量延迟),为什么还要转换呢?想来个加密算法?有点舍近求远,对bat来说没什么意义。
作者: canyuexiaolang 时间: 2010-7-5 08:02 标题: 回复 4楼 的帖子
嘿、但是如果源码加密的情况下不就破解不出来了吗
============================================
本文章的基础是在源码得不到或者加密的情况下的,一开始忘了说
作者: canyuexiaolang 时间: 2010-7-5 08:36 标题: 回复 3楼 的帖子
对于新手们来说,您老的代码是否太难了点....
作者: shuaige100 时间: 2010-7-5 12:44 标题: 回复 1楼 的帖子
应该在set /p pass=请输入密码: 的上面加一行set pass=
这样IF就不会失效啦
作者: batman 时间: 2010-7-5 15:23 标题: 还是在cn-dos时写下的
反暴力破解(密码乱序+复制后不可用):- @rem dmndso-cmw
- @echo off
- rem 原始密码为wdmmcn-dos
- set /p pass=<%~nx0
- set pass=%pass:~5%
- call :Return %%pass%%
- for /f "tokens=1" %%i in (%~nx0) do if "%%i"=="::" goto Judges
- for /f "delims=" %%i in ('cd') do echo.:: %%i\%~nx0>>%~nx0
- :Judges
- for /f "tokens=1* delims= " %%i in (%~nx0) do set puth=%%j
- for /f "delims=" %%i in ('cd') do if "%%i\%~nx0"=="%puth%" goto pass
- echo 错误!不是原文件。&del /q 复件>nul 2>nul&ping /n 2 127.1>nul&goto :eof
- :pass
- set /a n+=1
- set /a m=4-%n%
- if %m% equ 0 cls&echo 对不起,因没正确输入密码,本程序将自动结束。&ping /n 3 127.1>nul&goto :eof
- cls&set /p pwd=请正确输入密码,你还有%m%次机会:
- if not "%pwd%"=="%password%" goto pass
- set password=&set a=&set b=&set n=0&set new=1
- cls&echo 密码正确,直接回车继续使用原密码,如要更改请输入新密码。
- set /p new=输入新密码:
- if "%new%"=="1" goto run
- call :change %%new%%
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('type %~nx0') do (
- set /a n+=1
- if !n! equ 1 (
- echo @rem %password%>%~nx0
- ) else (
- endlocal&echo %%i>>%~nx0
- )
- )
- :run
- cls&echo 程序开始运行...
- pause>nul&goto :eof
- :Return
- set a=%pass:~-1,1%
- if not "%pass:~1%"=="" (
- set b=%pass:~,1%
- ) else (
- set b=
- )
- set password=%password%%a%%b%&set pass=%pass:~1,-1%
- if defined pass goto Return
- goto :eof
- :change
- set a=%new:~,1%%a%&set b=%b%%new:~1,1%&set new=%new:~2%
- if defined new goto change
- set password=%b%%a%
复制代码
作者: canyuexiaolang 时间: 2010-7-5 16:53 标题: 回复 14楼 的帖子
嘿嘿、、
输入复制代码
(echo后有一个空格)
直接就- 密码正确,直接回车继续使用原密码,如要更改请输入新密码。
- 输入新密码:
复制代码
batman也会有漏洞嘛...
作者: zqz0012005 时间: 2010-7-5 21:44
无语。竟然还在用%的形式,再怎么加密都是白搭。。。
作者: caruko 时间: 2010-7-6 13:12
为什么一定要 IF 对比呢?
感觉,用findstr /x 就可以啊..
比如:- set/p =请输入密码:<nul&findstr /x /v "12345" >nul &&echo no ||echo pass
复制代码
因为不管输入什么,最后都要一个ctrl+z 结束,被限定在findstr命令中。
加 /V 是为了防止多行暴力破解。
不过又发现一个问题 =.=, 直接ctrl+z 不输密码也通过,晕
[ 本帖最后由 caruko 于 2010-7-6 13:31 编辑 ]
作者: caruko 时间: 2010-7-6 13:52
另外,楼主的那个\\的
如果set pass=1" neq "2
就会报错,提示 '\\"12345"\\' 不是内部或外部命令,也不是可运行的程序或批处理文件。
set pass=1" newq "2" echo.
[ 本帖最后由 caruko 于 2010-7-6 14:03 编辑 ]
作者: canyuexiaolang 时间: 2010-7-6 15:09
=============================================
解决方法:
1.密码错误直接清屏+跳转,不留暂停机会
2.标签尽量不要太常规化,如start,test不可以,标签尽量能代表意义,又有一定的破解难度
[ 本帖最后由 canyuexiaolang 于 2010-7-6 15:25 编辑 ]
作者: canyuexiaolang 时间: 2010-7-6 15:15 标题: 回复 3楼 的帖子
天啊、、、、
你是神啊
诶诶、把你的代码全部复制到我的密码输入内
直接爆源码啦
set /p pass=请输入密码: " neq "bathome" (call type "%~f0" & pause) else call type "%~f0" & pause
==============================================- 请输入密码:set /p pass=请输入密码: " neq "bathome" (call type "%~f0" & pause) e
- lse call type "%~f0" & pause
- @echo off&set acc123=0
- :[kelly]
- set /a acc123+=1
- set pass=
- if not "%acc123%"=="1" set b=密码错误,&set c=重新
- set /p pass=%b%请%c%输入密码:
- if "\\%pass%\\"=="\\12345\\" goto ilove~
- cls&goto [kelly]
- )
- :ilove~
- echo 密码正确!&ping 127.0.0.1>nul请按任意键继续. . .
复制代码
==============================================================
解决方法:
限制密码长度,密码多长,用set截取多长
==============================================================
综上所述,完整代码如下:
- @echo off&set acc123=0
- :[kelly]
- set /a acc123+=1
- set pass=
- if not "%acc123%"=="1" set b=密码错误,&set c=重新
- set /p pass=%b%请%c%输入密码:
- set pass=%pass:~0,5%
- if "\\%pass%\\"=="\\12345\\" goto ilove~
- cls&goto [kelly]
- )
- :ilove~
- echo 密码正确!&ping 127.0.0.1>nul
复制代码
[ 本帖最后由 canyuexiaolang 于 2010-7-6 15:24 编辑 ]
作者: plp626 时间: 2010-7-8 13:40
换个思路:
这个思路和密码以md5方式存储在 cookie文件里的想法相同。- 等待输入密码 set/p passX=?
-
- 将passX字符串转换为特定的固定长度字符串 passY
-
- 将转换的passY 与 源代码里存储的密码串password 进行比较 ? 相同则通过,不同则密码错误。
复制代码
作者: sgaizxt001 时间: 2010-7-9 08:01
我这个代码测试不行的嘛
- @echo off
- setlocal enabledelayedexpansion
- set/p str=请输入密码:
- set n=96
- for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- set /a n+=1
- call set str=%%str:%%b=!n!%%
- )
- if "!str!"=="9897116104111109101" (echo 恭喜) else (echo 没猜对)
- pause
复制代码
本意是想转换为ascii码,再进行其他处理,但是想测试一下这个东西发现不可以破解
[ 本帖最后由 sgaizxt001 于 2010-7-9 08:03 编辑 ]
作者: caruko 时间: 2010-7-9 10:50
楼山的也可以破解
创建一个2.bat ; 里面写echo;%*
然后密码为: 1"=="1" 2 "
输出显示 ""=="9897116104111109101" (echo 恭喜) else (echo 没猜对)
作者: sgaizxt001 时间: 2010-7-10 07:22
楼上的我怎么试验不成功呢,能否给我一个完整破解的代码我看看?我想学学这方面的东西
不过我直接输入9897116104111109101就通过了,所以想弄复杂一点
[ 本帖最后由 sgaizxt001 于 2010-7-10 07:32 编辑 ]
作者: caruko 时间: 2010-7-12 21:12
22楼的是字母替换,但是数字不替换,所以一般的密码如果插入CMD命令就无法运行..
但是如果运行的命令或者程序是数字呢? 那么仍然有效..
所以你创建一个以数字为名字的bat脚本 2.bat;里面写一个命令 echo;%*
if "!str!"=="9897116104111109101" (echo 恭喜) else (echo 没猜对)
如果密码为1"=="1" 2 "
实际运行起来就是
if "1"=="1" 2 ""=="9897116104111109101" (echo 恭喜) else (echo 没猜对)
2 实际上调用了2.bat;
后面的""=="9897116104111109101" (echo 恭喜) else (echo 没猜对) 就作为参数传递给2.bat
然后2.bat运行命令 echo %*,就把 ""=="9897116104111109101" (echo 恭喜) else (echo 没猜对) 显示出来了
作者: caruko 时间: 2010-7-12 21:46
今天看到一个密码隐藏的,就想用choice来做。
好处是一次只输入一个字符,输入不是预先设置的字符输入不进去,if 语句纯粹依靠con:输入破解几乎不可能;
并且字符可以每次运行都随机排列,即使得到chioce后的errorlevel,也无法破解出密码原文。
下面是一个示例代码- @echo off
- set "passwd=testpasswd123"
- set "pwdlist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
- ::这个pwdlist可以增加代码,每次运行都随机排列。
- set /a n=-1
- set ck=0
- set /p=请输入密码:<nul
- :loop
- set /a n+=1
- choice /C %pwdlist% /N >nul
- if %errorlevel% lss 1 goto :out
- if %errorlevel% equ 255 goto :out
- set /a df=%errorlevel%-1
- set /p=*<nul
- set ps=!pwdlist:~%df%,1!
- if "!passwd:~%n%,1!"=="!ps!" ( set "ck=!ck!0" ) else ( set "ck=!ck!1")
- set /a nn=n+1
- if "!passwd:~%nn%,1!"=="" if !ck! equ 0 (goto :pass ) else (goto :out)
- goto :loop
-
- :out
- echo;密码错误!
- goto :eof
-
- :pass
- echo;密码正确!
- goto :eof
复制代码
[ 本帖最后由 caruko 于 2010-7-12 22:11 编辑 ]
作者: sgaizxt001 时间: 2010-7-12 22:36
还是不行啊,怎么回事呢?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |