cRARk같은 프로그램에서 주로 사용되는 라이브러리(라기보단 내가 패스워드 크랙할 때 내릴 명령을 적은 파일)인데, 국내자료가 거의 없다시피 해서 메모 비슷하게 적어둠
사용법에 대한 원문은 다음과 같다. :: http://www.password-crackers.com/crack/pcl.txt
그 외에도 사용법을 다룬 여러 사이트들이 많으니 참고...
만약 익혀보고 싶다면 PCL을 사용하는 프로그램을 사용해보자.(cRARK 추천)
우선 크게 문법을 보면,
//////////////////////파일 시작//////////////////////
[ 딕셔너리 or 캐릭터 셋 ]
##
패스워드 셋
///////////////////////파일 끝///////////////////////
이렇게 작성하도록 되어있다.
이 때 궁금한게 생길텐데, 딕셔너리 빼고 다 뭔지 감은 오겠지만 잘 모를 것이다.
1. 캐릭터 셋
- 특정 변수에 문자열의 범위(그러니까 A-Z 같은것들.)나 특수문자(?$][)들을 정의하는 것을 의미한다. 헤더라고 보면 편함
- 특수문자중 일부는 PCL 문법에 있어서 사용되는 문자들이라 그 문자들은 앞에 역슬래시(\)를 붙여주어야 한다.
주의해주어야 할 특수문자는 다음과 같다.
\$, \., \*, \?, \= |
캐릭터 및 패스워드 셋을 구성할 때 필요한 특수문자들 |
\], \[, \{, \}, \(, \) | 대, 중 소 괄호 |
\ | 공백 |
\XX |
\DE \AD \BE \EF 처럼 hex문자열 등 |
\0 |
NULL... |
다음으로 슬슬 어려워지는데... 위에 설명한 변수들이란 다음과 같다.
$a |
미리 정의된 [a-z]까지의 라틴계열 소문자 알파벳 (26글자) |
$A |
미리 정의된 [A-Z]까지의 라틴계얼 대문자 알파벳 (26글자) |
$! |
특수문자중 {}:"<>?[];\',./~!@#$%^&*()_+`-=\|가 미리 정의되있음. (32글자) |
$1 |
미리 정의된 [0-9]까지의 아라비아 숫자 (10개) |
$i |
사용자 정의의 [a-z]까지의 국립 소문자 알파벳 |
$I |
사용자 정의의 [A-Z]까지의 국립 대문자 알파벳 |
$o |
사용자 정의의 추가적인 문자(그러니까 \xFF, \x02 등) |
$w | 메인 딕셔너리 파일의 경로를 정의할 수 있는 변수 |
$u | 유저 딕셔너리 파일의 경로를 정의할 수 있는 변수 |
? | $a + $A + $! + $1 + $i + $I + $o |
min | min = n 설정시, n번째 자리수 부터 시작 |
max | max = n 설정시, n번째 자리수 까지 공격 |
※ Q. 사용자 정의는 뭔말임
간단히 말하자면 막 쓸 수 있는 변수인데 $i, $I $o의 경우 기본적으로 아무런 값도 들어있지 않으며 소문자를 넣든 대문자를 넣든 특수문자를 넣든 뭘하든 그냥 막 쓸수 있음.
일반 변수라고 보면 편할듯.
※ Q. 메인 딕셔너리는 뭐고 유저 딕셔너리는 뭐임 초갈이신가
그냥 첫번째 딕셔너리 파일, 두번째 딕셔너리 파일이라 생각하면 편함.
일반적으로 딕셔너리 파일 경로를 $w에 정의시키고 씀
※ Q. 미리 정의된건 그럼 뭐 내가 못고쳐씀?
ㄴㄴ 미리 정의된것들도 다 자유롭게 고쳐쓸 수 있음. 사용자 정의 형식으로 사용이 가능
근데 그렇게 고쳐쓰면 헷갈릴수도 있으니 주의 ㅋ
이론만 보면 드럽게 어려우니까 예시를 한번 보고 무릎을 탁! 치도록 하자.
$w = "C:\\dict.dict" |
C:/dict.dict 파일을 딕셔너리 파일로 사용하겠다는 뜻 |
$i = [avz] |
사용자 정의 변수 $i에 a,v,z 문자를 추가 |
? |
다들모여~ ($a + $A + $! + $1 + $i + $I + $o) |
$a = [bbbbb] |
미리 정의된 $a 변수에 b,b,b,b,b 문자를 추가 |
$o = [억떡계\ 이럴수가] |
$o에 억,떡,계," ",이,럴,수,가 를 추가함 |
한글도 된다.... ㄷㄷ
캐릭터 셋은 여기까지. 조금 어렵긴한데 잘 생각해보거나 따라해보면 이해된다
2. ##란 캐릭터 셋과 패스워드 셋을 구분하는 라인이다.
- 캐릭터 셋은 단 하나도 지정 안해줘도 상관없지만( [대괄호, 즉 옵션으로 정의됨] )
패스워드 셋은 반드시 해줘야 한다.
- 주석은 "#"이다.
- 캐릭터 셋이 없다면 다음과 같이 PCL파일을 구성해주면 된다.
//////////////////////파일 시작//////////////////////
##
패스워드 셋
///////////////////////파일 끝///////////////////////
3. 패스워드 셋
- 제일 핵심인데, 위의 캐릭터 셋을 그지같이 해두면 나중에 곤란해진다.
- 무조건 한줄, 두 단어라도 반드시 필요하다
- 패스워드를어떻게 크랙할건가에 대한 정의를 하는 부분이다
패스워드 셋은 위의 캐릭터 셋의 문법과 거의똑같이 접목되며, 괄호 및 여러 특수문자를 사용하게 되므로 가독성이 많이 떨어질 수도 있다... 주석 필수
실질적으로 공격 코드를 짜기 전에, 알아야 할 내용이 있다.
제일 중요한 괄호부터 먼저 설명하겠다.
[ ] |
괄호 안에 있는 문자들 혹은 변수들을 대입하여 공격 |
{ } |
PCL 엔진으로 순열조합 등 괄호 내에 있는 문자를 적절히 조합해서 공격 |
( ) |
사전공격에 사용되는 옵션의 숫자 |
특수문자로는 *, . 이 있다.
*은 "~를 다 왼손으로 비비고 오른손으로 비벼서 계속 무한반복 해주세여"라는 의미이다.
.은 [ ]에만 쓰이지 않는데, 특정 기능의 옵션이라고 보면 된다.
이상 스피드웨건만도 못한놈의 설명이었는데, 직접 보면서 이해해보자.
1) 나는 a-z를 돌리고싶다. (a, b, c, d) ## $a 2) 나는 a-z까지 무한히 계속 돌리고싶다. (a, z, aa, zz, aaa, zzz ....) ## $a * 3) 나는 a-z, 0-9를 돌리고 싶다. (a, b, c, d ... , z, 0, 1, .... , 9) ## [$a $1] 4) 나는 a-z, 0-9를 무한히 계속 돌리고싶다. (a, a0, 0a, .... 000a, zaz000a 등) ## [$a $1] * 5) 나는 "Password"인건 얼추 기억 나는데 잘 모르겠다 (Password, Assword ... 등) ## {Password} 6) 나는 위의 방법과는 비슷하게, 순열조합을 2번 해서 돌리고싶다. ## {Password}.2 7) 나는 앞에 두글자는 a-Z, 뒤에 두글자는 0-9 + 특수문자를 돌리고싶다. ## [$a $A][$a $A][$! $1][$! $1] 8) 나는 0-9, A-F로만 무한히 돌리고싶다.
9) 나는 무조건 앞 5자리는 Mu1ti로 하고, 그 뒤로 10자리까지 a-Z를 돌리고싶다. min = 5 max = 10 ## Mu1ti [$a $A]* 10) 나는 대충 Mu ? 1 ? ti 인건 기억나지만 ?가 a-Z, 0-9,특수문자인걸로 기억한다 ## Mu [$a $A $1 $!] 1 [$a $A $1 $!] ti * |
다음은 사전공격이다.
단순히 사전에 있는 내용을 하나씩 대입하는 공격 자체는 단순하게 작성할 수 있다
//////////////////////파일 시작//////////////////////
$w = "C:\\dict.dict"
##
$w
///////////////////////파일 끝///////////////////////
근데 여기서, 추가적으로 사전공격시 사전 내의 내용을 세부적으로 까지는 아니지만,
그래도 어느정도 수정해가며 원하는 방식으로 공격할 수 있다.
사용방법은 다음과 같다.
$w = "???"
##
$w.?(n)
?에는 알파벳이 들어가며, 사전에 있는 내용에 대한 수정을 할 수 있는 플래그와 같다.
n에는 숫자가 들어가며, 위 옵션에서 설정에 사용되는 수이다. 이 수를
지정하지 않는다면 디폴트 수로 0이 들어간다.
알파벳과, 기능에 대해서는 다음과 같다.
u |
디폴트일 경우 전부 대문자로, 숫자가 주어질 경우 해당 자릿수만 대문자가 된다. |
l |
디폴트일 경우 전부 소문자로, 숫자가 주어질 경우 해당 자릿수만 소문자가 된다. |
t |
n번째 자리까지 잘라서 대입하는데, 디폴트 0일경우 아무것도 안나온다 ㅡㅡ;; |
c |
문자를 변환해주는데... 정확히 잘 모르겠다 ㅡㅡ;; |
j |
0일때 홀수 자릿수, 1일때 짝수, 2일때 모음 알파벳, 3일때 자음 알파벳을 대문자로 |
r |
문자열을 뒤집어서 대입시킨다 |
s |
e,i,o,u,y를 제외하고 대입시킨다(?) |
d |
해당 문자열을 복사하여 한번 더 대입시킨다. (a이면 aa, aaa이면 aaaaaa) |
옵션은 계속 이어붙일 수 있다.
$w.t(5).j(1).
이런식으로...
예를들어 앞에 3자리를 소문자로, 뒤에 3자리를 대문자로 하고싶을 경우
$w.u(-3).l(3) 을 주면 된다.
$w.u(-3).l(3).t(8).j(3) 이면
8글자까지 잘라서 앞뒤 3글자는 각각 소, 대문자이며 자음 알파벳을 모두 대문자로 만든다.
이상...
'개발 & 프로그래밍 > Etc.' 카테고리의 다른 글
C언어 진행상태(ProgressBar) 나타내기 (1) | 2016.05.12 |
---|---|
C언어 가상환경 탐지 함수 모음 (0) | 2016.04.27 |
IRC 서버 구축하기 (0) | 2016.04.22 |
안드로이드 와이파이 디버깅 (0) | 2016.01.11 |
Squid3 를 이용한 프록시서버 구축 (0) | 2015.12.02 |