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로만 무한히 돌리고싶다.

$i = [ABCDEF]


##


[$i $1] *

##


[ABCDEF $1] *


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글자는 각각 소, 대문자이며 자음 알파벳을 모두 대문자로 만든다.


이상...

+ Recent posts