[2019]西NETWORK CHANNELカップのオンラインゲームWPセクションのタイトル

あまりにも料理はこれだけ国に第九を襲ったので...

しかし、半分の時間AKが本当に暗号である[剥き出しの歯]

レポートを解決Dawn_whisper_

MISC

アンケート

簡単に取得するにはフィルフラグを埋めることができます...

HiddenImage

画像「を通じて」見て、フラグを取得します。

説明憶測は、バンドルされたドキュメントを参照して受けることができ

Ubuntuの下に入ることを約Binwalk:

 

そして、我々は確かにzipファイルがあることがわかりました。

まず、gotflag.jpg取得

 

 

オープニングフラグが見つからないされた後の画像に表示され、その後、010エディタで尾を見るためにファイルを開いて、

 

この不審なコーディングを参照してください。

 

OK、フラグを取得します。

暗号

RSA

ファイルのダウンロード

 

面白い-RSA!あなたはそれがステップバイステップで、適切に検索エンジンを使用してください終えることができました!

ヒンティングと、この問題で見つかったコードを段階的に与えられている参照してくださいので、私たちは、ステップバイステップの復号を必要としています。

パート1:

 

先端非常に親密な、C1 P1は、暗号化により得られたE = 3を参照して、N、Pを得3の電源に直接開放するC Cよりもはるかに大きくなっています。

その2:

 

私は、このセクションでは、pとq上の任意の効果を持って知っているので、スキップしていない長い時間を見ました。

FRT3:

 

そして、第1報QとしてC3は、暗号化することによって得られるので、アーティファクトが邪魔さdに関する要件を爆発について、私たちは、nました:

 

図に示すように、データの一部が使用可能になりました。

その4:

 

同様に、flag_cフラグが暗号化されているので、あなたが書いて実行するスクリプトを書くことができます。

 

 

 

直接ASCIIコードに変換

 

旗の手!

それを解読!

