अपने फंड्स गंवाने से पहले crypto drainer या rug pull को पकड़ने के लिए, BscScan या Etherscan पर smart contract को ध्यान से चेक करें—खासकर unverified code, हिडन mint() फंक्शन्स, या 10% से ज्यादा sell taxes पर नज़र रखें। स्वामित्व त्याग (ownership renunciation) और liquidity lock की समय-सीमा जांचने के लिए कॉन्ट्रैक्ट एड्रेस को हमेशा Token Sniffer, DEXScreener और GoPlus Security जैसे ऑटोमेटेड स्कैनर्स से रन करें। अंत में, ब्लाइंड eth_sign, Permit2 या setApprovalForAll रिक्वेस्ट्स को रिजेक्ट करके अपने वॉलेट को सिग्नेचर-बेस्ड ड्रेनर्स से बचाएं, और Rabby Wallet या Pocket Universe जैसे टूल्स का इस्तेमाल करके हर ट्रांजैक्शन को पहले सिमुलेट करें।
हे दोस्तों! यहाँ आपका Oleg Filatov बात कर रहा हूँ। मैंने पिछले तीन साल एक एक्सचेंज इंफ्रास्ट्रक्चर को जिंदा रखने और on-chain फ्रॉड के हर मुमकिन अटैक वेक्टर से निपटने में बिताए हैं। इससे पहले, मैं सिक्योरिटी ऑडिट्स में स्मार्ट कॉन्ट्रैक्ट्स की धज्जियाँ उड़ाता था और Web3 हैकाथॉन्स में देर रात तक कोडिंग करता था। यह सब मेरी रग-रग में बसा है—रात के 2 बजे किसी मैलिशियस बाइटकोड पेलोड की रिवर्स-इंजीनियरिंग करने और यह समझने में जो एड्रेनालाईन रश मिलता है कि किसी हैकर ने कैसे लाखों डॉलर का एक्सप्लॉइट प्लान किया था, उसका कोई मुकाबला नहीं है।
चलिए सीधे मुद्दे पर आते हैं और समझते हैं कि आज के Web3 इकोसिस्टम में बिछी इन माइन्स से अपने वॉलेट को कैसे सुरक्षित रखा जाए।
1. क्विक कंपैरिजन: Honeypot vs. Rug Pull vs. Wallet Drainer
| स्कैम का प्रकार | यह कैसे काम करता है | सबसे बड़ा रेड फ्लैग | डिटेक्शन के लिए मुख्य टूल |
|---|---|---|---|
| Honeypot | स्मार्ट कॉन्ट्रैक्ट यूज़र्स को टोकन खरीदने तो देता है, लेकिन हिडन लॉजिक या कंडीशनल रिवर्ट्स के ज़रिए बेचने के कॉल्स को ब्लॉक कर देता है। | 100% sell tax, DEX स्वैप्स पर TRANSFER_FAILED एरर, या हाल की हिस्ट्री में ज़ीरो सेल ट्रांजैक्शन्स। | Token Sniffer / DEXScreener |
| Rug Pull | डेवलपर्स लिक्विडिटी डालते हैं, टोकन का हाइप बनाते हैं, और फिर सारे LP टोकन्स निकाल लेते हैं या अपनी एलोकेटेड सप्लाई को पूल में डंप कर देते हैं। | अनलॉक्ड लिक्विडिटी, 6 महीने से कम का LP लॉक, या देव वॉलेट के पास कुल सप्लाई का >10% होना। | DEXTools / Uncx Network |
| Wallet Drainer | फिशिंग साइट्स आपको ऑफ-चैन मैसेज या अलाउंस ट्रांजैक्शन साइन करने का झांसा देती हैं, जिससे आपके वॉलेट का पूरा एक्सेस उनके पास चला जाता है। | अनवेरिफाइड dApps पर eth_sign, Permit2 सिग्नेचर्स, या setApprovalForAll की रिक्वेस्ट्स। | Pocket Universe / Rabby Wallet |
2. कोई भी टोकन खरीदने से पहले स्टेप-बाय-स्टेप सिक्योरिटी चेकलिस्ट
स्टेप 1: ऑटोमेटेड कॉन्ट्रैक्ट स्कैन
टोकन एड्रेस को Token Sniffer, GoPlus Security API और DEXScreener पर रन करें। अगर DEXScreener पर 4 घंटे की विंडो में 800 बाय ट्रांजैक्शन्स दिख रहे हैं और सेल बिल्कुल ज़ीरो है, तो वहीं रुक जाइए। यह एक हनीपॉट है। बात खत्म।
स्टेप 2: लिक्विडिटी लॉक की समय-सीमा (Liquidity Lock Duration)
एक जेन्युइन टीम अपने लिक्विडिटी पूल (LP) टोकन्स को Uncx Network या PinkSale जैसे प्रोटोकॉल्स के ज़रिए लॉक करती है।
- Red Flag: लिक्विडिटी अनलॉक्ड है, किसी EOA (एक्सटर्नली ओन्ड अकाउंट) में रखी है, या 6 महीने से कम के लिए लॉक है।
- Green Flag: LP टोकन्स बर्न कर दिए गए हैं (0x000000000000000000000000000000000000dead पर भेज दिए गए हैं) या कम से कम एक साल के लिए किसी वेरिफिएबल कॉन्ट्रैक्ट में लॉक्ड हैं।
स्टेप 3: डिस्ट्रीब्यूशन और ओनरशिप चेक
Etherscan या BscScan पर Holders टैब की जांच करें।
अगर एक्सचेंज या बर्न एड्रेस के अलावा कुछ गिने-चुने वॉलेट्स के पास कुल सप्लाई का 5–10% से ज्यादा हिस्सा है, तो समझ लीजिए कि आप उनके लिए एग्जिट लिक्विडिटी (exit liquidity) बनने वाले हैं। साथ ही यह भी चेक करें कि कॉन्ट्रैक्ट ओनरशिप रिनउंस (renounced) की गई है या नहीं। अगर नहीं, तो ओनर जब चाहे मनमाने ढंग से टैक्स बदल सकता है, आपके एड्रेस को ब्लैकलिस्ट कर सकता है, या ट्रांसफर रोक सकता है।
स्टेप 4: ट्रांजैक्शन और सिग्नेचर ऑडिटिंग
कभी भी ट्रांजैक्शन्स को आँख बंद करके साइन (blind-sign) न करें। आजकल के वॉलेट ड्रेनर्स शायद ही कभी स्टैंडर्ड ETH ट्रांसफर की मांग करते हैं—वे वॉलेट के स्टैंडर्ड वॉर्निंग प्रॉम्ट्स को बायपास करने के लिए EIP-712, Permit2, या EIP-2612 जैसे ऑफ-चैन सिग्नेचर्स का गलत फायदा उठाते हैं। ट्रांजैक्शन ब्रॉडकास्ट करने से पहले स्टेट चेंजेज की जांच करने के लिए डायनामिक ट्रांजैक्शन सिमुलेशन एक्सटेंशन का इस्तेमाल करें।
3. डीप-डाइव सिक्योरिटी एनालिसिस और कोड मैकेनिक्स
चलिए असली टेक्निकल मैकेनिक्स की बात करते हैं। पारंपरिक स्टैटिक एनालाइजर्स इन एडवांस्ड स्कैम्स को पकड़ने में चूक क्यों जाते हैं? क्योंकि स्कैमर्स कॉन्टेक्स्ट-अवेयर (context-aware) लॉजिक लिखते हैं।
रुकिए... लोग अभी भी यह क्यों सोचते हैं कि Etherscan पर कोड वेरिफाइड होने का मतलब सेफ्टी की गारंटी है? जब भी कोई किसी "वेरिफाइड" प्रोजेक्ट में पैसे गंवाने की शिकायत करता है, मैं खुद से यही सवाल पूछता हूँ। सोर्स कोड वेरिफिकेशन सिर्फ इतना साबित करता है कि डिप्लॉयड EVM बाइटकोड सबमिट की गई Solidity फाइलों से मैच करता है। इससे यह बिल्कुल साबित नहीं होता कि उन फाइलों के अंदर लिखा लॉजिक एथिकल है या मैलिशियस!
हनीपॉट की ट्रिक: गैस-ग्रीफिंग और डायनामिक टैक्सेस
हनीपॉट की एक आम तकनीक यह है कि शुरुआती डिप्लॉयमेंट के समय स्टैंडर्ड 2% फीस रखी जाती है, और जैसे ही पूल में काफी लिक्विडिटी आ जाती है, _transfer() फंक्शन के अंदर फीस बढ़ाकर 99% कर दी जाती है।
इससे भी बदतर होते हैं डायनामिक गैस-ग्रीफिंग (gas-griefing) हनीपॉट्स:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/*
* वाइल्ड में पकड़े गए हनीपॉट लॉजिक का मेरा रिवर्स-इंजीनियर रिप्लिका।
* इसे डिप्लॉय न करें। यह सिर्फ एजुकेशनल ब्रेकडाउन के लिए है।
*/
contract SneakyHoneypot {
address private _owner;
mapping(address => bool) private _isWhitelisted;
mapping(address => uint256) private _balances;
constructor() {
_owner = msg.sender;
_isWhitelisted[msg.sender] = true;
}
function transfer(address to, uint256 amount) public returns (bool) {
_transfer(msg.sender, to, amount);
return true;
}
function _transfer(address from, address to, uint256 amount) internal {
require(_balances[from] >= amount, "ERC20: balance too low");
// अगर यह सेल ऑर्डर है (पेयर एड्रेस पर ट्रांसफर) और सेंडर व्हाइटलिस्टेड नहीं है
if (!_isWhitelisted[from] && !_isWhitelisted[to]) {
// ट्रिक: इनफिनिट लूप या हैवी मेमोरी एलोकेशन से भारी मात्रा में गैस बर्न करना
// जिससे खरीदार का ट्रांजैक्शन "Out of Gas" एरर के साथ फेल हो जाए!
assembly {
let m := mload(0x40)
mstore(m, 0xdeadbeef)
// सेल के प्रयासों पर आर्टिफिशियली गैस बर्न करें
invalid()
}
}
_balances[from] -= amount;
_balances[to] += amount;
}
}देखा आपने यहाँ क्या होता है? जब आप खरीदते हैं, तो सब कुछ स्मूथली हो जाता है। लेकिन जैसे ही आप Uniswap पर swapExactTokensForETH कॉल रूट करते हैं, कॉन्ट्रैक्ट चेक करता है कि आपका वॉलेट व्हाइटलिस्टेड है या नहीं। अगर नहीं है, तो यह invalid() ऑपकोड या एक इनफिनिट लूप एग्जीक्यूट कर देता है, जिससे पूरी एलोकेटेड गैस कंज्यूम हो जाती है और ट्रांजैक्शन एक उलझाने वाले एरर के साथ रिवर्ट हो जाता है। ज्यादातर रिटेल यूज़र्स सोचते हैं कि "Slippage बहुत कम है" और हार मान लेते हैं, जबकि देव धीरे-धीरे पूरी पूल को खाली कर देता है।
4. वॉलेट ड्रेनर्स Web3 डिफेंसेस को कैसे बायपास करते हैं
चलिए ऑफ-चैन सिग्नेचर एक्सप्लॉइट्स—खासकर Permit2 और EIP-712 के गलत इस्तेमाल पर चर्चा करते हैं।
पारंपरिक अलाउंसेस (allowances) के लिए आपको approve(spender, amount) कॉल करते हुए एक ऑन-चैन ट्रांजैक्शन भेजना पड़ता है। इसमें गैस फीस लगती है और आपका वॉलेट UI स्पष्ट रूप से पॉप-अप दिखाकर आपको अलाउंस के बारे में वॉर्न करता है।
ड्रेनर स्क्रिप्ट्स Uniswap के Permit2 स्टैंडर्ड या EIP-2612 अप्रूवल्स का इस्तेमाल करके इसे बायपास कर देती हैं। मैलिशियस dApp आपसे आपके वॉलेट सिग्नेचर (eth_signTypedData_v4) का इस्तेमाल करके एक बेहार्म दिखने वाली डेटा स्ट्रिंग साइन करने को कहता है। पर्दे के पीछे, वह डिजिटल सिग्नेचर हमलावर के स्मार्ट कॉन्ट्रैक्ट को आपकी तरफ से बिना किसी अतिरिक्त ऑन-चैन कन्फर्मेशन के, आपके अकाउंट से ERC-20 टोकन्स या NFTs ट्रांसफर करने का डायरेक्ट अधिकार दे देता है!
// ड्रेनर स्क्रिप्ट्स द्वारा तैयार किया गया मैलिशियस पेलोड का सैंपल
const domain = {
name: 'Permit2',
chainId: 1, // Mainnet
verifyingContract: '0x000000000022D473030F116dDEE9F6B43aC78BA3' // ऑफिशियल Uniswap Permit2 एड्रेस
};
const types = {
PermitSingle: [
{ name: 'details', type: 'PermitDetails' },
{ name: 'spender', type: 'address' },
{ name: 'sigDeadline', type: 'uint256' }
],
PermitDetails: [
{ name: 'token', type: 'address' },
{ name: 'amount', type: 'uint160' },
{ name: 'expiration', type: 'uint48' },
{ name: 'nonce', type: 'uint48' }
]
};
// यूज़र को लगता है कि वे किसी साइट पर लॉगिन कर रहे हैं, लेकिन वास्तव में वे मैक्स टोकन बैलेंस साइन कर रहे हैं:
const value = {
details: {
token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC
amount: "1461501637330902918203684832716283019655932542975", // uint160 की मैक्सिमम वैल्यू
expiration: 2000000000,
nonce: 0
},
spender: "0xMaliciousAttackerContractAddressHere...",
sigDeadline: 2000000000
};अगर आप इस पेलोड को साइन कर देते हैं, तो अटैकर उस ऑफ-चैन सिग्नेचर को लेता है, उसे खुद Permit2 कॉन्ट्रैक्ट में सबमिट करता है, गैस फीस पे करता है, और पलक झपकते ही आपके USDC चुरा लेता है।
5. EVM Bytecode की रिवर्स इंजीनियरिंग: बिना सोर्स कोड के स्कैम कैसे पकड़ें
जब कोई नया टोकन Etherscan या BscScan पर अभी तक वेरिफाई नहीं हुआ होता है, तब क्या होता है? ज्यादातर लोग दूर भाग जाते हैं। लेकिन एक CTO (और पूर्व सिक्योरिटी ऑडिटर) के तौर पर, अनवेरिफाइड बाइटकोड में ही असली मज़ा शुरू होता है। कोई कॉन्ट्रैक्ट आपको चूना लगाने की कोशिश कर रहा है या नहीं, यह पता लगाने के लिए आपको असल में ओरिजिनल Solidity सोर्स कोड की जरूरत नहीं होती।
जब डेवलपर्स Solidity कोड को EVM बाइटकोड में कंपाइल करते हैं, तो फंक्शन के नाम 4-बाइट के आइडेंटिफायर्स में बदल जाते हैं जिन्हें Function Selectors कहा जाता है (फंक्शन सिग्नेचर के Keccak-256 हैश के शुरुआती 4 बाइट्स)।
उदाहरण के लिए, transfer(address,uint256) का हैश हमेशा 0xa9059cbb ही बनता है।
अगर आप किसी अनवेरिफाइड कॉन्ट्रैक्ट का बाइटकोड Dedaub Bytecode Decompiler या ethervm.io जैसे टूल में पेस्ट करते हैं, तो सीधे सेलेक्टर डिस्पैचर को देखें या रॉ बाइटकोड में इन संदिग्ध फंक्शन हैश को सर्च करें:
0x40c10f19 -> mint(address,uint256)
0xbf8b0f72 -> enableTrading() / setTradingStatus(bool)
0x0283c741 -> setFee(uint256)
0xe47d6060 -> setBlacklist(address,bool)रुको... आपको इन सटीक सिग्नेचर्स की परवाह क्यों करनी चाहिए? क्योंकि अगर किसी अनवेरिफाइड टोकन कॉन्ट्रैक्ट में 0x40c10f19 (mint) मौजूद है और उसका ओनरशिप भी रिनउंस नहीं हुआ (un-renounced owner) है, तो डेवलपर बिना किसी को बताए हवा में से 10 बिलियन टोकन मिंट करके सीधे अपने प्राइवेट वॉलेट में डाल सकता है, उन्हें Uniswap पर डंप कर सकता है और कुछ ही सेकंड में लिक्विडिटी का एक-एक पैसा खाली कर सकता है।
यहाँ web3.py का इस्तेमाल करके बनाया गया एक सिंपल Python स्निपेट है, जिसे मैं इंटरनली किसी भी टोकन के साथ इंटरैक्ट करने से पहले अनवेरिफाइड कॉन्ट्रैक्ट बाइटकोड में खतरनाक एडमिन क्षमताओं को स्कैन करने के लिए इस्तेमाल करता हूँ:
# अनवेरिफाइड EVM बाइटकोड में हाई-रिस्क फंक्शन सिग्नेचर्स को डिटेक्ट करने के लिए इंटरनल सिक्योरिटी टूल का स्निपेट।
# स्मार्ट कॉन्ट्रैक्ट इन्वेस्टिगेशन के दौरान त्वरित ऑटोमेटेड चेक्स के लिए लिखा गया है।
from web3 import Web3
# पब्लिक RPC नोड से कनेक्ट करें
w3 = Web3(Web3.HTTPProvider('https://eth.llamarpc.com'))
# जाने-माने हाई-रिस्क 4-बाइट फंक्शन सेलेक्टर्स (Keccak-256 हैश)
DANGEROUS_SELECTORS = {
"0x40c10f19": "mint(address,uint256)",
"0xe47d6060": "setBlacklist(address,bool)",
"0x8a8c523c": "preventSell(address)",
"0x70480932": "pauseTrading()"
}
def analyze_bytecode(contract_address: str):
# चेन से रॉ बाइटकोड प्राप्त करें
code = w3.eth.get_code(Web3.to_checksum_address(contract_address)).hex()
if code == '0x' or len(code) <= 2:
print("[-] एड्रेस पर कोई डिप्लॉयड कॉन्ट्रैक्ट कोड नहीं है (EOA).")
return
print(f"[+] EVM बाइटकोड एनालाइज़ किया जा रहा है: {contract_address}")
found_flags = []
for selector, func_name in DANGEROUS_SELECTORS.items():
# रॉ हेक्स स्ट्रिंग में मैच करने के लिए '0x' प्रीफिक्स हटाएं
clean_selector = selector[2:]
if clean_selector in code:
found_flags.append(func_name)
if found_flags:
print("[!] रेड फ्लैग चेतावनी! बाइटकोड में खतरनाक फंक्शन्स पाए गए:")
for flag in found_flags:
print(f" - {flag}")
else:
print("[+] स्टैंडर्ड स्कैन में कोई बुनियादी हिडन एडमिन सेलेक्टर्स नहीं मिले।")
# किसी भी एड्रेस के साथ उदाहरण के लिए उपयोग
# analyze_bytecode("0x...")6. ड्रेनर की एडवांस तकनीकें: पॉइज़न्ड अप्रूवल्स & एड्रेस पॉइज़निंग
स्कैमर्स अब सिर्फ DEX लिक्विडिटी पूल पर ही निर्भर नहीं रहते; वे यूजर-एक्सपीरियंस की कमियों और साइकोलॉजिकल ट्रिक्स का इस्तेमाल करके सीधे आपके वॉलेट बैलेंस को निशाना बनाते हैं।
एड्रेस पॉइज़निंग अटैक्स (Address Poisoning Attacks)
क्या आपने कभी अपने वॉलेट की हिस्ट्री देखी है और उसमें 0 ETH या 0.0001 टोकन का ऐसा ट्रांसफर देखा है जो बिल्कुल आपके अपने एड्रेस जैसा दिखता है?
इसी को कहते हैं एड्रेस पॉइज़निंग (Address Poisoning)।
अटैक करने वाले स्क्रिप्ट्स हाई-वैल्यू वॉलेट ट्रांजैक्शंस के लिए मेमपूल (mempool) पर नजर रखते हैं। वे GPU जनरेटर (जैसे profanity) का इस्तेमाल करके एक वैनिटी एड्रेस (vanity address) बनाते हैं, जिसके शुरुआती 4-5 डिजिट और आखिरी 4-5 डिजिट बिल्कुल आपके वॉलेट (या उस एड्रेस से जिससे आप बार-बार लेनदेन करते हैं) से मेल खाते हैं।
फिर, वे transferFrom() का इस्तेमाल करके आपके वॉलेट पर जीरो-वैल्यू ट्रांजैक्शन भेजते हैं।
मकसद क्या है? वे चाहते हैं कि उनका नकली एड्रेस आपकी हालिया ट्रांजैक्शन हिस्ट्री में दिखे। अगली बार जब आप फंड्स भेजने के लिए अपना वॉलेट खोलें, तो एड्रेस टाइप करने या एक-एक कैरेक्टर चेक करने के बजाय, आप अपनी हिस्ट्री से सबसे ऊपर वाला एड्रेस कॉपी-पेस्ट कर लें... और अनजाने में अपना ETH सीधे स्कैमर को भेज दें।
थम्ब रूल: अपनी ट्रांजैक्शन हिस्ट्री लिस्ट से वॉलेट एड्रेस कभी कॉपी न करें! हमेशा बुकमार्क की गई कॉन्टैक्ट लिस्ट, ENS डोमेन से एड्रेस कॉपी करें, या एड्रेस के एक-एक कैरेक्टर को खुद वेरीफाई करें।
7. ऑन-चेन डिफेंस के लिए अल्टीमेट हार्डनिंग चेकलिस्ट
मॉडर्न Web3 में अपने एसेट्स को सुरक्षित रखने के लिए, इस ऑपरेशनल सिक्योरिटी (OpSec) सेटअप को लागू करें:
- इंटरैक्ट करने और स्टोर करने के लिए अलग-अलग हार्डवेयर वॉलेट्स का इस्तेमाल करें: एक डेडीकेटेड "कोल्ड स्टोरेज" हार्डवेयर वॉलेट (Ledger, Trezor, Keystone) रखें जो कभी भी dApps से कनेक्ट न हो, मैसेज साइन न करे, या एयरड्रॉप्स क्लेम न करे। रोजमर्रा के स्वैप्स और एक्सपेरिमेंटल DeFi प्रोटोकॉल इंटरैक्शन के लिए कम फंड वाला एक अलग "बर्नर-वॉलेट" रखें।
- ऑफ-चेन मैसेज की ब्लाइंड साइनिंग (Blind Signing) को रिजेक्ट करें: जब भी संभव हो, अपने हार्डवेयर डिवाइस पर "blind signing" बंद कर दें। अगर कोई वेब dApp
eth_signया किसी ऐसे हेक्स पेलोड की मांग करता है जिसे आप पढ़ नहीं सकते, तो उसे तुरंत रिजेक्ट कर दें। - कस्टम स्पेंड लिमिट्स सेट करें: Uniswap या 1inch पर ERC-20 स्पेंडिंग लिमिट अप्रूव करते समय, कभी भी "Unlimited" न चुनें। अलाउंस (allowance) को मैनुअली उसी सटीक अमाउंट पर सेट करें जितना आप ट्रेड करने का प्लान बना रहे हैं। इस तरह, अगर बाद में प्रोटोकॉल हैक भी हो जाता है, तो आपके बाकी टोकन सुरक्षित रहेंगे।
- नियमित रूप से परमिशन रिवोक (Revoke) करने की आदत डालें: हर महीने की 1 तारीख का कैलेंडर रिमाइंडर सेट करें ताकि Revoke.cash या Etherscan के Token Approval Checker पर जाकर सभी नेटवर्क (Ethereum, Arbitrum, Solana, Base, BSC) पर पुरानी या गैर-जरूरी परमिशन्स को रिवोक किया जा सके।
बस, मुझे लगता है कि हमने सारे कोर मैकेनिक्स कवर कर लिए हैं! अगर आपको कोई संदिग्ध कॉन्ट्रैक्ट दिखता है, कोड स्निपेट्स को लेकर कोई सवाल है, या किसी अजीब से ट्रांजैक्शन हैश को डीकोड करने में मदद चाहिए—तो नीचे कमेंट्स में बेझिझक पूछें। मैं पूरा ट्राई करूँगा कि आपके सवालों का जवाब दे सकूँ!