
🐸 무엇이든 식별하세요. pyWhat는 이메일, IP 주소 등을 쉽게 식별할 수 있게 해줍니다. .pcap 파일이나 텍스트를 입력하면 그것이 무엇인지 알려줍니다! 🧙♀️
➡️ Discord ⬅️
무엇이든 식별하는 가장 쉬운 방법
pip3 install pywhat && pywhat --help
무엇인가?
이런 상황을 상상해 보세요: 정체불명의 텍스트 🧙♂️ 0x52908400098527886E0F7030069857D2E4169EE7 또는 dQw4w9WgXcQ를 발견하고 그것이 무엇인지 궁금해합니다. 어떻게 하시겠습니까?
what을 사용하면 what "0x52908400098527886E0F7030069857D2E4169EE7"라고 묻기만 하면 what이 알려줍니다!
what의 역할은 무언가가 _무엇_인지 식별하는 것입니다. 파일이든 텍스트든 말이죠! 파일의 헥스 값도 가능합니다! 파일 _내부_의 텍스트는 어떨까요? 그것도 지원합니다! 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' {} \;
# 사이트의 모든 웹 페이지를 재귀적으로 다운로드
wget -r -np -k https://skerritt.blog
# 발견 시 출력됩니다.
# 현재 디렉터리의 모든 파일을 반복합니다.
find . -type f -execdir pywhat --include 'Bug Bounty' {} \;
참고: 버그 바운티 외에도 더 많은 필터를 지원합니다! 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은 모든 것을 하나의 JSON 객체로 반환합니다.
유니코드 What에 파이프로 전달되는 파일과 텍스트는 UTF-8, 또는 바이트 순서 표시가 있는 UTF-16이나 UTF-32일 수 있습니다. Windows에서 저장하는 "유니코드" 텍스트 파일처럼 말이죠. 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은 한 줄로 출력되므로 what --json TEXT | jq와 같이 다른 프로그램으로 파이프할 수도 있습니다.
진행 상황 및 스트리밍 큰 파일이나 디렉터리에서처럼 검색이 오래 걸릴 때, 진행 표시줄은 What이 얼마나 진행되었는지 보여줍니다: 파일에 대해 검색한 정규식의 수와 현재 검색 중인 정규식, 그리고 디렉터리나 여러 입력의 경우 검색한 파일의 수를 보여줍니다. 이들은 터미널에서만 표시되며(출력이 파일로 리디렉션되는 경우 stderr에), 검색이 완료되면 사라집니다. --no-progress는 이를 끕니다. --stream을 사용하면 What은 검색이 완료될 때까지 기다리지 않고 일치 항목을 발견하는 즉시 출력합니다: what --stream big.log, 또는 일치 항목당 하나의 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를 통해, 키당 한 번) 기본적으로 꺼져 있으므로, 테스트가 허용된 키에만 사용하세요. 키의 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이 찾은 것을 원하는 만큼 자주 검색할 수 있습니다: