1. 파일 위치 및 기본 설정
1.1 주요 설정 파일 위치
/etc/john/john.conf
/usr/share/john/john.conf
/etc/john/john.conf
/usr/local/etc/john/john.conf
/usr/local/share/john/john.conf
./john.conf (실행 디렉토리)
~/.john/john.local.conf
./john.local.conf
1.2 설정 파일 우선순위
1. ~/.john/john.local.conf (개인 설정)
2. ./john.local.conf (현재 디렉토리)
3. ./john.conf (현재 디렉토리)
4. $JOHN_CONF 환경변수 지정 파일
5. /etc/john/john.conf (시스템 설정)
1.3 설정 파일 구조 확인
john --list=conf
john --list=rules
john --list=rules:rulename
2. 맹글링 규칙 기본 문법
2.1 기본 규칙 구조
[List.Rules:RuleName]
# 주석 - 규칙 설명
: # 단일 규칙 (아무 변경 없음)
c # 첫글자 대문자
u # 모든 글자 대문자
l # 모든 글자 소문자
2.2 위치 지정자
# 위치 지정
^ # 맨 앞
$ # 맨 뒤
[0-9] # 특정 위치 (0부터 시작)
# 예시
^A # 맨 앞에 'A' 추가
$1 # 맨 뒤에 '1' 추가
]1 # 두 번째 위치에 '1' 삽입
2.3 문자 조작 명령어
# 삽입 (Insert)
i[pos][char] # 특정 위치에 문자 삽입
^[char] # 맨 앞 삽입
$[char] # 맨 뒤 삽입
# 추가 (Append) - $ 사용
$[char] # 맨 뒤에 문자 추가
# 앞에 추가 (Prepend) - ^ 사용
^[char] # 맨 앞에 문자 추가
# 삭제 (Delete)
D[pos] # 특정 위치 문자 삭제
[ # 첫 번째 문자 삭제
] # 마지막 문자 삭제
# 치환 (Substitute)
s[old][new] # 모든 old를 new로 치환
s[pos][new] # 특정 위치 문자를 new로 치환
3. 고급 맹글링 규칙
3.1 대소문자 변환
[List.Rules:CaseRules]
# 기본 대소문자 규칙
: # 원본 그대로
c # 첫글자만 대문자 (Capitalize)
C # 첫글자만 소문자, 나머지 대문자
t # 대소문자 토글 (Toggle)
TN # N번째 문자 토글 (T0, T1, T2...)
u # 모든 문자 대문자
l # 모든 문자 소문자
3.2 숫자 추가 규칙
[List.Rules:NumberRules]
# 연도 추가
$2$0$2$4 # 2024 추가
$2$0$2$3 # 2023 추가
$2$0$2$2 # 2022 추가
$1$9$9$0 # 1990 추가
# 일반적인 숫자
$1 # 1 추가
$1$2 # 12 추가
$1$2$3 # 123 추가
$0$1 # 01 추가
# 앞에 숫자 추가
^1 # 앞에 1 추가
^1^2^3 # 앞에 321 추가 (역순)
3.3 특수문자 규칙
[List.Rules:SpecialRules]
# 일반적인 특수문자
$! # 느낌표 추가
$@ # @ 추가
$# # # 추가
$$ # $ 추가 ($ 자체는 \$ 또는 $$로 표현)
$% # % 추가
$* # * 추가
# 복합 특수문자
$!$1 # !1 추가
$@$2$0$2$4 # @2024 추가
3.4 단어 변환 규칙
[List.Rules:WordPlay]
# 일반적인 문자 치환
sa@ # a를 @로 치환
se3 # e를 3으로 치환
si1 # i를 1로 치환
so0 # o를 0으로 치환
ss$ # s를 $로 치환
st+ # t를 +로 치환
# 복합 치환
sa@se3 # a를 @로, e를 3으로
so0si1 # o를 0으로, i를 1로
4. 조건부 규칙 (Conditional Rules)
4.1 길이 조건
[List.Rules:LengthRules]
# 길이가 N 이상일 때만 적용
>4 $1 # 5글자 이상이면 1 추가
>6 $1$2 # 7글자 이상이면 12 추가
<8 ^A # 8글자 미만이면 앞에 A 추가
4.2 문자 존재 조건
[List.Rules:ConditionalRules]
# 특정 문자가 있을 때
/[aeiou] u # 모음이 있으면 모두 대문자로
/[0-9] c # 숫자가 있으면 첫글자 대문자
![0-9] $1 # 숫자가 없으면 1 추가
# 특정 위치에 특정 문자가 있을 때
%0a c # 첫 번째가 'a'면 첫글자 대문자
%1[0-9] ] # 두 번째가 숫자면 마지막 문자 삭제
4.3 복잡한 조건
[List.Rules:ComplexRules]
# 첫 글자가 소문자이고 길이가 6 이상일 때
%0[a-z] >5 c $1
# 마지막이 문자이고 숫자가 없을 때
%r[a-z] ![0-9] $2$0$2$4
# 모음으로 시작하고 8글자 미만일 때
%0[aeiou] <8 ^P
5. 실전 맹글링 규칙 세트
5.1 한국어 환경 최적화 규칙
[List.Rules:Korean]
# 한국어 일반 패턴
: # 원본
c # Password -> Password
$! # password!
$1 # password1
$2$0$2$4 # password2024
$1$2$3 # password123
^P # Ppassword
# 한국 기업 패턴
$@ # password@
$!$@ # password!@
$1$2$3$4 # password1234
c$1$2$3$4 # Password1234
5.2 글로벌 공통 패턴
[List.Rules:Global]
# 전세계 공통 패턴
$1 # +1
$1$2 # +12
$1$2$3 # +123
$0$1 # +01
$2$0$2$4 # +2024
$2$0$2$3 # +2023
# 대소문자 변형
c # Capitalize
c$1 # Capital+1
c$1$2$3 # Capital+123
5.3 기업 환경 특화 규칙
[List.Rules:Corporate]
# 기업용 패턴
: # 원본
c # 첫글자 대문자
c$2$0$2$4 # Company2024
c$! # Company!
$@$c$o$m # @com 추가
se3si1so0 # 문자 치환
c$1$2$3$4 # Company1234
# 계절 패턴
$S$p$r$i$n$g # Spring 추가
$S$u$m$m$e$r # Summer 추가
$W$i$n$t$e$r # Winter 추가
$F$a$l$l # Fall 추가
6. 명령어 옵션 및 사용법
6.1 기본 실행 명령어
john --rules=rulename hashfile.txt
john --rules=rule1,rule2,rule3 hashfile.txt
john --rules hashfile.txt
john --stdout --rules=rulename | head -20
6.2 고급 옵션
john --wordlist=passwords.txt --rules=Korean hashfile.txt
john --stdout --wordlist=base.txt --rules=Custom
john --rules=Korean --session=mysession hashfile.txt
john --restore=mysession
john --fork=8 --rules=Korean hashfile.txt
john --max-run-time=3600 --rules=Korean hashfile.txt
6.3 성능 최적화 옵션
john --mem-file-size=1024 --rules=Korean hashfile.txt
john --batch-size=100000 --rules=Korean hashfile.txt
nice -n 19 john --rules=Korean hashfile.txt
7. 커스텀 규칙 작성 예시
7.1 완전한 커스텀 규칙 파일
# ~/.john/john.local.conf 또는 ./custom.conf
[List.Rules:MyCustomRules]
# 기본 패턴
:
c
u
l
# 숫자 패턴
$1
$1$2
$1$2$3
$2$0$2$4
$2$0$2$3
# 특수문자 패턴
$!
$@
$#
$!$@
$@$!
# 복합 패턴
c$1
c$1$2$3
c$!
c$@$2$0$2$4
# 치환 패턴
sa@
se3
si1
so0
sa@se3
so0si1
# 조건부 패턴
>6 $1$2$3
<5 ^A
/[0-9] $!
![a-z] l$1
7.2 업계별 특화 규칙
[List.Rules:Finance]
# 금융업계 패턴
$B$a$n$k # Bank 추가
$2$0$2$4$! # 2024! 추가
c$F$i$n # 첫글자 대문자 + Fin
$M$o$n$e$y # Money 추가
[List.Rules:IT]
# IT업계 패턴
$A$d$m$i$n # Admin 추가
$R$o$o$t # Root 추가
$1$2$7$.$0$.$0$.$1 # 127.0.0.1 패턴
$S$e$r$v$e$r # Server 추가
8. 주의사항 및 팁
8.1 성능 최적화 팁
[List.Rules:Optimized]
:
c
$1
...
8.2 보안 주의사항
chmod 600 hashfile.txt
chown root:root hashfile.txt
john --pot=secure.pot
chmod 600 john.pot
john --log-stderr
8.3 실무 활용 팁
john --show hashfile.txt
8.4 문제 해결
john --test --rules=MyRules
john --mem-usage --rules=MyRules
john --list=rules:MyRules
john --verbosity=5 --rules=MyRules hashfile.txt
9. 실제 사용 시나리오
9.1 시나리오 1: 기업 내부 감사
john --rules=Corporate hashfile.txt --session=corp1
echo "CompanyName" | john --stdin --rules=MyCustom hashfile.txt
john --wordlist=employee_names.txt --rules=PersonalInfo hashfile.txt
9.2 시나리오 2: 일반적인 패스워드 크랙
john --wordlist=rockyou.txt --rules=Simple hashfile.txt
john --wordlist=common_passwords.txt --rules=Extended hashfile.txt
john --wordlist=korean_words.txt --rules=Korean hashfile.txt