import ctypes
import io
import os
import sys
import itertools
from unrar import constants
from unrar import unrarlib
nums = [str(i) for i in range(10)]
chrs = [chr(i) for i in range(65, 91)]
charsaz = [chr(i) for i in range(97,122)]
if sys.version < '3':
def b(x):
return x
else:
def b(x):
if x is not None:
# encode using DOS OEM standard
return x.encode('cp437')
nums = [str(i) for i in range(10)]
chrs = [chr(i) for i in range(65, 91)]
charsaz = [chr(i) for i in range(97,122)]
for i in range(2,16,1):
pwddict = itertools.permutations(nums + chrs + charsaz, i)
for testword in pwddict:
print(testword)
inword=''.join(testword)
try:
# 创建一个RAROpenArchiveData数据
archive_data = unrarlib.RAROpenArchiveDataEx('f:\\py\\hash.rar', mode=constants.RAR_OM_EXTRACT)
except unrarlib.UnrarException:
print("RAROpenArchiveDataEx Error!")
try:
handle = unrarlib.RAROpenArchiveEx(ctypes.byref(archive_data))
except unrarlib.UnrarException:
print("RAROpenArchiveEx Error!")
try:
unrarlib.RARSetPassword(handle, b(inword))
except unrarlib.UnrarException:
print("RAROpenArchiveEx Error!")
try:
header_data = unrarlib.RARHeaderDataEx()
except unrarlib.UnrarException:
print("RARHeaderDataEx Error!")
try:
res = unrarlib.RARReadHeaderEx(handle, ctypes.byref(header_data))
#print('FileCRC:%d' % header_data.FileCRC)
except unrarlib.UnrarException:
print("RARReadHeaderEx Error!")
try:
unrarlib.RARProcessFileW(handle, constants.RAR_EXTRACT, 'f:\\py', 'hash.exe')
print('sucess:%s' % testword)
except unrarlib.UnrarException:
#print("RARProcessFileW error!")
pass
try:
unrarlib.RARCloseArchive(handle)
except unrarlib.UnrarException:
print("RARCloseArchive error!")
代码中实现了从2位组合到16位组合的穷举破解过程