 
      こんにちは この投稿が悪い結果をもたらさず、すべてがうまくいき、世界が光で満たされることを願っています! VKのソーシャルユニティ3Dゲームのすべてがそれほど悪いのはなぜですか?
週末は無料でしたが、アプリケーションセキュリティの弱点を特定するために 、1つの興味深いことにそれらを捧げました。 なぜなら 主に団結して仕事をしてから、このエンジンで作成したゲームを撮りました。 私はプロではなく、そのような分析の経験がなかったことにすぐに注意します。 ユーザーがどのように認証されるかについての知識があり、(VKのドキュメントにある)彼のidの有効性を検証しました+ c#(それは一切ありません)。 4つのアプリケーションが手に落ち、4つすべてに穴があり、最後の1つでは「 サーバーメソッド 」にアクセスできるようになりました。 これはどのようにして生じたのですか?
1.ツール
ウェブの広がりをさまよいながら、 Unity 3D Obfuscatorプログラムに出会いました。このプログラムには次の機能があります。
-逆コンパイルに対する保護。
-オブジェクト名(クラス、関数、プロパティなど)の難読化(意味のない文字セットへの名前変更);
-フローグラフの難読化。
-Unity3Dプロジェクトの開梱。
-イベントおよびプロパティのメタデータの削除。
.unity3d(ウェブビルド)ファイルを解凍するだけで、後で役立つDLLを取得できます。 したがって、最初にダウンロードしてインストールしたのはUnity 3D Obfuscatorでした。
Naryl ILSpy (無料)の分解用。 C#<-> ILコードを見る機能は非常に便利でしたが、それについては後で詳しく説明します...
Unity3d + VS2012により、テスト用の小さなアプリケーションをすばやく作成できました。
2.プロセス
まず、特定のアプリケーションのviewer_idページとauth_keyページをHTMLソースから取得しました。 ちなみに後者は、ユーザーとアプリケーションのペアごとに一意です。 ここで、iframeのURLを見つけることができます。ここで、.unity3dファイルへのパスを見つけることができます。 NotePad ++にコピー/貼り付け。
 
      (htmlソース)
それから、あるアプリケーションで拡張子が.pdfに置き換わっていることに気付きました。 なぜ私には謎でしたが、DownloadMasterでダウンロードして元の形式に名前を変更するのは簡単でした(pdfから得られる利益が何かを知っているなら、コメント欄に書いてください、とても面白いです)。
さらに、Unity 3Dを使用して、Obfuscatorはビルドをアンパックし、出力でdllを受け取りました。 Assembly-CSharp.dllが必要です! 0.5リットルのコーヒーを入れて、彼はオナニーを練習し続けました...
 
      (Unity 3D難読化ツール)
