Python을 이용하여 ZIP나 RAR 파일 암호를 풀도록 가르쳐 드릴게요.

1. 원리를 풀다


사실 원리는 매우 간단하다. 한마디로 요약하면'기적이 크게 일어났다'는 것이다. 파이썬은 두 개의 압축 파일 라이브러리가 있다. zipfilerarfile, 이 두 라이브러리가 제공하는 압축 해제 방법extractall()은 암호를 지정할 수 있다. 그러면 먼저 암호 사전(수동 또는 프로그램)을 생성한 다음에 그 중의 암호를 순서대로 시도한다. 만약에 정상적으로 압축을 풀 수 있다면 암호가 정확하다는 것을 나타낸다.

2. 실험 환경


본고가 채택한 가상 환경은 Pipenv이다.
창고
  • zipfile:Python 표준 라이브러리, 사용 시 직접 가져오면 됨
  • rarfile:Python 타사 라이브러리
  • Pipenv를 이용하여rarfile 설치
    
    pipenv install rarfile
    마지막으로 비밀번호가 있는 압축 패키지를 실험 환경에 넣으면 된다.

    3. 인코딩


    원리를 알게 되면 인코딩은 매우 간단해질 것이다
    비밀번호 노트 준비
    암호본은 사실상 모든 가능한 암호를 포함하는 파일로 사용자가 수동으로 입력할 수도 있고 프로그램으로 입력할 수도 있다.글끝에 또 하나의 소개가 있을 것이다.
    압축 파일 읽기
    
    #  , 
    if filename.endswith('.zip'):
        fp = zipfile.ZipFile(filename)
    elif filename.endswith('.rar'):
        fp = rarfile.RarFile(filename)
    
    압력을 풀려고 시도하다
    먼저 암호를 사용하지 않고 압축을 풀려고 시도합니다. 성공하면 압축 파일에 암호가 없음을 나타냅니다.
    
    fp.extractall(desPath)
    fp.close()
    print('No password')
    return
    폭력적 해독
    
    try:
        #  
        fpPwd = open('pwd.txt')
    except:
        print('No dict file pwd.txt in current directory.')
        return
    for pwd in fpPwd:
        pwd = pwd.rstrip()
        try:
            fp.extractall(path=desPath, pwd=pwd.encode())
            print('Success! ====>'+pwd)
            fp.close()
            break
        except:
            pass
    fpPwd.close()
    
    프로그램 입구
    
    if __name__ == '__main__':
        filename = sys.argv[1]
        if os.path.isfile(filename) and filename.endswith(('.zip', '.rar')):
            decryptRarZipFile(filename)
        else:
            print('Must be Rar or Zip file')
    

    4. 사용


    상기 코드를 사용하려면 명령줄에서 python main.py <filename> 를 실행하면 됩니다.예: python main.py test.zip실행 결과:
    $ python main.py test.zip
    Success! ====>323126

    5. 확장


    암호 노트는 어떻게 얻습니까?
    이곳을 보면 세심한 동료들은 가장 핵심적인 것은 코드가 아니라 ** 암호본이라는 것을 반드시 발견할 것이다.이론적으로 암호본에 있는 암호가 충분하면 압축 패키지의 암호를 반드시 얻을 수 있다. 이것이 바로 속칭'충돌 라이브러리'**이다.
    어떻게 해독 과정을 가속화합니까?
    암호본의 문제를 해결하고 깊이 생각하는 동료들은 반드시 새로운 의문을 갖게 될 것이다. 암호본이 이렇게 방대하다면 어떻게 해독의 과정을 가속화시킬 수 있을까?여기에 두 가지 사고방식을 제시하다
    다중 스레드 (프로세스) 해독
    암호 노트가 많고 암호 수량이 방대할 때, 우리는 다중 스레드 (프로세스) 방식으로 암호를 읽을 수 있으며, 하나의 프로세스는 하나의 암호 노트를 읽고, 하나의 스레드는 세그먼트로 암호를 읽을 수 있다.물론python에 있다면 다선정을 사용하지 않는 것을 권장합니다. 왜냐하면python의 선정은 계륵이기 때문에 관심 있는 사람은 관련 자료를 읽을 수 있습니다.
    GPU를 이용한 가속
    위의 코드는 모두 CPU에서 실행됩니다. 다중 스레드 (프로세스) 를 켜도 CPU 자원만 사용하지만, 해결 과정을 가속화하려면 유휴 GPU 자원을 사용할 수 있습니다.
    GPU 가속을 활용할 수 있는 이유를 설명하기 전에 계산 작업을 수행하기 위해 설계된 명확한 관점이 필요합니다.
    그런데 왜 GPU 가속을 사용할 생각을 했을까요?이것은 두 가지 차이점을 말하자면 CPU는 비록 여러 핵이 있지만 총수는 두 자릿수를 초과하지 않고 모든 핵의 연산 능력이 매우 강하다는 것이다.GPU의 핵 수는 CPU를 훨씬 초과하지만 각 핵의 연산 능력은 CPU의 핵에 비해 훨씬 다르다.
    우리는 간단하게 예를 들어 한 문제를 풀 수 있다. CPU는 박사과정생이고 GPU는 초등학생이다. CPU는 문제를 이해하고 문제를 푸는 절차와 해법을 정리하는데 GPU는 그 중에서 간단하지만 수량이 많은 간단한 연산을 책임지면 된다.
    따라서 이론적으로 암호를 해독하는 과정에서 우리는 GPU를 사용하여 이 과정을 가속화시킬 수 있다.
    사실 이런 도구도 등장했다. Hashcat은 가장 유명한 도구로 세계에서 가장 빠른 암호 복구 도구로 CPU/GPU 등을 기반으로 할 수 있다고 불린다.
    파이썬을 이용하여 ZIP나 RAR 파일의 암호를 풀도록 가르쳐 드리는 이 글은 여기까지 소개되었습니다. 더 많은 파이썬의 압축 패키지 암호 풀기 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기