2017-11-01 14 views
0

からシステム()関数に渡されたシステムコールを非表示にする:コンパイルとこれを実行するには今すぐ はどのように考えてみましょう。このCスニペットホテルトップ

snprintf(buf, sizeof(buf), "<LONG PROCESS WITH PARAMETERS HAVING SENSITIVE INFO>"; 
system(buf); 

を、プロセスの「感受性」のパラメータが上見ることができますhtopのようなプログラム そして、私はそれを望んでいません。

私はすべてのUNIXベースでhtopのみコンパイル実行可能ファイルの名前が表示されますようにsystem()(すなわちhtopのは、ちょうどすべての時間をa.out表示)

+0

代わりに環境変数を読み込むラッパーを使用できます。 –

+2

[Unixのコマンドラインパラメータから秘密を隠す](https://stackoverflow.com/questions/3830823/hiding-secret-from-command-line-parameter-on-unix) –

答えて

0

に渡されたすべてのものを非表示にする方法があるかどうかを知りたいです多くのLinuxの亜種を含めて私が使ってきたようなシステムでは、プログラムがコマンドライン引数を "内部から"上書きすることは可能です。したがって、Cではargv[1],argv[2]などの値を空白にするだけでstrcnpy()を使用することもできます。もちろん、これらの引数を最初に処理またはコピーする必要があります。また、特定のメモリ以外のメモリを上書きしないように注意する必要がありますそれぞれの制限はargvです。

私はUnixについては、このアプローチの移植性や継続的な適用性を保証するものはないと思っていますが、私は少なくとも20年間それを使用してきました。それはpsなどのカジュアルな使用から、また/proc/NN/cmdlineからのコマンドを隠しますが、コマンドラインをどこかに格納しているシェルを停止させることはありません(例えば、シェル履歴ファイル内)。したがって、それはカジュアルスヌーピングを防ぐだけです。

より良い方法は、プログラムが(暗号化された可能性のある)ファイル、または環境変数からの入力を受け取り、証明書を使用させることです。実際には、コマンドラインを除いて、ほとんどすべてのものがあります。

関連する問題