• 字典破解zip


    def pojie_zip(FilePath,PwdPath):
        zipFile = zipfile.ZipFile(FilePath    , 'r'  ,  zipfile.ZIP_DEFLATED)
        passFile = open  (  PwdPath  ,'r' )
        file = zipFile.namelist()
    for pwd in passFile.readlines(): Pwds = pwd.rstrip(' ') Bpwd=Pwds.encode("utf-8") #转换编码 try: zipFile.extractall('F:/None',None,Bpwd) for file in zipFile.namelist(): zipFile.extract(file , r'F:/None' , Bpwd) print( "1" ) zipFile.close() break

    except: pass passFile.close() zipFile.close() if __name__== '__main__' : pojie_zip( 'F:/test.zip' , 'F:/pwd.txt' )

    /******************** 总结  **********************/

    先说 File 文件

    zipFile  =  zipfile.ZipFile(FilePath  ,  'r'  ,  zipfile.ZIP_DEFLATED)

    打开一个文件,并返回这个对象;

    FilePath:打开文件的路径

    ’r‘:说明打开的方式 (这里是只读形式)

    zipfile.ZIP_DEFLATED: 是说压缩编写的方式(具体api介绍)

     passFile = open  (  PwdPath  ,'r' )

    打开一个文件,并返回这文件对象;

    PwdPath:打开的文件路径

    ’r‘:说明是只读方式

     file = zipFile.namelist( )

    返回打开的zip包内的所有文件名,包括目录下的文件名,返回类型<class 'list'>类型的字符串

    passFile.readlines( ):

    返回文件的一行内容,返回类型 <class 'str'> 类型的字符串

    Pwds = pwd.rstrip(' ')

    rstrip(char) 默认去除字符串后面的空格,这里是要求去除 ,这个函数是 python 3版本以上使用

    python 2版本为  strip(char) 没有前面的 r。 因为是pwd是<class 'str'>类型 所有 Pwds也是这个类型的字符串

     Bpwd=Pwds.encode("utf-8")   #转换编码

    这个方法是将<class 'str'>类型 转换为 <class 'tybe'>类型,如果不转换 则下个函数无法使用Bpwd变量

      zipFile.extractall('F:/None',None,Bpwd)

    文件对象调用 extractall()函数来解压 zip 文件,解压所有文件

    参数1:是将解压的文件保存在哪里或哪个文件夹下面,参数类型<class ,'str'>

    参数2:是要解压的具体文件,这里None是让它默认解压所有文件

    参数3:是解压需要的密码,这个密码需要 <class 'type'> 类型的字符串,这里有两种方法可以使用这个类型 第一种是  b"123" 加前缀 b ,第二中就是使用上面的函数将变量转换为这个类型。

      zipFile.extract(file  ,  r'F:/None'  , Bpwd)

    和上面的函数一样,只不过是解压单个文件,参数的位置不同

    参数1:需要解压的文件名,参数类型<class ,'str'>

    参数2:需要解压完存放的地方,参数类型<class ,'str'>

    参数3:解压时需要的密码,这里的密码也是需要 <class 'type'>类型的字符串,两种方法同上

        passFile.close()

        zipFile.close()

    两个对象都是调用关闭 io 的方法

    总结: 写的时候没怎么思考,对函数的理解不太彻底,在运行报错的时候总是不管不顾的百度去搜索,找到后复制粘贴就不了了之了,这个破解里卡的最厉害的部分就是  zipFile.extractall('F:/None',None,Bpwd) 这个函数的参数都需要什么类型,我一开始没不知道,所以运行时总是报错,要不就是解压出来后文件夹目录是空的,直到最后想起别人的提醒,才慢慢的向参数类型这方面的查找,最后找了半天总算是找到了。总结你对一个函数要了解透彻,不然运行报错你都不知道错在哪里。

    解决问题的网址:

    开始是想字符串转数字的思路:

    第一个是字符串与数值的转换:

    http://blog.163.com/liuyuhuan0915@126/blog/static/782654482011413114712117/

    s = string.atoi( ' 18 ' ,  16)

    (即'18'为16进制数的字符串,转换为对应的10进制整数形式)

    通过查 api 知道了这个 转换时在 python 2 版本就被抛弃了得,所以不能用。其中还一些和它同等类的函数一样是被抛弃的

    string.atof(s) 浮点数转换

    第二是通过切片查找转换类型:

    https://segmentfault.com/q/1010000002620209

       def find(s):
    for i in range(len(s)): if not '0'<=s[i]<='9': return i return len(s)
    s
    = '234jdsf23232ks' idx = find(s)
    t
    = int(s[ 0 :idx])

    但是 通过 type(t) 的出的类型是 <class 'int'>类型  显然这不是我需要的 <class 'byte'>的类型

    后来通过找 api 才知道 这个 <class 'byte'> 类型是 Unicode 编码格式,所以我想是不是可以通过自定义编码格式改它的类型,最终在这个网站上找到了修改字符串编码格式的函数

    http://www.runoob.com/python3/python3-string.html

     

  • 相关阅读:
    innerHTML获取标签内容
    images获取所有图片标签
    getElementsByTagName通过标签名获取元素对象集合
    getElementsByName通过标签的name属性来获取元素对象
    getElementsByClassName通过类名获取元素对象集合
    getElementById通过id找到对象
    tp3.2查询指定的字段
    流程控制语句if、else、elif、break、continue
    Python3基础知识之元组、集合、字典
    快速自定义输出格式
  • 原文地址:https://www.cnblogs.com/Engi-xx/p/6306294.html
Copyright © 2020-2023  润新知