Dcbuarc fa UjedUFG!!! Ujed to e jiaqierrtpq utiubc dtfl eiawpz fdcpfm rcrscio. Dc repeqc e jcirepcpf UFG otfc (lffjo://ufg.ujed.otfc/). Hcic dc lehc oarc ceom UFG xwcoftapo. Tg maw eic e UFG scqtppci, maw olawbz jieuftuc ap flto otfc :) Al! Maw oabhcz flto otrjbc owsoftfwftap utjlci!!! AN... T'bb qthc maw flc Gbeq. Flc Gbeq to flc ftfbc ag flto xwcoftap! YZ Swf tf to e utjlci fcyf faa... aiv Zcuimjf tf epz zcbcfc dltfc ojeuc.
gabbad flto gairef Ujed{Gbeq}
既に暗号化されていた
lffjo → https
UjedUFG → CpawCTF
このように少しずつ英文法をみていくと1文字ずつなんとなく復号できます
置換するスクリプト
let inputText = "Dcbuarc fa UjedUFG!!! Ujed to e jiaqierrtpq utiubc dtfl eiawpz fdcpfm rcrscio. Dc repeqc e jcirepcpf UFG otfc (lffjo://ufg.ujed.otfc/). Hcic dc lehc oarc ceom UFG xwcoftapo. Tg maw eic e UFG scqtppci, maw olawbz jieuftuc ap flto otfc :) Al! Maw oabhcz flto otrjbc owsoftfwftap utjlci!!! AN... T'bb qthc maw flc Gbeq. Flc Gbeq to flc ftfbc ag flto xwcoftap! YZ Swf tf to e utjlci fcyf faa... aiv Zcuimjf tf epz zcbcfc dltfc ojeuc.";
function replaceText(text) {
const replacements = {
c: 'e',
d: 'w',
e: 'a',
f: 't',
g: 'f',
j: 'p',
l: 'h',
i: 'r',
o: 's',
t: 'i',
y: 'x',
z: 'D',
m: 'y',
b: 'l',
a: 'o',
r: 'm',
p: 'n',
q: 'g',
s: 'b',
x: 'q',
w: 'u',
n: 'k',
u: 'c',
};
return text.split('').map(char => {
if (char.match(/\s|[.,;:'"!?@#$%^&*()\-_+=<>{}[\]~`]\//)) {
return char; // 空白や記号はそのまま残す
}
let lowerChar = char.toLowerCase();
return replacements[lowerChar] ? (char === lowerChar ? replacements[lowerChar] : replacements[lowerChar].toUpperCase()) : char;
}).join('');
}
let outputText = replaceText(inputText);
console.log(outputText);
翻訳すると
CpawCTFへようこそ! Cpaw はメンバー約 20 名が所属するプログラミング サークルです。 常設CTFサイト(https://ctf.cpaw.site/)を運営しております。 簡単な CTF の質問があります。 CTF の初心者の方は、このサイトで練習してください :) ああ! この単純な置換暗号を解決しました!!! OK...フラグをあげます。 フラグはこの質問のタイトルです。 XD でもこれも暗号文です...orz 復号化して空白を削除してください。 この形式に従います Cpaw{Flag}
↓変換すると
ok onomiyaki
コメント