압축파일 암호를 잊어버렸다.

 

분명 길지 않은 암호였는데 평소에 사용하던 암호랑 달라야 해서 만들었던 암호라 일주일 만에 기억에서 사라졌다. ㅠㅠ

 

오호 통재라

 

그런데 또 갑자기 백업한 내용에서 무언가를 찾아야하는 상황이 발생했고

 

인터넷을 뒤지다보니 반디집은 유료버전에서 암호복구를 지원하고 있었다.

 

그런데 방식이 무작위 입력(Brute force) 방식으로 보였다.

 

당연히 암호에 사용된 자리수나 문자에 시간이 달라질 수 밖에 없는데

반디집에서 공식적으로 안내하는 것은

아래와 같았다.

(출처 : https://kr.bandisoft.com/bandizip/help/password-recovery/)

 


암호복구 예상시간

(ZIP 포맷기준, 숫자+영문소문자, 처리속도 1,000,000,000/sec, 최신 성능의 컴퓨터 기준)

  • 1~7자리 암호: ~2분 이하
  • 8자리 암호: ~ 2시간
  • 9자리 암호: ~ 2일
  • 10자리 암호: ~50일
  • 11자리 암호: ~5년
  • 12자리 암호: ~160년
  • 13자리 암호: ~6,000년

 

일단 돈을 내야하는 것보다는 다른 제약때문에 최후의 선택지로 두고 다른 솔루션을 찾아보았다.

 

일반적인 zip 파일이니 zip 라이브러리를 사용해서 똑같이 무작위대입 공격을 수행하면 될 것 같아 코드를 작성하기 시작했다.

매뉴얼을 살펴보니 패스워드를 입력 후 예외처리에서 아스키코드 범위를 설정해 계속 증가시켜 가면 될 것 같았다.

import zipfile

a = [' ', '!', '@', '#', '$', '%', '^', '&', '*', '*', '+', '-', '_', '=']



with zipfile.ZipFile('Mail.zip') as mz :
    #zi = mz.infolist()
    #print(zi)
    ps = 'aaaaaaaa'
    while True:
        try:
            ret = mz.extract('Mail/주소록_outlook_utf-8_2024-03-05_10-23.csv', pwd=ps)
        except TypeError:
            ps = a
            # ASCII increase

    #mz.extract('temp/text.txt')

 

개발에서 손 놓은지 몇년 되었다고 손도 느리고 하나하나 짜야할 것들이 늘어가는 것이 느껴지니 귀찮아지기 시작했다.

 

"아니야~!!!! 이럴리가 없어!!! 분명 누군가 프로그램으로 구현했을 거야"

라는 마음이 강력하게 들었고 다시 뒤져보기 시작했다.

 

그래서 찾은 것이 아래의 동영상이다.

 

https://youtu.be/o5bejBb1AOo?si=lg19DYKLTmVVu4J6

 

 

존더리퍼라는 공개소프트웨어를 이용해 ZIP 형식에 사용된 암호 해시파일을 추출해서 무작위대입법으로 암호를 풀어내는 방식이었다.

해시값을 추출해서 비교하는 방식이니 예외처리로 처리하는 것보다 빠른 대입이 가능할 것이라고 생각했다.

 

대신 단점은 12자리까지만 패스워드를 찾아준다는 것인데 위에 반디집 사이트에서 보여지듯이 12자리는 어차피 내가 원하는 시간안에 암호를 찾을 확률이 극도로 낮으니 큰의미가 없었다.

 

 

위의 이미지에서 보이듯 그냥 워드리스트 기반 검색을 제외하면 무작위 대입법으로 아스키값을 계속해서 찾아가는 방식이라 자릿수 대비 시간이 오래 걸렸다.

 

그래도 알파벳, 특수기호, 숫자 세 종류를 모두 포함하는 7자리 암호를 3일하고도 4시간 34분 36초가 걸려서 찾아냈으니 걱정했던 것에 비해서는 오래 시간을 들이지 않아서 다행이었다.

 

암호를 찾겠다고 프로그램을 걸어 두었지만 CPU 점유율도 60% 내외로 그리 높지 않았고 특별히 고성능을 요구하는 작업이 아닌 이상 특별히 컴퓨터 사용이 불편하지도 않았고 그 사이 사전에 백업해 두었던 필요한 부분을 찾았기때문에 더더욱 마음편히 기다릴 수 있었던 것 같다.

 

여유가 되면 패스워드 사전을 여러개 한꺼번에 사용하거나 패스워스 사전을 기반으로 새로운 조합을 만들어 내서 무작위 대입법을 수행하는 코드를 작성해 봐야겠다.

 

John the Ripper password cracker

 

https://www.openwall.com/john/

 

John the Ripper password cracker

John the Ripper password cracker John the Ripper is an Open Source password security auditing and password recovery tool available for many operating systems. John the Ripper jumbo supports hundreds of hash and cipher types, including for: user passwords o

www.openwall.com

 

 

패스워드 사전

 

https://github.com/danielmiessler/SecLists

 

GitHub - danielmiessler/SecLists: SecLists is the security tester's companion. It's a collection of multiple types of lists used

SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, ...

github.com

 

https://github.com/danielmiessler/SecLists/tree/master/Passwords

 

SecLists/Passwords at master · danielmiessler/SecLists

SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, ...

github.com

 

 

'Reversing' 카테고리의 다른 글

소스코드 라인수 측정 프로그램  (0) 2023.01.05
실행파일 역공학(바이너리 분석) 도구 소개  (0) 2021.06.14
IDA pro Python 관련  (0) 2021.03.23
Posted by 휘프노스
,