■問題
Here's a file that was recovered from a 32-bits system that organized the bytes a weird way. We're not even sure what type of file it is. Download it here and see what you can get out of it
こちらは32ビットシステムから復元されたファイルです。このシステムは独特な方法でバイトを整理していたため、このファイルがどのような形式かも確かではありません。このファイルをダウンロードして、調べてみてください。
■解き方
①ファイルの内容を確認する。
exiftoolではJPEGというキーワードが出力された。
fileで確認するとdataと出力されたため、データがばらばらになっていることがわかる。
※dataの場合、ファイルの形式が不明、もしくは特定の形式として認識できないものを表す。
②endianness-v2という問題分を改めて確認する
エンディアンは、コンピュータがデータをメモリに格納する際のバイトの順序を指す。具体的には、ビッグエンディアンとリトルエンディアンの2つの形式がある。
ビッグエンディアン(Big Endian)
上位バイト(最も大きな値のバイト)を先に、下位バイトを後に格納する形式
16進数のデータ 0x1234 をメモリに格納する場合、ビッグエンディアンでは 12 34 の順になる。
ネットワークプロトコルや一部のアーキテクチャはビッグエンディアンを採用している。
リトルエンディアン(Little Endian)
下位バイトを先に、上位バイトを後に格納する形式
0x1234 は、リトルエンディアンでは 34 12 として格納される。
多くのPCアーキテクチャ(Intel x86、x86_64など)で使用される方式
③32ビットシステムでは4バイトが1つのまとまりで操作されるため、
4バイト単位でエンディアン変換を行ってみる
※CyberChefを使用
Inputにファイルをアップロードして
Opetationsから「To Hex」「Swap endianness」「Render Image」
をRecipeにドラッグする。
To Hexで16進数に変換させ、Swap endiannessで4バイト単位でエンディアンを並び替える。Remder Imageでフラグの画像を表示させる。