1. Krypton5 목표
FA can break a known key length as well.
Lets try one last polyalphabetic cipher, but this time the key length is unknown.
Note: the text is writen in American English
Enjoy.
2. Krypton5 구현
# 비밀번호 root 입력 접속
ssh -oStrictHostKeyChecking=no root@localhost -p 2231
mkdir -p /krypton/krypton5
cat <<EOF | base64 --decode > /krypton/krypton5/found1
U1hVTFcgR05YSU8gV1JaSkcgT0ZMQ00gUkhFRlogQUxHU1AgRFhCTE0gUFdJUVQgWEpHTEEgUklZ
UkkgQkxQUEMgSE1YTUcgQ1RaREwgQ0xLUlUgWU1ZU0ogVFdVVFggWkNNUkggRUZaQUwgT1RNTkwg
QkxVTFYgTUNRTUcgQ1RaREwgQ1BUQkkgQVZQTUwgTlZSSk4gU1NYV1QgWEpHTEEgUklRUEUgRlVH
VlAgUEdSTEcgT01ES1cgUlNJRksgVFpZUk0gUUhOWEQgVU9XUVQgWEpHTEEgUklRQVYgVlRaVlAg
TE1BSVYgWlBIQ1ggRlBBVlQgTUxCU0QgT0lGVlQgUEJBQ1MgRVFLT0wgQkNSU00gQU1VTFAgU1BQ
WUYgQ1hPS0ggTFpYVU8gR05MSUQgWlZSQUwgRE9BQ0MgSU5SRU4gWU1MUkggVlhYSkQgWE1TSU4g
QlhVR0kgVVBWUkcgRVNRU0cgWUtRT0sgTE1YUlMgSUJaQUwgQkFZSk0gQVlBVkIgWFJTSUMgS0tQ
WUggVUxXRlUgWUhCUEcgVklHTlggV0JJUVAgUkdWWFkgU1NCRUwgTlpMVlcgSU1RTUcgWUdWU1cg
R1BXR0cgTkFSU1AgVFhWS0wgUFhXR0QgWFJKSFUgU1hRTUkgVlRaWU8gR0NUWlIgSllWQksgTVpI
QlggWVZCSVQgVFBWVE0gT09XU0EgSUVSVEEgU1pDT0kgVFhYTFkgSkFaUUMgR0tQQ1MgTFpSWUUg
TU9PVkMgSElFS1QgUlNSRUggTUdOVFMgS1ZFUE4gTkNUVU4gRU9GSVIgVFBQREwgWUFQTk8gR01L
R0MgWlJHTlggQVJWTVkgSUJMWFUgUVBZWUggR05YWU8gQUNDSU4gUUJVUUEgR0VMTlIgVFlRSUgg
TEFOVFcgSEFZQ1AgUkpPTU8gS0pZVFYgU0dWTFkgUlJTSUcgTktWWEkgTVFKRUcgR0pPTUwgTVNH
TlYgVkVSUkMgTVJZQkEgR0VRTlAgUkdLTEIgWEZMUlAgWFJaREUgSkVTR04gWFNZVkIgRFNTWkEg
TENYWUUgSUNYWFogT1ZUUFcgQkxFVksgWkNERUEgSllQQ0wgQ0RYVUcgTUFSTUwgUldWVFogTFhJ
UEwgUEpLS0wgQ0lSRVAgUkpZVkIgSVRQVlYgWlBIQ1ggRlBDUkcgS1ZQU1MgQ1BCWFcgVlhJUlMg
U0hZVFUgTldDR0kgQU5OVU4gVkNPRUEgSkxMRkkgTEVDU08gT0xDVEcgQ01HQVQgU0JJVFAgUE5a
QlYgWFdVUFYgUklIVU0gSUJQSEcgVVhVUVAgWVlITlogTU9LWEQgTFpCQUsgTE5UQ0MgTUJKVFog
S1hSU00gRlNLWkMgU1NFTFAgVU1BUkUgQkNJUEsgR0FWQ1kgRVhOT0cgTE5MQ0MgSlZCWEggWEhS
SEkgQVpCTEQgTFpXSUYgWVhLTE0gUEVMUUcgUlZQQUYgWlFOVksgVlpMQ0UgTVBWS1AgRkVSUE0g
QVpBTFYgTURQS0ggR0tLQ0wgWU9MUlggVFNOSUIgRUxSWU4gSVZNS1AgRUNWWEggQkVMTkkgT0VU
VVggU1NZR1YgVFpBUkUgUkxWRUcgR05PUUMgWVhGQ1ggWU9RWU8gSVNVS0EgUklRSEUgWVJIRFMg
UkVGVEIgTEVWWEggTVlFQUogUExDWEsgVFJGWlggWU9aQ1kgWFVLVlYgTU9KTFIgUk1BVkMgWEZM
SE8gS1hVVkUgR09TQVIgUkhCU1MgWUhRVVMgTFhTREogSU5YTEggUFhDQ1YgTlZJUFggS01GWFYg
WkxUT1cgUUxLUlkgVFpETEMgRFRWWEIgQUNTREUgTFZZT0wgQkNXUEUgRVJUWkQgVFlEWEYgQUlM
QlIgWUVZRUcgRVNJSEMgUU1QT1ggVURNTFogVlZNQlUgS1BHRUMgRUdJV08gSE1GWEcgTlhQQlcg
S1BWUlMgWFpDRUUgUFdWVE0gT09JWUMgWFVSUlYgQkhDQ1MgU0tPTFggWFFTRVEgUlRBT1AgV05T
WksgTVZETEMgUFJUUkIgWlJHUFogQUFHR0sgWklNQVAgUkxLVlcgRUFaUlQgWFhaQ1MgRE1WVlog
QlpSV1MgTU5SSU0gWlNSWVggSUVPVkggR0xHTkwgRlpLSFggS0NFU0UgS0VIREkgRkxaUlYgS1ZG
SUIgWFNFS0IgVFpTUEUgRUFaTVYgRExDU1kgWkdHWUsgR0NFTE4gVFRVSUcgTVhRSFQgQkpLWEcg
WlJGRVggQUJJQVAgTUlLV0EgUlZNRksgVUdHRlkgSlJTSVAgTkJKVUkgTERTU1ogQUxNU0EgVlBO
VFggSUJTTU8g
EOF
cat <<EOF | base64 --decode > /krypton/krypton5/found2
R0xDWVggVUtGSFMgUEVaWEYgQVZKT1cgUVFZWVIgUkFZSE0gR0lFT0cgQVJJQVogWUVZWFYgUFhG
UEogQlhYVVkgU0xFTFIgTlhITkggUExBUlggVEFETEMgQ1NMR0UgTk9TUFIgSVVVTUwgVlNOUFIg
UkpNT08gR01MR1UgSkhWQkUgUVNNRkkgTlpEU0sgSEVGTlggS1NIR0UgQVZaQVogWVFDUVAgQkFL
UEMgTE1RR1IgWFhUWVIgV1FTRUcgRkhTUEggWllFVFggRlBWTVggUEJUV1YgWE1MSE0gQVpYWUcg
RVFMUk4gSUFQT1ogQ1hJQVogTVZNU0wgUlZOWk4gU0tYQ0wgUk5KT0wgWFhTQ1MgSFlNWUsgWkNX
UFIgWE5XWVIgWkpYVUcgTUFTUUMgRUxSWFggREtXTVkgUExVR0wgS0hUUFIgR0FLVkUgV1JDRUkg
S0VTT1YgSlBKR0ggWEpZUkUgQ0VHQUUgSERJQlEgU0VaQUwgREFNWlggVUtLWlIgRUJNSVIgVExM
REggTUhSTlogTU9PTVAgQ0lGVlggSkRNVFAgVkJHV1ogU0hDT0kgRlpCVUsgWEdaUkYgWkFMV00g
Sk9JSkUgQlVDTUIgUFNTWkEgTE1TWU4gTEpPTU8gU1hRT0UgWlZUVU4gSEdDWEwgWU1ZS0EgR0VX
UU8gTEhRSUMgTEZZS0wgVE9QSkwgUlFPTVogWUZRTlkgRU9NRkcgRVFDRUcgTlhZVk0gSVBFWUcg
S05PVkIgWktYS0cgVU9QS0MgUEJYS0YgRExDQUUgRllYVVEgSVBETE4gUUJVUUwgR1hXUlIgWVZF
WE0gUU1HT0cgSlJFR1kgV0JMTEEgQkVVTFggTlRaU08gU0RETE4gTVpGR1YgWUFUUlggWVNLVE4g
VFJUTlQgQUtSQlggWVFKUlMgT0tRSEUgRlhUQVIgSVBXTVggS1RTS1YgRVBWRlUgS0FZSkIgWktH
TlggWU9BR1cgUE9LVFcgS0dJUFggR1VWSFYgRUdEWEIgU0hZQlMgVU9WTkMgWFlJSVEgRE1FT1kg
QVJJVVAgRUdOWFkgUlNKT1cgTlRXQVIgSVVUUlEgWVhBQ1ggTVdJRUcgVVNPSlkgVFZHTlggQVNI
Q0ggTVlSTEwgQlpDQVYgUlpNRlggTUFQUEwgR01ITFMgU0VYSlUgQlVETEMgTEpHS0sgVVlTTEQg
TUVIWEsgQ01QVFcgVUdFU1ggU1JSU0cgVVVMTlggR1dQQU8gWk9ERlMgRU1KR0cgQUtGQ08gVkJV
RkggWEhZTUUgRUhYWUsgUkJFTFIgVFVZT0UgSVFFRlogTFBCQ0MgRFdWWE0gT0tYVUwgQ0ZPS1Ag
UENNRlQgWUtUWk8gV0ZaQVAgVUdKWVYgQlJJQVogRUxXRUwgRFpOUkIgWk9FTE8gTEJaUEggRElQ
RVMgUFVHSlkgVkJBWVkgUkhNUEsgQ1lYWUsgRkhYV1ogWlNHWUIgVU1TTE4gU0VKUlYgRUFHV1Ag
U09HS0sgSkdZSUYgS1RKWUUgSlFNRUsgTFBCSkMgRUdVSFQgWUxJUEUgU1BVR0ogWVZCRFggVlhU
SVkgWVJFTFIgWFhVWUEgRFpWUFUgR0pZVkIgRUxSSUggVU1TUE8gRlJKVk8gS1FaUFYgT0tCVVEg
RUpIRUwgWVRaQ00gRVlJUVogSEhaRVEgRElBTVggWUxDUlMgSVpHQlMgS1JCQUUgRllYVVEgSVBE
RkwgWkFMV0UgR1dGUk8gR05LUFUgTENGTlggSEZNSkogQUVHSVcgT0hTQUogRVVGT08gRUJFU1Mg
VUhBREwgQ0NTQlMgQUhOWEYgUFNRSkIgVURJUFAgV0dMSFkgRExDUFcgR0dVU1MgV0ZYSUEgWkhN
REwgQ0NTTEcgRU5PU1AgUklHTlQgQUtQUlMgU0hNQUkgRVhNWUkgWE9HS1kgSktMUkogR0xaT0kg
TEVTVFUgQlVEU0cgRUVZUkQgUFhIUUwgUlFCVFkgU0lSVEkgRlVZVE8gUkFMUVIgVU5BWUogR0VH
QlQgTExBWUMgWVhZRVQgVVlYRlAgVlFYVEQgT1ZZWUggR0NIV1kgVlJQVkYgR0dLQ0kgVFBWTlIg
RkhTSFEgTFJRWkEgTFZFTE8gUE5KUkQgT1ZDTFAgWVJIUEQgSVBUUlQgSFJITUcgR09JQVogVEFG
RVAgVFNIWUkgVlNSUkQgU1NaQUwgQlNZT0YgUlpQTE8gUlJTSVAgVUdKWVYgQkxSUVogQUxNU0Qg
UUlSWEggVldBRlAgUk5NWFUgRFBDWEUgQVVZWlMgQlJKSkIgWEZIVlAgV09WUlkgTExOTUwgTEZF
VVAgVUNZR0UgU1NJRVYgRExDRFQgRUtNQUkgQUNXUEogVUtVTFkgUkdJRUUgUExWUEkgUFRHQ0Ig
QVJQWUMgS1JZSkIgS1ZDTlkgU0xMSFggSEpMVlQgS1lTS1QgUUVTR04gWFdZR0kgUFhGVlQgWkNJ
QkwgUEJUWlYgWExHREEgTkVNVlIgTVFNVlIgR0RNS1cgUg==
EOF
cat <<EOF | base64 --decode > /krypton/krypton5/found3
RklQSlMgRUpYWVYgQ1lZSFogS01PWUggR05FWU4gWFNZU0kgUEhKT00gT0tMWVkgSEJUWEggTUxJ
WUkgUkdHS0sgUE1GSEogR01KUlggR05PVlQgWkhDU0wgWlZCQUwgWk9WS1ogUkhUV0wgQkxHREog
WUdJV08gSFVMTUYgWlZWS1ggWURYVVUgTk5STVIgQU1HWlggS1NYUVIgVk5CQkEgSUVMT1AgQlRa
TEYgTVJKRVQgR0JVQ1ggUlNJWUsgT1BEQ1kgWUhSQlQgVU9XQVAgUlBLSE0gRExDTVYgVllETVMg
VkNTSVUgR1dIUVMgTU9QUk0gVFVOQVkgREVZT00gQVZJVEwgTUFVWVAgREpNQ0wgVllVWVkgQUxE
WEIgSURQWEsgUVFNR1ogWEtDUEMgUE9OVFcgSlZTUVAgRUFKUEwgQklNUUUgU09HTEQgSVZFWUUg
S0FQQ1cgRlpJRkcgR0tMWUEgVlBSWU0gVllYRlogWVROSVMgS01MSEkgRUtNWVMgUUZQQUIgWFhI
WFMgQk9QVlogTVNPV0ogUElYSUsgUENURFcgRUtLR0QgU0tRUFggR09HTkYgSVBKR1kgVUxMRFMg
RlRXVUsgVEtHTEcgTkxKT1ogUERNUUUgU09LSVkgT1dTWEkgUUNUWlcgRUJQU1MgTlRQQkYgU0VB
VU8gVk9WU00gVklRTFQgWVdTUFAgRUZaQVYgRUtGVFggSktLTEMgVFNZSkUgVUZNU1AgWVhJQVog
TFZQV0cgV09CWFogU0tXUVMgTUZSQlUgT1JSU1MgSE1BVVkgWE1RRVMgT0dMWEkgUURNQUcgVkpZ
VkIgTFJQS1AgUERMRlQgV0ZaSEogVU1MUlcgSkdMSEMgQUZUWFIgR0xBUkkgUlpURlUgWUFSSVUg
TFpSWU0gT0tYWkMgU1hLTlcgWVJSU0kgQUtCTlIgRk1GVlYgVFpJT0UgQVNTRVogQUxDVEMgTk9G
VVkgWktNSkUgTE5aWlMgU1JSUEggVlRNT08gV1NZUFYgTUFBUEUgUExYRksgVEhQRUEgUExOSEIg
QUVFSlcgQ0ZBSVcgQklRREkgUUdHS0EgWUdQWFIgSlBIQ1cgUlRQWVIgQk5SWEMgT1lDQUcgS09W
UlMgSURBVFAgWFhVVEsgT0VUV0sgTVBaSlogVUJaREYgUFRLVVogWEZPV1IgU0VHT00gVEVXUlMg
RUlLVlYgQ1hSU0kgVlhIRFggSVBUUkwgS1RZQ0sgTVlJT0UgTFZXSU4gTE1BWU0gVk5WR1cgUEdV
TU8gT0dNWFQgQllYS0sgUkJDSUYgS0tDT0ggQ0lURUsgTFpTU0wgWkpHS0UgU0NTTEQgRk5URE8g
T0xZT0UgVUtUU0QgTFdOU1kgVU5ZU1IgRlRXUE4gWExVV1kgWUhVT0wgTUtHQ0UgTEJBWk8gVk1M
UEggT1VLTFAgSVVFVk4gSVhaWUogWVlCVksgTUZMWVIgQUlFTlQgV0NYRlAgR0JUWVAgTklMRU0g
TlJVSE0gTENXU0UgSUVMQk8gUVRSR0sgRVNDU0wgREZOVEQgRE9WQ0EgVlZUVlAgWkVKV0MgQklW
QlogTUNPQVYgWkFBUkkgQUxWUlkgSE1ZWEYgUFZDS0ggV1ZJWVkgSENLS08gS1RRREkgUFVHS1Ig
RUxPR04gWFhaVk0gSVBXUkkgSFVOTFkgWUhQUkggQVJJUU4gU1pLWEggQ01KSlMgU0xUVU4gU0xO
U1ogVkVMRE0gTFJMVlkgS0xDSUsgTVBOVFYgTERTWVggRUFDQVYgR0VRRE0gR1pCVVEgSk1DTFYg
WUlWQlggUExNR1MgS1NZVlAgSkhFVUkgV09ITVEgSkdVTFMgT0lORUwgUkdLWVMgWllXU1MgTkJa
TFYgQ0xPU0cgTEFCU1MgRElRTkIgVEtSQlMgSUZHQksgRFNSU0kgUVhURE8gVllETFIgU0hDT0gg
RlRXUE4gVFBCWE0gVFhWQ0IgWlJFQU4gU1pTSEsgS1hHWlIgQ1hYV0sgVkNPSkIgWFRGWVkgTFJQ
TkogUkRSU0sgTENQVUYgTFJJUFAgRUdHR0YgRE1LUFggQkpURkMgTENYRUwgR0xSUFMgUFhWV0cg
S0NTV0ogWlZFRUggWUNMQ1ggRUxVR1MgSUVRVkogQlhUTk8gUlJXSVogR0dNQlMgS0VJWVIgTFZY
V1ogTFJYVkUgTEtXQ0UgU1lLTVQgT09MWkEgTEtMWlMgVlJQUFkgWUhVQ0YgWVlPVlQgRVZYSE0g
WVdWWFIgTENDQ0QgV1ZYUEwgUkVUUFMgU1pYVUQgTUtQV0cgTlhPWVIgTUZWR1UgWFVESVAgRUVW
VFIgVkVWRVAgUkdSWFQgT1JHWVggVUtCWUQgVllHSVkgUkJVUUYgWU5PSkcgS0tDRUwgT0pCWFAg
SEJIUU0gSUdDQkUgRFBNWUggQlRUVU4gVFlDTUYgWUJZS1ogWURYUUsgVFNZSlIgQ0VJS0UgU1NS
RUQgTUVPR0EgT1BKRFMgQUdHS00gU0tBRUEgRUxPWVkgUVBDUlkgUExLVkMgQllWWlggSFBWQ1kg
R1VOSEIgQ0lZREEgUlJFSEMgRUxQUlQgUkJaUlMgTFBDUlkgTFBCUk0gRVFISUEgUFhYRlAgTE5I
QkEgWUpRRkcgVVpLSEYgSUpXTUEgTVJWRVYgUVBQU08gTU9TUkkgRE1FVEggQVlKSkwgWFJFWEgg
QldHRU0gRkxCTUQgSUNZQ1IgR0taQ00gTE5JSksgTFBYR0MgVEdOU1ggU0tXUlEgVkJTWVkgS1JB
UA==
EOF
echo QkVMT1MgWg== | base64 -d > /krypton/krypton5/krypton6
cat <<'EOF' > /krypton/krypton5/README
Frequency analysis can break a known key length as well. Lets try one
last polyalphabetic cipher, but this time the key length is unknown.
Enjoy.
EOF
chown krypton5:krypton5 /krypton/krypton5/*
chmod 640 /krypton/krypton5/*
# krypton6 유저를 생성하여 준다.
useradd krypton6 && echo -e "RANDOM\nRANDOM" | passwd krypton6
echo 'RANDOM' > /etc/krypton_pass/krypton6
chown krypton6:krypton6 /etc/krypton_pass/krypton6
chmod 400 /etc/krypton_pass/krypton6
3. Krypton5 문제풀의
# 비밀번호 : CLEARTEXT
# ssh krypton5@krypton.labs.overthewire.org -p 2231
ssh krypton5@localhost -p 2231
# 중복되는 3자릿수 문자열과 갯수를 순서대로 10개까지 나열
# ZAL, DLC, GNX, ARI, RSI 확인
cat /krypton/krypton5/found1 /krypton/krypton5/found2 /krypton/krypton5/found3 | tr -d ' ' | awk '{
for (i=1; i<=length($0)-2; i++) {
seq = substr($0, i, 3);
count[seq]++;
}
}
END {
for (seq in count) {
if (count[seq] >= 2) {
print seq, count[seq];
}
}
}' | sort -k2,2nr | head -10
# 가장 많이 겹치는 단어의 위치 확인
cat /krypton/krypton5/found1 | tr -d ' ' | grep -o -b "ZAL"
# 각각의 거리의 최대공약수를 구하면 예상 길이를 확인 가능
# 길이는 9의 약수로 예상가능
# 길이를 9라고 가정
cat /krypton/krypton5/found1 | tr -d ' ' | grep -o -b "ZAL" | awk -F ':' '{ print $1 }' | awk 'NR==1 { prev=$1; next } { print $1 - prev; prev=$1 }';
cat /krypton/krypton5/found2 | tr -d ' ' | grep -o -b "ZAL" | awk -F ':' '{ print $1 }' | awk 'NR==1 { prev=$1; next } { print $1 - prev; prev=$1 }';
cat /krypton/krypton5/found3 | tr -d ' ' | grep -o -b "ZAL" | awk -F ':' '{ print $1 }' | awk 'NR==1 { prev=$1; next } { print $1 - prev; prev=$1 }';
# /krypton/krypton5/found1 내용을 9개씩 짜르고 ZAL문자열을 하이라이팅
cat /krypton/krypton5/found1 | tr -d ' ' | sed 's/.\{9\}/&\n/g' | sed 's/ZAL/\x1b[31m&\x1b[0m/g'
# ZAL문자열 확인
cat /krypton/krypton5/found1 | tr -d ' ' | sed 's/.\{9\}/&\n/g' | grep ZAL
# A B C D E F G H I J
# 0 1 2 3 4 5 6 7 8 9
# K L M N O P Q R S T
# 10 11 12 13 14 15 16 17 18 19
# U V W X Y Z
# 20 21 22 23 24 25
# (encrypt - decrypt + 26) mod 26 = KEY_VAL
# ZAL -> THE가 된다고 가정
# (Z(25) - T(19) + 26) mod 26 = KEY_VAL
# KEY_VAL = G
echo Z | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 19 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (A(0) - H(7) + 26) mod 26 = KEY_VAL
# KEY_VAL = T
echo A | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 7 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (L(11) - E(4) + 26) mod 26 = KEY_VAL
# KEY_VAL = H
echo L | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 4 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# 잘 적용되었는지 확인
cat /krypton/krypton5/found1 | tr -d ' ' | awk -v key="AAAAAAGTH" '{
for (i=1; i<=length($0); i++) {
c=substr($0, i, 1);
k=substr(key, (i-1) % length(key) + 1, 1);
c_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(c)) - 1;
k_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(k)) - 1;
printf "%c", ((c_index - k_index + 26) % 26) + 65;
}
printf "\n";
}' | grep THE
# DLC문자열 확인
cat /krypton/krypton5/found1 | tr -d ' ' | sed 's/.\{9\}/&\n/g' | grep DLC
# DLC -> THE가 된다고 가정
# (D(3) - T(19) + 26) mod 26 = KEY_VAL
# KEY_VAL = K
echo D | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 19 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (L(11) - H(7) + 26) mod 26 = KEY_VAL
# KEY_VAL = E
echo L | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 7 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (C(2) - E(4) + 26) mod 26 = KEY_VAL
# KEY_VAL = Y
echo C | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 4 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# GNX문자열 확인
cat /krypton/krypton5/found1 | tr -d ' ' | sed 's/.\{9\}/&\n/g' | grep GNX
# GNX -> THE가 된다고 가정
# (G(6) - T(19) + 26) mod 26 = KEY_VAL
# KEY_VAL = N
echo G | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 19 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (N(13) - H(7) + 26) mod 26 = KEY_VAL
# KEY_VAL = G
echo N | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 7 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (X(23) - E(4) + 26) mod 26 = KEY_VAL
# KEY_VAL = T
echo X | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 4 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# 해당 내용 첫 문장을 확인하면 ITWLWTHEBEST => IT WLW THE BEST
# 즉 WLW가 WAS가 됨을 유추 가능
# ULW -> WAS
cat /krypton/krypton5/found1 | tr -d ' ' | awk -v key="KEYAANGTH" '{
for (i=1; i<=length($0); i++) {
c=substr($0, i, 1);
k=substr(key, (i-1) % length(key) + 1, 1);
c_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(c)) - 1;
k_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(k)) - 1;
printf "%c", ((c_index - k_index + 26) % 26) + 65;
}
printf "\n";
}'
# (U(20) - W(22) + 26) mod 26 = KEY_VAL
# KEY_VAL = Y
echo U | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 22 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (L(11) - A(0) + 26) mod 26 = KEY_VAL
# KEY_VAL = Y
echo L | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 0 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# (W(22) - S(18) + 26) mod 26 = KEY_VAL
# KEY_VAL = Y
echo W | awk '{print index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper($0))-1}' | xargs -I {} awk "BEGIN {print ({} - 18 + 26) % 26}" | awk '{printf "%c\n", $1 + 65}'
# 복호화 내용 확인
cat /krypton/krypton5/found1 | tr -d ' ' | awk -v key="KEYLENGTH" '{
for (i=1; i<=length($0); i++) {
c=substr($0, i, 1);
k=substr(key, (i-1) % length(key) + 1, 1);
c_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(c)) - 1;
k_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(k)) - 1;
printf "%c", ((c_index - k_index + 26) % 26) + 65;
}
printf "\n";
}'
# password : RANDOM
cat /krypton/krypton5/krypton6 | tr -d ' ' | awk -v key="KEYLENGTH" '{
for (i=1; i<=length($0); i++) {
c=substr($0, i, 1);
k=substr(key, (i-1) % length(key) + 1, 1);
c_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(c)) - 1;
k_index = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", toupper(k)) - 1;
printf "%c", ((c_index - k_index + 26) % 26) + 65;
}
printf "\n";
}'
'Wargame > Krypton' 카테고리의 다른 글
[ Docker ] Krypton Wargame 만들기 - 6번 문제 ( 8 / 8 ) (0) | 2024.09.23 |
---|---|
[ Docker ] Krypton Wargame 만들기 - 4번 문제 ( 6 / 8 ) (0) | 2024.09.23 |
[ Docker ] Krypton Wargame 만들기 - 3번 문제 ( 5 / 8 ) (0) | 2024.09.23 |
[ Docker ] Krypton Wargame 만들기 - 2번 문제 ( 4 / 8 ) (0) | 2024.09.23 |
[ Docker ] Krypton Wargame 만들기 - 1번 문제 ( 3 / 8 ) (0) | 2024.09.23 |