以下のファイルが与えられた。
These files were given:
davecrypt.js
flag.txt
q2_report.txt
shareholder_meeting_script.txt
davecrypt.js
は、JavaScriptによる暗号化プログラムのようだった。
また、flag.txt
の冒頭部分は、以下のようになっていた。
davecrypt.js
looked like an encryption program written in JavaScript.
Also, the first part of flag.txt
was:
だいたい2バイトごとに c
で始まるバイトがあり、その中に 6c
など 0x80
未満のバイトが混ざっていることから、
flag.txt
はUTF-8として解釈できそうだと推測した。
また、davecrypt.js
は乱数や時刻を用いた処理を行う行を含むが、よく見るとこれらの行は復号代入演算子の右辺が常にゼロとなり、無視できることがわかる。
そこで、davecrypt.js
のそれぞれの行に相当する処理を考え、
なお、入力の各要素は 0xff
以下であると仮定した。
There are bytes beginning with c
in about each 2 bytes. Also there are bytes less than 0x80
such as 6c
.
Therefore, I guessed that flag.txt
can be decoded as UTF-8.
Also, davecrypt.js
contains lines that uses random numbers and date,
but I found that the lines can be ignored because the right-hand side of the compound assignment operators are always zero.
Based on these, I determined formulas corresponding to each lines of davecrypt.js
and created this program to obtain the input using
Also note that I assumed that each elements of the input are 0xff
or less.
このプログラムを用いて flag.txt
に対応する入力を求めると、flagのような文字列を含む内容が得られた。
この文字列から問題文の指示に従って '
を削除することで、flagが得られた。
Using this program, I determined the input corresponding to flag.txt
. The result contained a string that looks like the flag.
I obtained the flag by removing '
from the string as requested in the challenge description.