ここでのタスクは、コード内のデータ転送ポイントを見つけることでした。 署名がある場合は、コンテンツ署名メカニズム。
ILSpyはアセンブリを非常にすばやく飲み込み、クラスのキャンバスを作成しました。 彼の創意工夫を結びつけて、彼は検索でネットワークを獲得しましたが、検索はPhoton Cloudに関連するクラスのみにつながりました。 それではありません、先に進みます。 数分後、誰かのid-auth_keyペア(判明したように、アプリケーション管理者)を見つけました。 しばらくしてから-要求を送信するサーバーのアドレス。
「Used By」というリンクを使用して、アプリケーションの場所を見つけました-ゲームサーバーのAPIをプルするメソッド。
最初のアプリケーションですべてが簡単な場合(データを取得して置換する)、他の人ともっといじる必要がありました。 リクエストを送信しようとする試みは、サーバーからの「Hello Mazafacka」応答で終了しました。
何かが欠落しています... Md5Sumというメソッドを見て、十分なハッシュがないことを理解しています! しかし、それを構築する方法は? コードを見てみましょう:
private IEnumerator UpdateScor(string vid, ...) 
      
        
        
        
      
     { 
      
        
        
        
      
     df.c__Iterator20 c__Iterator = new df.c__Iterator20(); 
      
        
        
        
      
     c__Iterator.viewer_id = vid; 
      
        
        
        
      
     ... 
      
        
        
        
      
     return c__Iterator; 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     
      
        
        
        
      
          .   ... 
      
        
        
        
      
     
      
        
        
        
      
        -    yield return  ,     ,        ,     .   df.c__Iterator20  ...  .     IL .         ,    .       ,   (string.concat)   (MD5(string.concat)).     ! 
      
        
        
        
      
     
      
        
        
        
      
        ,  ,  ,   - (   ,   0). 
      
        
        
        
      
     
      
        
        
        
      
     : 
      
        
        
        
      
     0.    - ~6 . 
      
        
        
        
      
     1.      3  - ,   .. 
      
        
        
        
      
     2.    App_Secret!     ,        ... 
      
        
        
        
      
     
      
        
        
        
      
      ? (  ) 
      
        
        
        
      
     1.  - . .         . 
      
        
        
        
      
     2.        .   :  (   ),   . 
      
        
        
        
      
     3.           ,       -. 
      
        
        
        
      
     
      
        
        
        
      
      
      
        
        
        
      
            .     . ,     -(>1 000 000 ),        ,      ,    . 
      
        
        
        
      
     
      
        
        
        
      
         ,     .      -    ?  ,  .   ,   ArtMoney      ?(   )        -?( 5) 
      
        
        
        
      
     
      
        
        
        
      
        ,   ,   ?
      
       private IEnumerator UpdateScor(string vid, ...) 
      
        
        
        
      
     { 
      
        
        
        
      
     df.c__Iterator20 c__Iterator = new df.c__Iterator20(); 
      
        
        
        
      
     c__Iterator.viewer_id = vid; 
      
        
        
        
      
     ... 
      
        
        
        
      
     return c__Iterator; 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     
      
        
        
        
      
          .   ... 
      
        
        
        
      
     
      
        
        
        
      
        -    yield return  ,     ,        ,     .   df.c__Iterator20  ...  .     IL .         ,    .       ,   (string.concat)   (MD5(string.concat)).     ! 
      
        
        
        
      
     
      
        
        
        
      
        ,  ,  ,   - (   ,   0). 
      
        
        
        
      
     
      
        
        
        
      
     : 
      
        
        
        
      
     0.    - ~6 . 
      
        
        
        
      
     1.      3  - ,   .. 
      
        
        
        
      
     2.    App_Secret!     ,        ... 
      
        
        
        
      
     
      
        
        
        
      
      ? (  ) 
      
        
        
        
      
     1.  - . .         . 
      
        
        
        
      
     2.        .   :  (   ),   . 
      
        
        
        
      
     3.           ,       -. 
      
        
        
        
      
     
      
        
        
        
      
      
      
        
        
        
      
            .     . ,     -(>1 000 000 ),        ,      ,    . 
      
        
        
        
      
     
      
        
        
        
      
         ,     .      -    ?  ,  .   ,   ArtMoney      ?(   )        -?( 5) 
      
        
        
        
      
     
      
        
        
        
      
        ,   ,   ?
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
 {
df.c__Iterator20 c__Iterator = new df.c__Iterator20();
c__Iterator.viewer_id = vid;
...
return c__Iterator;
}
. ...
- yield return , , , . df.c__Iterator20 ... . IL . , . , (string.concat) (MD5(string.concat)). !
, , , - ( , 0).
:
0. - ~6 .
1. 3 - , ..
2. App_Secret! , ...
? ( )
1. - . . .
2. . : ( ), .
3. , -.
. .
, . - ? , . , ArtMoney ?( ) -?( 5)
, , ?
private IEnumerator UpdateScor(string vid, ...) 
      
        
        
        
      
     { 
      
        
        
        
      
     df.c__Iterator20 c__Iterator = new df.c__Iterator20(); 
      
        
        
        
      
     c__Iterator.viewer_id = vid; 
      
        
        
        
      
     ... 
      
        
        
        
      
     return c__Iterator; 
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     
      
        
        
        
      
          .   ... 
      
        
        
        
      
     
      
        
        
        
      
        -    yield return  ,     ,        ,     .   df.c__Iterator20  ...  .     IL .         ,    .       ,   (string.concat)   (MD5(string.concat)).     ! 
      
        
        
        
      
     
      
        
        
        
      
        ,  ,  ,   - (   ,   0). 
      
        
        
        
      
     
      
        
        
        
      
     : 
      
        
        
        
      
     0.    - ~6 . 
      
        
        
        
      
     1.      3  - ,   .. 
      
        
        
        
      
     2.    App_Secret!     ,        ... 
      
        
        
        
      
     
      
        
        
        
      
      ? (  ) 
      
        
        
        
      
     1.  - . .         . 
      
        
        
        
      
     2.        .   :  (   ),   . 
      
        
        
        
      
     3.           ,       -. 
      
        
        
        
      
     
      
        
        
        
      
      
      
        
        
        
      
            .     . ,     -(>1 000 000 ),        ,      ,    . 
      
        
        
        
      
     
      
        
        
        
      
         ,     .      -    ?  ,  .   ,   ArtMoney      ?(   )        -?( 5) 
      
        
        
        
      
     
      
        
        
        
      
        ,   ,   ?