
🐸 何でも識別します。pyWhatは、メールアドレスやIPアドレスなどを簡単に識別できます。.pcapファイルやテキストを入力すると、それが何かを教えてくれます! 🧙♀️
➡️ Discord ⬅️
あらゆるものを識別する最も簡単な方法
pip3 install pywhat && pywhat --help
何?
想像してみてください。あなたは謎めいたテキスト 🧙♂️ 0x52908400098527886E0F7030069857D2E4169EE7 や dQw4w9WgXcQ に出くわし、それが何なのか気になります。どうしますか?
what を使えば、what "0x52908400098527886E0F7030069857D2E4169EE7" と尋ねるだけで、what が教えてくれます!
what の仕事は、何かが_何_であるかを識別することです。それがファイルであれテキストであれ!あるいはファイルの16進数であっても!ファイル_内_のテキストはどうでしょう?それも対応しています!what は再帰的で、テキスト内のすべてなどを識別します!
$ pip3 install pywhat
または
# 速度を改善する可能性のあるオプションの依存関係をインストールします
$ pip3 install pywhat[optimize]
$ brew install pywhat
またはMacPortsファンの方には:
$ sudo port install pywhat

WantToCryと呼ばれる新しいマルウェアに出くわしたとします。あなたはWannacryを思い出し、研究者がコード内にキルスイッチを発見したことで停止したことを覚えています。
Wannacryにハードコードされたドメインが登録されると、ウイルスは停止しました。
あなたは What を使ってマルウェア内のすべてのドメインを識別し、ドメイン登録事業者のAPIを使ってすべてのドメインを登録します。

ネットワーク攻撃からの .pcap ファイルがあるとします。What はこれを識別し、以下を素早く見つけ出します:
what を使えば、pcap内の重要なものを数分ではなく数秒で識別できます。
PyWhatを使って、以下のようなバグバウンティで報酬を得られるものをスキャンできます:
PyWhatを次のように実行します:
pywhat --include "Bug Bounty" TEXT
これを行うには。
以下にいくつかの例を示します 👇
# すべてのリポジトリをダウンロード
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
# 発見したときに出力します。
# カレントディレクトリ内のすべてのファイルをループします。
find . -type f -execdir pywhat --include 'Bug Bounty' {} \;
# サイトのすべてのWebページを再帰的にダウンロード
wget -r -np -k https://skerritt.blog
# 発見したときに出力します。
# カレントディレクトリ内のすべてのファイルをループします。
find . -type f -execdir pywhat --include 'Bug Bounty' {} \;
PS:バグバウンティだけでなく、さらに多くのフィルターをサポートしています!pywhat --tags を実行してください。
ファイルがあり、その中にある有用な構造化データを見つけたいときはいつでも、What が役立ちます。
あるいは、テキストに出くわしてそれが何かわからないとき、What が教えてくれます。
ファイルを開く what 'this/is/a/file/path' でファイルパスを渡すことができます。What はそれがファイルであることを見抜けるほど賢いです!
ディレクトリ全体はどうでしょう?What はそれも扱えます!再帰的にファイルを検索し、必要なものをすべて出力します!
複数の入力 複数のファイル、ディレクトリ、テキストを一度に渡すことができます。例えば what file1 file2 this/is/a/directory 'some text' や find . -name '*.log' -exec what {} + のように。What は各マッチのファイルを表示し、テキスト内のマッチは text の下に表示され、--json はすべてを1つのJSONオブジェクトで返します。
Unicode What にパイプされるファイルとテキストは、UTF-8、またはWindowsが保存する「Unicode」テキストファイルのようなバイトオーダーマーク付きのUTF-16やUTF-32にすることができます。What はバイナリファイル内のUTF-16文字列(strings -el のように)も検索します。これはWindowsプログラムがほとんどのテキストを保存する方法です。ターミナルが表示できない文字は、クラッシュする代わりに \u20bf のようなエスケープシーケンスとして出力されます。
時には、AWSに関連するものだけを見たいことがあります。あるいはバグバウンティ、または暗号通貨などです!
出力は what --rarity 0.2:0.8 --include Identifiers,URL https://skerritt.blog を使ってフィルタリングできます。詳細については what --help を使用してください。
デフォルトでは、what はレアリティが0.1以上のマッチのみを表示します。これは、レアリティが低いマッチはしばしば誤検知であるためです。例えば、YouTubeの動画ID単体、dQw4w9WgXcQ のようなものは、任意の11文字である可能性があるため、what dQw4w9WgXcQ は何も見つけませんが、what --rarity 0: dQw4w9WgXcQ はそれを表示します。YouTubeリンク、例えば https://youtu.be/dQw4w9WgXcQ や youtube.com/watch?v=dQw4w9WgXcQ&t=42s はデフォルトで表示されます。
すべてのフィルターを表示するには、pywhat --tags を実行してください!それらを組み合わせることもできます。例えば、すべての暗号通貨ウォレットからRippleを除いて表示するには:
pywhat --include "Cryptocurrency Wallet" --exclude "Ripple Wallet" 1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY
正規表現の名前はタグのように機能し、多くの正規表現にはより短い代替名もあります。例えば Bitcoin (₿) Wallet Address には BTC Wallet、Amazon Resource Name (ARN) には ARN などです。BitcoinとEthereumのウォレットのみを表示するには:
pywhat --include "BTC Wallet,ETH Wallet" TEXT
pywhat --names を実行すると、すべての正規表現の名前とその代替名を表示できます。
ソート what -k rarity --reverse TEXT を使って出力をソートできます。詳細については what --help を使用してください。
トップマッチ 見つかりすぎましたか?what --top 10 TEXT は最も可能性の高い10件のマッチのみを、可能性の高い順に表示し、what --top 5% TEXT はそれらの最も可能性の高い5%を表示します。ディレクトリや複数の入力の場合、これらはそれらすべての中で最も可能性の高いマッチです。最も可能性の高いマッチは最も高いレアリティを持ちますが、より長い単語やマッチの断片(境界なしモードが見つけるもの)は可能性が低くなります:what --top 1 0x52908400098527886E0F7030069857D2E4169EE7 はEthereumアドレスを表示し、その中のカード番号や社会保障番号は表示しません。what -k likely TEXT はこの順序ですべてのマッチを表示します。APIでは、pywhat.ranking.top_matches(identified, 10) が Identifier.identify() の返すもののうち最も可能性の高い10件のマッチを保持し、マッチの "Fragment" キーはそれが断片かどうかを示します。
エクスポート what --json を使ってjsonにエクスポートでき、結果は what --json > file.json を使って直接ファイルに送ることができます。JSONは1行で出力されるため、what --json TEXT | jq のように他のプログラムにパイプすることもできます。
進捗とストリーミング 大きなファイルやディレクトリなどで検索に時間がかかる場合、プログレスバーが What の進捗を示します:ファイルに対して検索した正規表現の数と現在検索中のもの、ディレクトリや複数の入力の場合は検索したファイルの数です。これらはターミナル上でのみ表示され(出力がファイルにリダイレクトされる場合はstderrに)、検索が完了すると消えます。--no-progress でオフにできます。--stream を使うと、What は検索が完了してからではなく、マッチを見つけ次第すぐに出力します:what --stream big.log、またはマッチごとに1行のJSONオブジェクトにするには what --stream --json big.log > matches.jsonl。すべてのマッチを待たないため、--stream はそれらをソートしたり(--key)、最も可能性の高いものだけを表示したり(--top)できず、そのJSONには "Fragment" キーがありません。
境界なしモード What には文字列内の識別可能な情報をマッチする特別なモードがあります。デフォルトでは、CLIでは有効ですがAPIでは無効です。詳細については what --help を使用するか、APIドキュメントを参照してください。
処理 正規表現が何かを見つけると、What は正規表現ができることを超えてそれをさらに処理できます。例えば、Unixタイムスタンプの日付がその説明に追加されます:what --rarity 0: --include "UNIX Timestamp" 1637093119 は Date: November 16, 2021 8:05:19 PM UTC を表示します。Bitcoinウォレットアドレスにはチェックサムがあるため、チェックサムが間違っているマッチ、例えば 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F は除外されます。これをオフにするには what --disable-processing を使用してください。
キーの検証 what --verify は、見つけたキーが有効かどうかをサービスに問い合わせ、その回答を説明に追加します。今のところGoogle APIキーを検証します:what --verify AIzaSyA00000000000000000000000000000000 は Verification: invalid, Google rejected the key (API_KEY_INVALID) を表示します。有効だがテストに使用したAPIを使用できないキー(例:SERVICE_DISABLED)は有効として報告されます。検証はデフォルトでオフです。これはキーをサービスに送信するため(HTTPS経由、キーごとに1回)ですので、テストが許可されているキーにのみ使用してください。キーのExploitには、自分で検証するための curl コマンドも含まれています。
マップ 座標はGoogle Mapsにリンクします。代わりにOpenStreetMapにリンクするには what --map osm を使用します:what --map osm '52.6169586, -1.9779857' は Link: https://www.openstreetmap.org/search?query=52.6169586,-1.9779857 を表示します。
大きなものを分析していますか?--interactive で一度メモリにロードすれば、再度スキャンすることなく、What が見つけたものを何度でも検索できます:
$ pywhat --interactive .
pywhat> tags
pywhat> include Bug Bounty
pywhat> top 10
pywhat> more
pywhat> location:"/src", include:"Bug Bounty", exclude:"Credit Card", rarity:"0.1:0.6"
pywhat> load another/directory