(エスケープ私は面食らったタイトルを取得するためのコード正直に言うと、

 

私はショックを受けたコードの165行

しかし、問題の人々は本当に良心、非常に詳細に書かれたすべてのコメントは(も非常に明確に答弁書を計算して)、または私は約半分の時間でなければならないと思います。

騒ぎ、コードの最初の分析:

奇妙なコードのキキの多くは、上記の非常に、トピックの重要な部分と非常に明確な対象者(あまりにも良心ああフィードを)理解していません

 

機能の一つ、行列乗算(私が書く準備ができていたゲームは、後で2333を有することが判明)

上読みます:

 

それほど明白基本フォーマットは、左と右の行列は逆行列している推測して、しかし最後のトピックは、(あまりにも良心ああフィード)のヒントを与えました:

 

さて、これらの無用を引っ張っていない、我々は、アルゴリズムのコアを参照してください。

暗号化機能の暗号化

 

(このコメントは、あまりにもそれを詳細に、これはああの数を減らすことの難しさです)

私たちは文を分析します:

 

検査の長さにかかわらず、スキップの、

 

所定の乱数シード(コンピュータは、擬似乱数生成ので、所定の乱数の後に得られ、その後の種子は同じであるため)。

 

候補キーとして16ランダムに生成された番号、

 

注文のうち、

 

バイトに、

 

平文と鍵ビットをXOR

 

二次元に平文(以下略称P)の場合:

我々は、P [0:1]、[1] ...というようにPと表記[2 1] P [0]、Pと称します

我々は2つの次元P対応するテーブルにそれを取得することができます:

P0

P1

P2

P3

P5

P6

P7

P4

P10

P11

P8

P9

P15

P12

P13

P14

その後を見て続行します。

 

この行列は、左を掛けた後、(この場所は示唆していない場合、私は長い時間のためにカードをお勧めします)一次元に押し込まれます

 

そして、順不同で、それをキー入力し、

 

再び平文XORビットと、出力、

 

復号化機能、...明らかにあなたは、私たち自身を書きたいです。

 

ここでは次のトピック、人々は非常に接近しているフラグに暗号化された暗号文が、あなたはそれを見ていない場合にはあまり使用されています。

 

♂明確に書かを取得する方法の旗。

それを分析した後、この質問は、暗号化関数の逆関数を記述するための鍵です。

便宜上、単に呼ば午後cipher_textはCであり、第2の鍵KEY2と呼ば得スクランブル、KEY1と呼ばれる最初のキーを取得スクランブル

 

利便性の背後にあるKEY1とKEY2の使用に先立ってまず取引、

 

私たちは、暗号化アルゴリズムは、第1およびKEY2のC XORに対して後方ました

 

次いで、一次元、二次元のCへの拡張、

 

行列の逆行列を暗号化するために使用される暗号化によって得られた行列、

上記対応する暗号表

私たちは、テーブルに対応したリターンを得ることができます。

P0

P1

P2

P3

P7

P4

P5

P6

P10

P11

P8

P9

P13

P14

P15

P12

 

そして、XORが出てKEY1、あなたは暗号化の前にフラグを取得することができます

そして、コード214行(2333本当に疲れを)実行するには、フラグを取得することができます:

 

迷路

ファイルUbuntuの表情にファイルをダウンロードします。

 

ELFファイル、逆はLinuxであるように思われるが、我々はまた、IDAにドラッグすることができ、F5キーを押して、主な機能を見つけます

 

このプログラムは、このような文を見つけたマップ全体を、表現するためのパラメータを使用しています。

 

50行であるマップ。

そして、マップを探します。

 

後に抽出されたように私は、この位置にマップが見つかりました:

 

!迷路をダウンWASD

 

ファイルを開こうとします:

 

なんてこった 右?

井田バックカンカン:

 

カンカンを開く二つの中間奇関数のマップ機能は、あります。

 

2箇所の機能は、マップを変更されたことがわかった、アドレスの場所を見つけ、手動でマップを変更し、WASDは再びそれを行うにして、開こう:

 

OK、フラグを取得します。

プログラミング

デッドロック

質問は、エッジ接続イベントで、BFS缶非常にシンプルでした

コードは以下の通りであります:

書式#include <アルゴリズム>

書式#include <iostreamの>

書式#include <cstdioを>

書式#include <cmath>

書式#include <キュー>

名前空間stdを使用。

BOOLショー[1010];

INT RU [1010]、NEXの[1010]、LEN、N。

キュー<整数> Q;

構造体のノード

{

         int型V、NXT。

}エッジ[* 1010 1010]。

無効アドオン(int型のu、int型V)

{

         エッジ[++ LEN =(ノード){V、NEX [U]}、NEX [U] = LEN。

}

空BFS()

{

         しばらく(!q.empty())

         {

                  INT X = q.front()。

                  q.pop();

                  [X]午前= 1。

                  以下のために(; I; I =エッジ[I] .nxt [X] I = NEXをINT)

                  {

                          int型V =エッジ[I] .V。

                          RU [V] - 。

                          (もし!RU [V])

                                   q.push(V);

                  }

         }

}

メインint型()

{

         scanf関数( "%のD"、&N);

         以下のために(INT i = 0; iがn <; iは++)

         {

                  scanf関数( "%d個"、&RU [I])。

                  (もし!RU [I])

                          q.push(I);

                  (INT J = 1; J <= RU [I]; J ++)のために

                  {

                          テレビで;

                          scanf関数( "%d個"、&V);

                          (V、I)を追加します。

                  }

         }

         BFS();

         (; iがN <; ++ iが0 = INT)のために

                  (もし!VIS [I])

                  {

                          printf( "Yの\ n");

                          0を返します。

                  }

         printf( "Nの\ n");

         0を返します。

}

おすすめ

転載: www.cnblogs.com/dawn-whisper/p/11543091.html