您的位置:首页 > 产品设计 > UI/UE

使用easygui+zipfile实现压缩包密码暴力破解

2018-02-03 00:05 956 查看

初学python,看到很多人因为压缩包密码头疼,网上搜的软件也都不怎么好用,就做了一个简单实用的的密码暴力破解器,用easugui做的界面,可以实现一些zip文件密码的破解工作,代码写得不规范还请大神轻喷,希望大家多多交流。



import easygui as Eg
import random as r
import zipfile
import time




def speedtest_ds():
    time_start = time.time()
    i=0
    while True:
        i+=1
        if i>50000000:
            break
    speed_test=(50000000/(time.time()-time_start)/3200)
    speed_result=int(speed_test)
    if  speed_result <= 500:
        level = 'C-  最低级性能⊙﹏⊙'
    if  500 <= speed_result < 1000:
        level = 'C级   低级性能‘(*>﹏<*)′'
    if 1000 <= speed_result < 2000:
        level = 'B级   普通级性能 (¯(∞)¯)'
    if 2000 <= speed_result < 3000:
        level = 'B+  中阶性能 (=@__@=) '
    if  3000 <= speed_result < 4000:
        level=  'A级   高阶性能 "≡ (^(OO)^) ≡" '
    if 4000 <= speed_result < 5000:
        level = 'S级   发烧级性能└(^o^)┘'
    if 5000 <= speed_result <= 6000:
        level = 'S+级  超级性能(⊙o⊙)'
    if speed_result >6000 :
        level = 'SSS级 超级计算机 (*@ο@*)'
    Eg.msgbox(" 当前计算机性能等级评价: %s \n\n 流处理器单线程运算速度: %d次/S"%(level,speed_result))
    return speed_result




def zip_choice():
    while True:
        choice_use = Eg.buttonbox("欢迎使用ZIP压缩包密码暴力破解器!\n\n"
                                  "本破解器绿色无毒,请放心使用!\n\n"
                                  "支持多开,可成倍增加破解速度\n\n"
                                  "如果您喜欢,请支持我!!! QQ:421736951\n\n"
                                  "开始使用吧~ ≡ (^(OO)^) ≡\n\n"
                                  "在目录中选择zip压缩包文件,或进行性能测试~", 'ZIP压缩包密码暴力破解器V1.0', ['选择目录', '性能测试'])
        if choice_use == '性能测试':
            speedtest_ds()
        elif choice_use == '选择目录':
            global path_way
            path_way = zip_file_open()
            if path_way:
                return True
        else:
            return False




def zip_file_open():
    while True:
        try:
            msg = '选择目录中的zip压缩包'
            default = r'C:/'
            full_file_path = Eg.fileopenbox(msg,  default)
            zip_open = zipfile.ZipFile(str(full_file_path))
            return full_file_path
        except:
            if full_file_path != None:
                Eg.msgbox("文件格式不正确!请重新输入")
            else:
                return False




def zip_msg_enter():
    msg = '请输入密码信息:'
    title = ' ZIP压缩文件暴力破解器'
    msg_num = '①.破解密码种子(可能包含的字母和数字,勿重复输入):'
    msg_start = '②.破解密码起始位数(支持1-12位):'
    while True:
        try:
            crack = Eg.multpasswordbox(msg, title,(msg_num ,msg_start))
            if crack[0]:
                if 0 < int(crack[1]) <= 12:
                    return crack
                else:
                    Eg.msgbox("解码范围只支持1-12位 ,请重新输入!")
            else:
                Eg.msgbox("输入不能为空 ,请重新输入!")
        except:
            if crack:
                Eg.msgbox("只能输入数字或字符,请重新输入!")
            else:
                break




def choice_exp():
    zip_msg = zip_msg_enter()
    seed_number= zip_msg[0]
    base_number = len(zip_msg[0])
    index_number = int(zip_msg[1])
    crack_exp = base_number ** index_number
    speed=speedtest_ds()
    ready=Eg.buttonbox("根据您的计算机性能,本次破解预计进行%s次,耗时估约%s秒\n\n"
                       "确定要进行破解吗?"%(crack_exp,crack_exp/int(speed)),
                       'ZIP压缩包密码暴力破解器',['重新选择','确定'])
    if ready == '确定':
        times = 0
        Crack_FLAG = 0
        time_start = time.time()
        zF = zipfile.ZipFile(path_way)
        while True:
            sa = []
            for i in range(index_number):
                sa.append(r.choice(seed_number))
            salt = "".join(sa)
            times += 1
            try:
                zF.extractall(pwd=salt.encode("ascii"))
                Crack_FLAG=1
            except:
               if times%10000==0:
                print("正在进行第 %d 次破解\r"%times)
               if times > (3*(base_number ** index_number)):
                    Crack_FLAG=2
            if Crack_FLAG ==1:
                time_used = int(time.time() - time_start)
                Eg.msgbox('CONGRUTUTIONS!破解成功!\n\n'
                          '密码:%s\n\n'
                          '耗时:%d秒\n\n'
                          '平均破解速度:%d/s'
                          '尝试破解次数:%s次\n\n' % (salt, time_used, times / time_used, times),'CRACK_SUCCESS','确定')
                break
            if Crack_FLAG==2:
                repeat = Eg.buttonbox('破解失败!密码很可能不为 %d 位!\n\n'
                                      '或输入的密码种子缺少字符!\n\n'
                                      '请重新输入或增加1位数继续破解!\n\n' % int(index_number),
                                      'CRACK_ERROR',['重新输入', '加位继续破解'])
                if repeat == '加位继续破解':
                    index_number+=1
                    Crack_FLAG = 0
                else:
                    break


def main():
    while True:
        if zip_choice():
            Eg.msgbox("文件导入成功!")
            choice_exp()
        else:
            break




if __name__ == '__main__':
    main()






阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: