파이썬으로 브루트포스 조합생성기 만들기
파이썬의 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()
실행결과