sign-message-phishing-review
Use when asked to sign a plain message or an unknown typed payload. Detects Seaport/OpenSea orders, permit-like permits, and hashed transactions, and refuses eth_sign and anything you cannot render.
- License 许可
- MIT
- 最近更新
- 2026-11-14
- Stars
- ★ 81
- Forks
- 17
01 前言 Front Matter
- name
- sign-message-phishing-review
- description
- Use when asked to sign a plain message or an unknown typed payload. Detects Seaport/OpenSea orders, permit-like permits, and hashed transactions, and refuses eth_sign and anything you cannot render.
02 资源文件 3
- 许可证LICENSE1.0 KB
- 参考文档SOURCE.md354 B
- 参考文档TRUST.auto.yaml2.1 KB
03 SKILL.md 正文
Review a message-signing request
Message signatures have no gas cost and no on-chain record, which is why drainers ask for them. This skill classifies the payload, decodes anything structured, and refuses blind signatures.
Procedure
- Classify the prefix.
personal_signuses0x19+"Ethereum Signed Message:\n"+ length + message; EIP-712 uses0x1901+ domain separator + struct hash. Decode the first bytes:python3 -c "print(open('payload.hex').read()[:10])"→0x19457468...is personal_sign,0x1901is typed data. - Refuse
eth_signoutright. Its0x19+ raw-hash prefix signs an arbitrary hash, which is equivalent to signing a transaction you never saw. - If it is EIP-712, print the domain and the full struct and confirm the wallet shows the same fields. Check for a Seaport
OrderComponentsor an OpenSea order — signing one lets the recipient transfer your listed assets. - If it is permit-shaped (
permit,Permit,PermitSingle), treat it as an approval: check spender, value, and deadline as you would for an on-chain approval. - Compare the signing site's domain to the project's real domain; a signature request from a lookalike host is the phish.
- Use a dedicated signer address that holds no assets for logins and off-chain proofs, so a leaked signature cannot move funds.
- If any field is unreadable, do not sign.
- Record the exact payload hash and the domain you saw, so a disputed signature can be audited later.
Pitfalls
-
A drainer can craft a typed message that grants an approval with a far-future deadline and no visible token; the wallet renders the struct but users skim it.
-
signTypedDatawith a domain that omitsverifyingContractcan be replayed on any contract that accepts it. -
Lookalike domains (extra hyphen, different TLD) render identically to a skimming eye; compare the full hostname.
-
A message that is actually a serialized transaction hash signed with
eth_signis indistinguishable from a harmless login string to a user; only refusingeth_signprevents it. -
Approving a signature on a site you reached from a DM or an ad is the common path; navigate to the project yourself.
-
A login that produces a
permitpayload is not a login; the label on the page is not the payload. -
Wallet pop-ups truncate long messages; expand the raw view before deciding.
-
A signature requested on a testnet can be replayed on mainnet if the domain lacks a chain id.
-
A drainer can ask for two signatures in sequence; the second completes what the first prepared.
Verification
python3 -c "print(open('payload.hex').read()[:10])" && cast to-dec <v>
# expect 0x19457468 or 0x1901 (never a bare 0x19), and a legitimate chain id
Report the payload prefix, the decoded domain, and the exact fields signed, with the commands behind them.
04 同仓库更多 Skills
recipe-performance
Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold/warm/background-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout/paint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.
mexc-spot-websocket
MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.
mexc-spot-rest
MEXC Spot REST workflows for public data, signed account requests, orders, wallet/admin actions, and secure signing without exposing API keys.
mexc-futures-websocket
MEXC Futures WebSocket workflows for public streams, private account/order/position streams, ping/pong, subscriptions, and depth maintenance.
0xklen-version-and-refresh-sanctions-lists
暂无简介
verify-tests-cover-changed-lines
Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.