多くの CLI プログラムには、フラグとオプションの構文が文書化されており、通常は man ページで、-h
または--help
フラグを使用して入手できます。しかし、意図的に文書化されていない非常に便利で非常に強力なオプションがしばしばありますが、これらを探すのは非常に難しく、時間がかかると思います。
ここでの最初の目的として、私は具体的に Darwin (i/mac[h][ ]OS [X]、または最近では何と呼ばれていても...) でこれを行う方法を探していることに注意してください。このプラットフォームに固有の答え。しかし、真に理想的なのは、プラットフォームやアーキテクチャを超えて機能するものです。
だから、私が持っている無数の開発、デバッグ、およびシステムツールの中でプログラムの隠されたフラグを見つけるためのツールまたは簡単に自動化された手段があるかどうか(ただし、私は慣れていない)、または少なくとも特定のものがあるかどうか疑問に思っています可能性のある候補を見つけるためにバイナリを「grepする」プロセスを自動化するために頼ることができるバイナリ実行可能ファイル内のパターン。
ほぼ同じ数の言語とプラットフォームに対して、±100 億のオプション解析関数、ライブラリ、および手法があることを知っています。getopt
とgetopt_long
、他の多くの用語と同様に、通常、1 つ以上の用語opt[s]
またはarg[s]
およびget
またはの組み合わせを含むものと呼ばれることを思い出してparse
ください。繰り返しになりますが、ここで私の質問の範囲を制限するために、今日私が特に探しているのは、Apple 製品にあるユーティリティの非表示のオプションです。プログラム:
- [Objective-]C[++] 言語ファミリーで書かれています (ただし、Swift のボーナス ポイントも!)。
- おそらくコード署名されており、デバッグ情報が削除されている場合とされていない場合があります。
- 意図的に難読化されていません。
- 少なくとも
r-x
プログラムにアクセスできるので、変更可能なコピーを作成できます。 - したがって、署名を自分で剥ぎ取ったり削除したりできます。ただし、コード署名の制限により、これらの変更されたバージョンのバイナリを実行できない場合があります。署名要件を無効にできるため、これはソフト要件ですが、理想的にはそうではありません。
- 同様に、他の場所から任意のコード/署名されていないアプリケーションを実行できない可能性があるのと同じ理由で、私が探している最良の答えは、多くの余分なソフトウェアを必要としません. 少なくとも、IDA Pro を購入するように言わないでください。
- ソースコードにアクセスできるかもしれませんが、おそらくアクセスできないでしょう (当然のことです)。
これを行うための現在のプロセスには、通常、次のものが含まれます。
- 実行可能ファイルをコピーします。
- コード署名などの無関係なものを削除します。通常、私
strip
もそうします。 - 既知のオプションのコンテキストを調べ、可能性の高い候補を手動で探して試します。
つまり、次のようなxip -xやpkgutil --expand-fullなどの便利なオプションをいくつか見つけました。
cp -H $(⁅which¦xcrun -f⁆ ⁅xip¦pkgutil⁆) /tmp/⁅xip¦pkgutil⁆
codesign --remove-signature /tmp/⁅xip¦pkgutil⁆
strip /tmp/⁅xip¦pkgutil⁆
strings ⁅-a -⁆ /tmp/⁅xip¦pkgutil⁆ | grep -C10 ⁅sign¦expand⁆
(明らかに、バリエーションを示す派手な Unicode です。)
しかし、これまでのところ、これらが正確にどこにあるのかについては、韻律や理由がほとんどないことがわかりました。その後のすべての試行錯誤。-print-all-options
また、C ++ベースのもの(LLVMベースのツールなど、オプションがあるものとないものがあります)では、はるかに困難です。
Apple のすべてのシステム ユーティリティなどに対するすべてのオプションの完全なリストを作成する方法を見つけたいと本当に思っています。または、少なくともそれに近いものです。可能?