Instructions for use: the text editor saves the file name as .bat, bat is the file type, and supports up to 9 characters
@echo off setlocal enabledelayedexpansion echo WINRAR mixed password decryptor will generate multiple windows to run passwords, do not close if "%1" equ "" ( set /p numDigit=Please enter the maximum number of digits in the password: set /p rarRoot=Please enter the main directory of WINRAR, such as C:\Program Files\WinRAR: set /p rarFile=Please enter the mixed password compressed file package path, such as 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 bit 1, other N+1 processes set /a threadMaxNum=!maxDigit!-!minDigit! if not "!threadMaxNum!"=="1" ( set /a threadMaxNum=1 + !threadMaxNum! ) rem process number rem Parameter 1 passes the number of digits, parameter 2 passes the maximum number of processes, parameter 3 passes the current serial number for /l %%a in (1,1,!threadMaxNum!) do ( if !bitNum! leq 28 ( copy /b /y %0 %temp%\thd%%a.bat start "rarNumPwdThread%%a" /min %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:^ & amp;>>%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! bit ASCII code! numDigit! bit mixed password analysis set beginTime=!time! cd /d "!rarRoot!" set loopBegin=35 set loopEnd=126 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=100 set loopEnd=99 rem set jmpOverNum=1 for /l %%b in (3,1,!idx!) do ( set loopEnd=!loopEnd!0 set emptyNum=!emptyNum!0 if %%b gtr 3 ( set loopBegin=!loopBegin!0 ) ) 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 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 " & amp; {!addNum!|foreach {$_ + !stepNum!}}"`) do ( rem echo %%c rem pause set stepNum=1 set addNum=%%c if "!exitFlag!" equ "1" ( rem echo exit rem pause exit ) if "!loopEnd!" equ "%%c" ( rem echo exitFlag=1 rem pause set exitFlag=1 ) 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 "error" %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 progress!seq!password test complete!progressnum!%% ) ) exit
(full text)