デジタル フォレンジック環境で Java (c/c++ と同様) を使用した経験のある人がいる場合、遭遇した可能性のある問題や利点についてアドバイスしてもらえますか? 乾杯
4 に答える
次の理由により、フォレンジック コードを C++ および Python から Java に移行しています。
- 破損したデータがツールに与える影響について懸念しています。Java ではそれほど問題になりません。
- 単一の Java バイナリは、32 ビットおよび 64 ビット システムで実行されます。
- スレッドのより良い活用。
私たちの最初の結果は非常に有望です: C++ から Java に移植された bulk_extractor は 3 倍高速に実行されました! 私たちは驚きました。これは、jflex が flex よりも高速な FSM を生成するためだと考えられます。
主な問題は、適切なオープン ソース Java フォレンジック ファイル システムがなく、SleuthKit 用の JNI バインディングがないことです。回避策の 1 つは、fiwalk を使用してディスク イメージからすべてのメタデータを XML BLOB に抽出し、Java で XML を処理することです。
これらのツールをダウンロードするには、http://afflib.org/ をチェックしてください。
はい、すべて Java で実行できます。C で実行する必要がある場合は、「危険な」ルーチンを呼び出すことができる JNI パッケージがあります。Java は堅牢性、セキュリティ モデル、スケーラビリティを提供します。大きな問題ではありません... 64 ビット OS に対処したり、複数の CPU を利用するためにコードを最適化したりする必要はありません。ソフトウェアは、C よりも Java の方が高速に実行される可能性があります。平均的な開発者でなく、CPU 構造に精通している場合は、機械語コードとレジスタの処理を十分に理解している場合は、私のテキストを忘れて、C の方が優れている可能性があります。
Sleuth Kit に JNI バインディングが追加されました。公式にはリリースされていませんが、github master ブランチで見つけることができます。SQLite データベースは、C++ コードによってファイル システム メタデータが取り込まれ、次に Java コードがデータベースにクエリを実行し、対応する Java オブジェクトを作成します。JNI は、ファイルの内容を Java 側に取得するために使用されます。Autopsy 3 (Java NetBeans RCP アプリ) はバインディングを使用します。
バイナリ解析と任意の文字列解析を処理することは、Java では非常に苦痛であり、まったく不要です。Java の unsigned integer の欠如も、非常に厄介です。
私たちは社内のすべてに python を使用しています。これは、コーディングが容易であるため (特に Java のかさばりと比較して)、struct.pack/unpack によってバイナリ データの解析が簡単になり、組み込みのデータ構造/オブジェクト、およびそれらがライブラリであるという事実からです。私たちが必要とするほとんどすべて
フォレンジック処理に Java は本当にお勧めできませんでした
編集:
また、多数のフォレンジック ツールが既に Python に組み込まれているか、Python バインディング (volatility、sleuthkit など) を備えています。