0

.pdf、.doc、.docxなどのファイルのファイルタイプを見つけようとしていますが、プログラムでシェルコマンドを使用していません。実際、特定の拡張子のファイルへのアクセスをブロックするアプリケーションを作成する必要があります。私はすでにsys_call_tableをLKMにフックしましたが、システムコールのオープン/読み取りがトリガーされたときに、LKMがファイルタイプをチェックするようにします。

現在のプロセス構造にアクセスできる現在のポインターがあり、それを使用してdentry構造に格納されているファイル名を検索できます。また、Linuxでは、ファイルの開始バイトに格納されているマジックナンバーによってファイルタイプが識別されます。しかし、ファイルの種類とそれが保存されている場所を正確に見つける方法がわかりませんか?

4

2 に答える 2

6

Linux は、そのファイルのファイル タイプを「保存」しません (Mac OS のリソース フォークとは異なり、これを行う最もよく知られているプラ​​ットフォームだと思います)。ファイルは単に名前付きのバイト ストリームであり、オペレーティング システムによって暗示された構造はありません。

どのファイルを使用するかをプログラムに指示する (そして、指定したとおりに実行する) か、プログラムが高レベルの機能を使用してそれを把握します。

この特定の車輪を再発明するプログラムがあります (私はそのうちの 1 つを担当しています) file(1)。もちろん、それにはプログラムが取得するテキスト出力を解析して「理解する」必要がありますが、これはある意味では問題を動かすだけです。

ただし、カーネル空間からの呼び出しはあまり賢明ではないと思いますfile。そのため、必要なタイプのセットが何であれ、テストを再作成してサイズを小さくするのがおそらく最善です。

つまり、必要なテストを単純に再実装する必要があるということです。これは一般的に非常に複雑なので、できるだけ多くの型のセットに対して本当にそれを行う必要がある場合は、あまり良い考えではないかもしれません. :/

于 2013-02-05T12:48:18.143 に答える
2

実際、特定の拡張子のファイルへのアクセスをブロックするアプリケーションを作成する必要があります。

それは欠陥のある要件です。ファイル拡張子で確認すると、ファイル拡張子を使用していないため、Linuxで非常に一般的な拡張子を使用していないファイルを見逃すことになります。

Linuxでファイルの種類を検出するための公式に認可された方法は、マジックナンバーによるものです。シェルコマンドfileは基本的にlibmagicの単なるラッパーであるため、そのライブラリにリンクするオプションがあります

于 2013-02-05T13:03:51.320 に答える