NFT詐騙實例解析|只能買不能賣的NFT?

最後更新日期 2023 年 3 月 16 日

NFT詐騙案例頻傳,從各種新奇的RUG PULL方法到盜取NFT,花招百出。小郡今天從Banka 邦卡的FB貼文分享看到新的詐騙手法出現:受騙者看到某項目的地板價比最低出價還低,因此決定先買入地板價的NFT,再接受出價進行套利,卻沒想到買入NFT之後無法接受出價,也無法掛賣,因此白白浪費錢買入了一張詐騙NFT。小郡在看到這個案例後從受害者錢包追到詐騙合約(因為看到時已經被OpenSea下架了),並研究了合約的交易紀錄和程式碼發現詐騙的手法,來分享給大家。

事發經過

受害者在推特發文中表示,他發現OpenSea上的一個項目Dear Plumber Mario有一個套利的機會。該項目的地板價(在OpenSea掛賣的最低價格)是0.99 ETH,但是最高出價是1.65 ETH。也就是說,如果他用0.99 ETH買入那張NFT,並馬上接受1.65 ETH的出價的話就能現賺0.66 ETH(先不計算版稅以及gas fee)。

在OpenSea進行買賣不會自動配對,必須手動買賣(無論是接受售價還是出價)交易才會成立

然而,事情在他買完NFT準備接受出價的時候發生了。他發現想接受出價時交易會失敗,因此他決定放棄接受出價直接掛賣該NFT,卻發現也無法掛賣,會出現下面的錯誤訊息:

也就是說,他變相買入了一個0.99 ETH的NFT,但卻無法將其轉手,而項目方則是賺走了他買NFT所付的錢。標準的NFT詐騙,一次騙了將近 1 ETH,而且似乎不只他一個受害者。

追蹤線索

由於看到時OpenSea已經把該項目下架,因此我從當前能得到的線索追蹤。

首先,從受害者推特的名稱去找,把packrip ewing丟到OpenSea搜尋出現了一個packripewing.eth的ENS名稱。Bingo,這種名稱通常不會有人買,幾乎可以保證是當事人的錢包。

把當事人錢包地址丟到etherscan去查看交易紀錄,並比對推特上面的發文時間去找出相關的交易紀錄。可以看到有一條Fullfill Basic Order 的交易,該交易與OpenSea互動,而且金額與受騙的0.99 ETH剛好相符,點進去也可以看到有一個名為 DearPlumberMario 的ERC 721傳輸紀錄,因此可以100%確定這筆是受騙的交易,而且也得到詐騙項目的合約地址了。

點進詐騙合約查看交易紀錄,總共418筆,絕大部分是呼叫Set Approval For All跟White List Mint的交易,有點難找。因此我打算直接從受害者掛賣時遇到的錯誤訊息下手。從合約原始碼直接搜尋”Sale will open after mint out”後就看到了有趣的事了。開始解析詐騙手法吧。

NFT詐騙手法解析

在合約原始碼搜尋錯誤訊息後,發現出現的結果總共有四個地方,分別出現在兩個approve跟setApprovalForAll的功能中。其中setApprovalForAll的功能是在OpenSea賣出NFT時一定需要簽署的功能(無論是掛賣還是接受出價)。既然這個錯誤訊息出現在OpenSea,代表一定是這個功能在搞鬼,我們就來看看是什麼原因。

要觸發這個錯誤一定要滿足幾個條件。第一個是334行的!allowedToContract!_addressTransferToContract[msg.sender],第二個是第335行的 operator.isContract()

第二個條件比較直觀,如果你允許的對象是合約而不是錢包(例如OpenSea就是買賣合約)的話就會觸發。但這不能解釋為什麼有人能在OpenSea上掛賣(別忘了受害者是在OpenSea上買入NFT,代表是有人成功掛賣的),所以代表一定是第一個條件在搞鬼。

先來看334行的第一個部分!allowedToContract。一樣在合約程式碼裡搜尋關鍵字”allowedToContract”,看到有一個開關負責設定這個條件:

我們回到交易紀錄查看調用這個紀錄的歷史。嗯,沒出現。代表這個條件從頭到尾沒有變過,所以有人能掛賣受害者卻不能的情況不是因為這個條件造成的。因此我們來找另一個!_addressTransferToContract[msg.sender],這個條件會檢查使用者的地址是否有被登錄,沒有的話就觸發。也就是說,只有被登錄在合約裡的地址才能通過setApprovalForAll這個功能。登錄名單的功能如下:

再回到合約交易紀錄查看,Bingo!在交易頁面的第二頁找到了項目呼叫這個功能的紀錄,解析輸入參數後還能看到有哪些地址是被允許在OpenSea上掛賣的,這些應該都是項目方自己產生的地址吧。

預防方法

看完解析後還是要學一下如何預防這種詐騙。首先,以後在進行這種套利時要千萬小心,如果遇到出價比售價低的情況時要有所警覺,這有可能不是套利機會而是詐騙,建議到Etherscan查看合約是否有怪異的地方。如果項目方完全沒有公開程式碼就絕對不要碰,有公開的話就先檢視合約有沒有問題。另外,不會查看合約程式碼的人小郡直接建議以後不要進行這種套利了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *