관리 메뉴

개발자비행일지

파이썬으로 브루트포스 조합생성기 만들기 본문

▶ Python

파이썬으로 브루트포스 조합생성기 만들기

Cyber0946 2018. 12. 13. 16:29

 파이썬의 itertools를 활용하여, 숫자와 문자로 구성된 브루트포스 조합생성기 만들기 


import itertools

choices = '0123456789abcdef'

MaxLength = 4

f = open('res.txt', 'w')

for length in range(0,MaxLength+1):

    for entry in itertools.product(choices,repeat = length):

        password = '0'*(MaxLength - length) 

        password += ''.join(entry)

        print(password)

        f.write(password+'\n')

f.close()


iterable과의 곱을 자체적으로 계산하려면 repeat 키워드 인수를 사용하여 반복 횟수를 지정하여 사용할 수 있다.  예를 들어, product(A, repeat=4) 은 product(A, A, A, A) 과 동일 함을 의미하며, 아래의 예를 통해서 이 함수가 어떻게 동작하는지 알아보자. 

우리가 위에서 사용하는 itertools 모듈의 product 함수는 아래와 같이 정의 되어 있다.

 def product(*args, repeat=1):

    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy

    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111

    pools = [tuple(pool) for pool in args] * repeat

    result = [[]]

    for pool in pools:

        result = [x+[y] for x in result for y in pool]

    for prod in result:

        yield tuple(prod)


위의 예제에서 우리가 활용한 부분은 product(range(2), repeat=3) --> 이 부분이다. 이 코드의미는 range(2) 즉 0,1을 조합하여 repeat =3 

길이가 3인 000, 010, 001과 같은 조합을 생성하겠다는 것이다. 

자 이제 위의 조합 생성기 소스코드를 분석해 보자.

먼저 우리는 itertools 모듈이 제공하는 product 함수를 사용하기 위해서 import 문을 실행해 준다.

choices = '0123456789abcdef'

choices라는 문자열을 생성해서 우리가 사용할 숫자와 문자 조합의 재료가 되는 변수이다.

MaxLength = 4

암호를 몇자리 까지 사용할 지 설정해 준다.

f = open('res.txt''w')

암호 조합 결과를 저장할 파일을 열어주는 객체로 f를 선언한다.

for length in range(0,MaxLength+1):

암호조합을 0 부터 MaxLength 까지 생성한다.

    for entry in itertools.product(choices,repeat = length):

product 함수를 사용해서 choices라는 문자열의 재료를 가지고 repeat에 설정된 length 길이 만큼 반복한다.

        password = '0'*(MaxLength - length) 

암호조합 초기화 값이다. 길이에 따라서 0000 부터 000 00 0 ''까지 설정가능

        password += ''.join(entry)

join 함수를 사용해서 초기 값에 우리가 반환한 조합 값을 더해준다.

        print(password)

결과값을 화면에 한 줄씩 출력한다.

        f.write(password+'\n')

파일에 비밀번호를 작성하고 줄 바꿈을 입력한다.

f.close()

실행결과