Open Sesame (100)

ファイル sesame.pyc が与えられた。

まず、.pyc ファイルの逆アセンブル方法を Perplexity AI に聞いてみた。

A file sesame.pyc was given.

Firstly I asked how to disassemble .pyc files to Perplexity AI.

Perplexity AI: How to disassemble .pyc files?

その結果を参考に、以下のコマンドで解析を行った。

According to the result, I performed an analysis using these commands.

virtualenv ve ve\Scripts\activate.bat pip install uncompyle6 uncompyle6 data\sesame.pyc > sesame-uncompyle6.txt

以下の結果が得られた。

Ths is the result.

sesame-uncompyle6.txt

入力した文字列の文字コードを縦ベクトルとして gencave 関数が返す行列とかけ合わせ、結果が DOOR_SHAPE と一致するかをチェックしているようである。
しかし、この gencave 関数は、ループの条件である cave を書き換えるコードが for p in ps: の中にしか無く、
ps が空であるためこの中は実行されないので、無限ループとなっている。

gencave 関数の処理は素数を列挙する処理に似ているようだったので、素数を列挙するように修正し、掛けた結果が DOOR_SHAPE になるベクトルをガウスの消去法で求める以下のプログラムを作成した。

This code multiplies the character codes of the entered string as a column vector with a matrix returned from the gencave function, and checks if the product equals to DOOR_SHAPE.
However, the gencave function performs an infinite loop because cave, used in the loop condition, is modified only inside for p in ps:,
and the inner part won't be executed because the list ps is empty.

The function looked similar to a program that enumerates prime numbers, so I adjusted that to enumerate prime numbers, and wrote this program to calculate a vector multiplying that yields DOOR_SHAPE using Gaussian elimination.

gauss.py

このプログラムによりflagが得られた。

I obtained the flag from this program.

sdctf{0p3n_s3sAm3_bUt_1n_l337Sp3aK!}

SDCTF 2023