神秘的なDuquフレームワークプログラミング言語の定義

2週間前、Kaspersky Labの専門家 、Duquトロイの木馬が記述されているプログラミング言語の決定を支援するようコミュニティ依頼しました 。 2011年10月に発見されたが、それでも専門家を困惑させた。



カスペルスキーは最初にリバースエンジニアリングの専門家に頼りましたが、彼らは助けられませんでした。 プログラミング言語がC ++でも、Objective-Cでも、Javaでも、Pythonでも、Adaでも、Luaでもないこと、そしてテストした30のプログラミング言語ではないことは明らかでした。 分析に数か月失敗した後、マルウェアの重要な断片が未知の言語で書かれていると仮定することしかできませんでした。



しかし、コミュニティの助けのおかげで、このパズルはまだ解決可能でした。





リンクリストクラスのコンストラクター関数





リンクリストクラスのデストラクタ関数



カスペルスキーのスペシャリストは、200以上のコメントと、さまざまな言語とフレームワークを示す60以上の手紙を受け取りました。 Redditフォーラムとサードパーティの開発者の支援のおかげで、Duquの作成者がMicrosoft Visual Studioのコンパイラを使用ていることがようやくわかりました。



MSVCのさまざまなバージョンとコンパイルオプションを使用したいくつかの実験の後、カスペルスキーラボのスペシャリストであるIgor Sumenkovは、最初のスクリーンショットからコンストラクター関数コードを再現し、このコードからDuquで見つかったコードと一致するバイナリコードを取得しました。



Cでこの関数を手動で復元したコードを次に示します。







「オプション/ O1(サイズ最適化)および/ Ob1(__inline関数のみを展開)を含むMSVC 2008配信のコンパイラを使用して上記のコードをCでコンパイルすると、Duquのこの関数の元のコードに一致するマシンコードが得られます」とIgor Sumenkov氏は書いています。 彼はまた、Duquの未知の作者がC ++の代わりにOO Cを使用することを決定した理由を分析しようとし、1)広い移植性と2)C ++コンパイラへの不信の2つの理由があると示唆しています 「これは、アセンブラーから始めて徐々にCに切り替えた長年の経験を持つ開発者にとって典型的なものです。C++が登場したとき、暗黙のメモリ管理と暗黙のコード実行を引き起こす混乱した構造(コンストラクター、オペレーターなど)。 両方の理由は、フレームワークのコードが長年の経験を持つ「古い学校」の開発者によって書かれたことを明確に示しています。



All Articles