web-dev-qa-db-ja.com

これらのGitHubリポジトリファイルを信頼できますか?

私は最近GitHubリポジトリ https://github.com/userEn1gm4/HLuna を見つけましたが、それをクローンした後、ソースからコンパイルされたファイル(g ++を使用)間の比較がHLuna.cxx、リポジトリに含まれるバイナリ(HLuna)は異なります:differ: byte 25, line 1。提供されたバイナリファイルは安全ですか?

VirusTotalでこれを問題なくすでに分析しましたが、出力を逆コンパイルして読み取る専門知識がなく、リスクを考慮せずに提供されたバイナリを以前に実行しました。

21
mcruz2401

多項式は何が起こり得るか、そしてそれを解決する方法を教えてくれます。ここでそれを説明します:

両方のバイナリをstringsを介して実行し、それらを比較しました。これで十分に、完全に無害ないくつかの違いがわかります。特に、使用されているコンパイラは次のとおりです。

GCC: (Debian 6.3.0-18) 6.3.0 20170516                         | GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)
                                                              > GCC: (GNU) 8.3.1 20190223 (Red Hat 8.3.1-2)
                                                              > gcc 8.2.1 20181105

使用されるプライベート名の一部も異なります:

_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_@ | _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_

そして、いくつかのセクションはシャッフルされているように見えるので、diffはそれらを正確に一致させることができません。

同じコンピューター上でも、最適化なしで-O3は異なるファイルを表示します。

_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6appendE | _ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev

内部データのシャッフルも:

Diccionario creado!                                           <
MENU                                                          <
1. Generador de Diccionarios                                  <
0. Salir                                                      <
/***                                                          <
*    $$|  |$$ |$$|                                            <
*    $$|  |$$ |$$|                                              *    $$|  |$$ |$$|                                  
*    $$|  |$$ |$$|     $$| |$$  |$$$$$$|  |$$$$$$|              *    $$|  |$$ |$$|     $$| |$$  |$$$$$$|  |$$$$$$|  
*    $$$$$$$$ |$$|     $$| |$$ |$$ __ $$|  ____$$|              *    $$$$$$$$ |$$|     $$| |$$ |$$ __ $$|  ____$$|  
*    $$|  |$$ |$$|     $$| |$$ |$$|  |$$| $$$$$$$|              *    $$|  |$$ |$$|     $$| |$$ |$$|  |$$| $$$$$$$|  
*    $$|  |$$ |$$|___  $$|_|$$ |$$|  |$$| $$___$$|              *    $$|  |$$ |$$|___  $$|_|$$ |$$|  |$$| $$___$$|  
*    $$|  |$$ |$$$$$$$| $$$$$  |$$|  |$$| $$$$$$$|              *    $$|  |$$ |$$$$$$$| $$$$$  |$$|  |$$| $$$$$$$|  
*    ----------------------------------------------             *    ---------------------------------------------- 
                                                              > -------------------
                                                              > Diccionario creado!
                                                              > MENU
                                                              > 1. Generador de Diccionarios
                                                              > 0. Salir
                                                              > /*** 
                                                              > *    $$|  |$$ |$$| 

これは、異なるバイナリファイルが多くの誤検知を引き起こし、安全性について何も伝えていないことを証明しています。

この場合、著者が最後の微調整の前に再コンパイルするのを忘れている可能性があるため、アップロードされたバージョンを知る方法がないため、私が自分でコンパイルしたバージョンを使用します。

22
Davidmh

コンパイルは、コンパイラーのバージョン、ライブラリーのバージョン、オペレーティング・システム、またはその他のさまざまな変数にわたって直接検証可能な決定論的なプロセスではありません。確認する唯一の方法は、アセンブリレベルで比較を実行することです。 これを実行できる多くのツール がありますが、それでも手動で作業する必要があります。

58
Polynomial

ソフトウェアがソースレベルでまったく同じである場合、問題は、コンパイル中に使用されるコンパイラ、システムライブラリ、およびさまざまなユーティリティを信頼できるかどうかということになります。信頼できるソースからツールチェーンをインストールし、その間にコンピューターが侵害されていないことを信頼している場合、生成されたバイナリファイルが「リファレンス」ビルドと異なっていても、悪意があると疑う理由はありません。

2