9位混合密码压缩包解密工具

使用说明:文本编辑器保存为文件名.bat,bat是文件类型,最高支持9位

0326更新日志:

1.修复结束值问题

2.修复框框大小问题

3.采用空闲进程计算

4.采用定制CPU核心减少资源占用

@echo off
setlocal enabledelayedexpansion
echo WINRAR混合密码解密器,会生成多个窗口跑密码,勿关
mode con cols=100 lines=25
if "%1" equ "" (
set /p numDigit=请输入密码最大位数:
set /p rarRoot=请输入WINRAR主目录,如C:\Program Files\WinRAR:
set /p rarFile=请输入混合密码压缩文件包路径,如C:\test.rar:
rem set numDigit=3
rem set rarRoot=C:\Program Files\WinRAR
rem set rarFile=C:\Users\goldenwater\Desktop\dpT.rar
set /a minDigit=!numDigit!*2
set /a maxDigit=!numDigit!*3
set bitNum=!minDigit!
rem 1位1个,其他N+1个进程
set /a threadMaxNum=!maxDigit!-!minDigit!
if not "!threadMaxNum!"=="1" (
set /a threadMaxNum=1+!threadMaxNum!
)
set coreNumber=0
set cpuNumber=
for /f "usebackq skip=2 tokens=2 delims==" %%q in (`powershell -command "& {wmic cpu get numberofcores /format:list}"`) do (
set cpuNumber=%%q
)
echo 当前CPU核心数:!cpuNumber!
set /p cpuUseNumber=请输入需要使用的CPU数量,更多CPU占用更多CPU资源:
for /l %%s in (1,1,!cpuUseNumber!) do (
set /a len0=%%s-1
set num0=1
for /l %%t in (1,1,!len0!) do (
set /a num0=!num0!*2
)
set /a coreNumber=!coreNumber!+!num0!
)
rem echo !coreNumber!
rem pause
for /f "skip=6 usebackq tokens=2 delims= " %%r in (`powershell -command "& {!coreNumber!|format-hex}"`) do (
if not "%%r"=="" (
set coreNumber=%%r
set coreFirst=%%r
set coreFirst=!coreFirst:~0,1!
if "!coreFirst!" equ "0" (
set coreNumber=!coreNumber:~1!
)
)
)
set coreNumber=0x!coreNumber!
rem echo !coreNumber!
rem pause
rem 进程数
rem 参1传位数,参2传最大进程数,参3传当前序号
for /l %%a in (1,1,!threadMaxNum!) do (
if !bitNum! leq 28 (
copy /b /y %0 %temp%\thd%%a.bat
start "rarNumPwdThread%%a" /min /low /AFFINITY !coreNumber! %temp%\thd%%a.bat !bitNum! !threadMaxNum! %%a
set /a bitNum=!bitNum!+1
rem echo 32: >%temp%\alphat%%a.txt
rem echo 33:^^!>>%temp%\alphat%%a.txt
rem echo 34:^">>%temp%\alphat%%a.txt
echo 35:^#>%temp%\alphat%%a.txt
echo 36:^$>>%temp%\alphat%%a.txt
rem echo 37:^%>>%temp%\alphat%%a.txt
echo 38:^&>>%temp%\alphat%%a.txt
echo 39:^'>>%temp%\alphat%%a.txt
echo 40:^(>>%temp%\alphat%%a.txt
echo 41:^)>>%temp%\alphat%%a.txt
echo 42:^*>>%temp%\alphat%%a.txt
echo 43:^+>>%temp%\alphat%%a.txt
echo 44:^,>>%temp%\alphat%%a.txt
echo 45:^->>%temp%\alphat%%a.txt
echo 46:^.>>%temp%\alphat%%a.txt
echo 47:^/>>%temp%\alphat%%a.txt
echo 48:0>>%temp%\alphat%%a.txt
echo 49:1>>%temp%\alphat%%a.txt
echo 50:2>>%temp%\alphat%%a.txt
echo 51:3>>%temp%\alphat%%a.txt
echo 52:4>>%temp%\alphat%%a.txt
echo 53:5>>%temp%\alphat%%a.txt
echo 54:6>>%temp%\alphat%%a.txt
echo 55:7>>%temp%\alphat%%a.txt
echo 56:8>>%temp%\alphat%%a.txt
echo 57:9>>%temp%\alphat%%a.txt
rem echo 58:^:>>%temp%\alphat%%a.txt
echo 59:^;>>%temp%\alphat%%a.txt
echo 60:^<>>%temp%\alphat%%a.txt
echo 61:^=>>%temp%\alphat%%a.txt
echo 62:^>>>%temp%\alphat%%a.txt
echo 63:^?>>%temp%\alphat%%a.txt
echo 64:^@>>%temp%\alphat%%a.txt
echo 65:A>>%temp%\alphat%%a.txt
echo 66:B>>%temp%\alphat%%a.txt
echo 67:C>>%temp%\alphat%%a.txt
echo 68:D>>%temp%\alphat%%a.txt
echo 69:E>>%temp%\alphat%%a.txt
echo 70:F>>%temp%\alphat%%a.txt
echo 71:G>>%temp%\alphat%%a.txt
echo 72:H>>%temp%\alphat%%a.txt
echo 73:I>>%temp%\alphat%%a.txt
echo 74:J>>%temp%\alphat%%a.txt
echo 75:K>>%temp%\alphat%%a.txt
echo 76:L>>%temp%\alphat%%a.txt
echo 77:M>>%temp%\alphat%%a.txt
echo 78:N>>%temp%\alphat%%a.txt
echo 79:O>>%temp%\alphat%%a.txt
echo 80:P>>%temp%\alphat%%a.txt
echo 81:Q>>%temp%\alphat%%a.txt
echo 82:R>>%temp%\alphat%%a.txt
echo 83:S>>%temp%\alphat%%a.txt
echo 84:T>>%temp%\alphat%%a.txt
echo 85:U>>%temp%\alphat%%a.txt
echo 86:V>>%temp%\alphat%%a.txt
echo 87:W>>%temp%\alphat%%a.txt
echo 88:X>>%temp%\alphat%%a.txt
echo 89:Y>>%temp%\alphat%%a.txt
echo 90:Z>>%temp%\alphat%%a.txt
echo 91:^[>>%temp%\alphat%%a.txt
echo 92:^\>>%temp%\alphat%%a.txt
echo 93:^]>>%temp%\alphat%%a.txt
echo 94:^^>>%temp%\alphat%%a.txt
echo 95:^_>>%temp%\alphat%%a.txt
echo 96:^`>>%temp%\alphat%%a.txt
echo 97:a>>%temp%\alphat%%a.txt
echo 98:b>>%temp%\alphat%%a.txt
echo 99:c>>%temp%\alphat%%a.txt
echo 100:d>>%temp%\alphat%%a.txt
echo 101:e>>%temp%\alphat%%a.txt
echo 102:f>>%temp%\alphat%%a.txt
echo 103:g>>%temp%\alphat%%a.txt
echo 104:h>>%temp%\alphat%%a.txt
echo 105:i>>%temp%\alphat%%a.txt
echo 106:j>>%temp%\alphat%%a.txt
echo 107:k>>%temp%\alphat%%a.txt
echo 108:l>>%temp%\alphat%%a.txt
echo 109:m>>%temp%\alphat%%a.txt
echo 110:n>>%temp%\alphat%%a.txt
echo 111:o>>%temp%\alphat%%a.txt
echo 112:p>>%temp%\alphat%%a.txt
echo 113:q>>%temp%\alphat%%a.txt
echo 114:r>>%temp%\alphat%%a.txt
echo 115:s>>%temp%\alphat%%a.txt
echo 116:t>>%temp%\alphat%%a.txt
echo 117:u>>%temp%\alphat%%a.txt
echo 118:v>>%temp%\alphat%%a.txt
echo 119:w>>%temp%\alphat%%a.txt
echo 120:x>>%temp%\alphat%%a.txt
echo 121:y>>%temp%\alphat%%a.txt
echo 122:z>>%temp%\alphat%%a.txt
echo 123:^{>>%temp%\alphat%%a.txt
echo 124:^|>>%temp%\alphat%%a.txt
echo 125:^}>>%temp%\alphat%%a.txt
echo 126:^~>>%temp%\alphat%%a.txt
)
)
exit
) else (
set idx=%1
set maxThd=%2
set seq=%3
rem echo idx=!idx!
rem echo maxThd=!maxThd!
rem echo seq=!seq!
rem pause
call:threadMain
)

:threadMain
cls
echo !idx!位ASCII码!numDigit!位混合密码解析
set beginTime=!time!
cd /d "!rarRoot!"
set loopBegin=35
set loopEnd=127
set emptyNum=1
rem set jmpOverNum=1
set skipNumArr=37,58
if "!maxThd!"=="1" (
for /l %%b in (3,1,!idx!) do (
set emptyNum=!emptyNum!0
)
) else (
set loopBegin=
set /a twoNum1=!maxThd!-!seq!
set /a threeNum1=!numDigit!-!twoNum1!
for /l %%u in (1,1,!threeNum1!) do (
set loopBegin=!loopBegin!100
)
for /l %%v in (1,1,!twoNum1!) do (
set loopBegin=!loopBegin!35
)
rem echo loopBegin=!loopBegin!
rem pause
set loopEnd=100
rem set jmpOverNum=1
for /l %%b in (3,1,!idx!) do (
set loopEnd=!loopEnd!0
set emptyNum=!emptyNum!0
rem if  %%b gtr 3 (
rem set loopBegin=!loopBegin!0
rem )
)
for /l %%m in (13,1,34) do (
set skipNumArr=!skipNumArr!,%%m
)
)
rem echo emptyNum=!emptyNum!
rem pause
rem echo loopBegin=!loopBegin!
rem echo loopEnd=!loopEnd!
rem pause
set stepNum=0
rem set exitFlag=0
set addNum=!loopBegin!
rem for /l %%c in (!loopBegin!,!stepNum!,!loopEnd!) do (
for /l %%p in (1,0,1) do (
rem echo %%p
rem pause
for /f "usebackq tokens=*" %%c in (`powershell -command "& {!addNum!|foreach {$_+!stepNum!}}"`) do (
rem echo %%c
rem pause
set stepNum=1
set addNum=%%c
rem if "!exitFlag!" equ "1" (
rem echo exit
rem pause
rem exit
rem )
if "!loopEnd!" equ "%%c" (
rem echo exitFlag=1
rem pause
rem set exitFlag=1
exit
)
set curNum=%%c
set twoNum=%%c
set twoNum=!twoNum:~0,2!
rem echo twoNum=!twoNum!
call set "k=%%^skipNumArr:!twoNum!=%%"
rem echo k=!k!
if not "!k!"=="!skipNumArr!" (
rem echo skip
rem pause
set stepNum=!emptyNum!
rem set /a jmpOverNum=0+!emptyNum!
) else (
set stepNum=1
set curNum1=
set testNum=
rem set jmpOverNum=0
for /l %%d in (1,1,!idx!) do (
if not "!curNum!"=="" (
set firstNum=!curNum:~0,1!
rem echo firstNum=!firstNum!
if not "!firstNum!"=="" (
set curBeginIdx=
if "!firstNum!" equ "1" (
set curNum1=!curNum:~0,3!
rem echo curNum1=!curNum1!
if not "!curNum1!" equ "" (
rem set /a yu=!curNum1!/100
rem echo yu100=!yu!
rem if not "!yu!"=="0" (
if  !curNum1! geq 100 (
if  !curNum1! leq 126 (
set testNum=!testNum!!curNum1!
)
)
set curBeginIdx=3
)
rem )
) else (
set curNum1=!curNum:~0,2!
if not "!curNum1!" equ "" (
set firstCurNum=!curNum1:~0,1!
if "!firstCurNum!" equ "0" (
set curNum1=!curNum1:~-1!
)
rem set /a yu=!curNum1!/65
rem echo yu65=!yu!
rem if not "!yu!"=="0" (
if  !curNum1! geq 35 (
if  !curNum1! leq 99 (
call set "n=%%^skipNumArr:!curNum1!=%%"
if "!n!" equ "!skipNumArr!" (
set testNum=!testNum!!curNum1!
)
)
)
rem )
set curBeginIdx=2
)
)
call set "o=%%^curNum:~!curBeginIdx!%%"
set curNum=!o!
rem echo o=!o!
)
)
)
if "!testNum!" equ "%%c" (
rem echo testNum=!testNum!
rem pause
set curNum=%%c
set testNum1=
for /l %%e in (1,1,!idx!) do (
if not "!curNum!"=="" (
set firstNum1=!curNum:~0,1!
if not "!firstNum1!"=="" (
set curBeginIdx1=
if "!firstNum1!" equ "1" (
set curNum2=!curNum:~0,3!
if not "!curNum2!" equ "" (
for /f "usebackq skip=2 tokens=2 delims=:" %%f in (`find "!curNum2!" "%temp%\alphat!seq!.txt"`) do (
set testNum1=!testNum1!%%f
)
set curBeginIdx=3
)
) else (
set curNum2=!curNum:~0,2!
if not "!curNum2!" equ "" (
for /f "usebackq skip=2 tokens=2 delims=:" %%g in (`find "!curNum2!" "%temp%\alphat!seq!.txt"`) do (
set testNum1=!testNum1!%%g
)
set curBeginIdx=2
)
)
call set "h=%%^curNum:~!curBeginIdx!%%"
set curNum=!h!
)
)
)
rem echo testNum1=!testNum1!
rem pause
set /a testNum1Begin=!numDigit!-1
call set "l=%%^testNum1:~!testNum1Begin!%%"
rem echo "!l!"
rem pause
if not "!l!" equ "" (
rar x -mt50 -o+ -r- -p"!testNum1!" -inul -ilog%temp%\rarlog!seq!.txt "!rarFile!"
set checkCharFlag=1
for /f "usebackq tokens=3 delims=:" %%i in (`find /c "错误" %temp%\rarlog!seq!.txt`) do (
set checkChar=%%i
set checkChar=!checkChar: =!
if not "!checkChar!"=="0" (
set checkCharFlag=0
echo password !testNum1! is fail^^!
)
)
if "!checkCharFlag!" equ "1" (
cls
echo !beginTime!
echo rar password is !testNum1!^^!
echo !time!
for /l %%j in (1,1,!maxThd!) do (
if not "!seq!"=="%%j" (
taskkill /f /fi "windowtitle eq rarNumPwdThread%%j*" /fi "status eq running">nul
)
)
pause
exit
)
del /q %temp%\rarlog!seq!.txt
)
)
)
rem set /a num1=%%c-!loopBegin!+!jmpOverNum!+1
rem set /a num1=!num1!*100
rem set /a num2=!loopEnd!-!loopBegin!+1
rem set /a progressnum=num1/num2
rem echo num1=!num1!
rem echo num2=!num2!
rem echo progressnum=!progressnum!
rem pause
rem cls
rem echo 进程!seq!密码测试已完成!progressnum!%%
)
)
exit

(全文完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

humors221

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值