跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

被魚盜刷信用卡?程式的創新應用與風險
  • 卷期:v0072
  • 出版日期:2025-03-20

作者:陳宥霓 / 臺灣大學計算機及資訊網路中心程式設計組行政組員


前言

「日本實況主的信用卡遭盜刷,兇手竟是自家的寵物魚」,不知道大家有沒有看過這個新聞呢?這其實是一個日本實況主「無敵丸」(Mutekimaru)進行寵物遊戲實況,透過安裝簡易的鏡頭追蹤感測器及程式碼控制,讓自家的寵物魚遊玩任天堂知名遊戲《寶可夢 朱/紫》時,發生的意外小插曲。

事實上這並不是無敵丸第一次讓他的寵物魚進行遊戲實況,在2020年時,他就曾讓寵物魚進行過一次《寶可夢 藍寶石》的實況,並在歷經3960小時之後成功通關。那麼,所謂的寵物遊戲實況到底是什麼?無敵丸又是透過什麼裝置達成這樣的效果,就在接下來的章節一一解答。

特殊的遊戲實況模式與無限猴子定理

無敵丸並不是唯一一個以非本人操作遊戲來進行遊戲實況的實況主,在此之前,就曾有過於美國影音串流平台 Twitch(中文譯名:圖奇)發起的寶可夢遊戲實況「Twitch Plays Pokémon」。這個實況模式是透過實況聊天室輸入遊戲指令來控制實況中的遊戲,目標同樣是將遊戲通關,最終在累計高達116萬筆指令輸入後成功結束《寶可夢 紅》的實況。

這令人聯想到,由埃米爾·鮑萊耳於1913年發表的機率學書中提及的無限猴子定理(Infinite monkey theorem),這項定理描述,假設一隻猴子在打字機上隨機地打字,「幾乎必然」可以打出莎士比亞。然而與無限猴子定理不同,不論是無敵丸的寵物遊戲實況,又或是Twitch Plays Pokémon,都相較於無限猴子定理來的更有序且並缺少純粹的隨機性,更何況遊戲的設計邏輯上不具備無限的可能,又或者是聊天室觀眾有意識地去控制。但以這種方式解釋,透過大量嘗試與時間的累積,隨機到最終會有幾乎必然的結果,或許也是這些企劃能成功,甚至在網路上被人盛讚和引發廣泛討論的原因。

 

裝置解析

聊完了實況模式,接下來透過無敵丸的「お魚ポケモンのシステムを完全解説します」影片,我們來分析他的裝置設計,共分為以下四個部分:

  1. 寵物魚及攝影鏡頭
  2. 程式碼
  3. arduino控制設備
  4. 遊戲控制器

 

控制方法是在魚缸中排列了遊戲基本操作需要的A、B及上下左右按鍵,以魚停留在A圖示為例,攝影鏡頭捕捉的畫面,並交由程式碼判斷,當程式碼確認魚的位置對應A指令後,會將該結果傳送至Arduino控制設備,觸發按下遊戲控制器的A按鍵,如此一來寵物魚就能完成一次有效的遊戲操作。

 

程式碼的功能主要分為四個部分:

  1. 色彩追蹤:透過 OpenCV 的 HSV 色彩範圍檢測,尋找特定顏色的物件位置,也就是無敵丸的寵物魚。
  2. 區域計算:計算追蹤物件在畫面上的相對位置,並將其對應到某個控制命令。
  3. 指令傳送:根據物件的位置,向 Arduino控制設備傳送命令。
  4. 時間紀錄:紀錄程式運行時間並將結果存到檔案中。

 

首先在色彩追蹤的部分,無敵丸的「寵物魚員工」不只一位,所以在畫面上程式會選擇面積最大的物體來做處理,並以該物體的位置來決定指令。透過areas = np.array(list(map(cv2.contourArea, contours)))計算輪廓面積,並在後續用於計算該輪廓的中心點。

 

20250320_007211_01

(圖片一:物體輪廓及中心點計算程式碼)

 

一旦確認了魚的所在位置,程式接著進行區域的計算。cmlist是一個含有26個元素的列表,排除開頭的空字串,從索引 1 到 25 代表了不同的遊戲控制按鍵(如「A」、「B」和方向鍵「←」、「↑」、「→」、「↓」)。

 

程式會根據影像中物體的位置來決定發送的指令,透過函式「find_specific_color()」追蹤物體的顏色,並返回由 h/5 和 w/5所定義的5x5的網格中,來對應cmlist中對應的按鍵,並生成z值。程式會根據 z 的值來決定發送哪個指令,例如:當z 為 1、7、13、19 或 25 時,會發送A指令,以此類推其餘的B及方向鍵指令(←、↑、→、↓)。

 

20250320_007211_02

(圖片二:指令判斷程式碼)

 

而發送的A指令除了會送至arduino控制設備用以控制按鍵之外,同時也會記錄在txt文字文件中,並以時:分:秒的格式保存。而arduino控制設備會進一步根據指令來控制對應的硬體,此外,程式還會根據時間間隔來控制按鈕狀態的更新,並且利用 count 變數來調節每個指令的發送頻率。這使得按鈕狀態的改變能夠精確地控制在一定的時間間隔內,避免過快的重複操作。

 

事件發生原因

那麼文章開頭的盜刷信用卡到底為什麼會發生呢?在前面我們有提到,這些寵物魚們能做的操作僅有A、B及上下左右按鍵,而事件發生地是在任天堂Switch中的數位商店Nintendo eShop中,然而並不能跳回主選單,究竟是怎麼辦到的?

原來關鍵是在於遊戲的惡性bug(指會對遊戲過程及體驗造成嚴重影響的、可能導致玩家損失的bug),在遊戲閃退後,又加上無敵丸人並不電腦前,無法及時發現隨著遊戲關閉,這些寵物魚開始對設定和商店進行一系列的「操作」。

首先是開啟了個人檔案頁面,將使用者名稱更改為「ろわわわ¥」,接下來在瀏覽遊戲遊玩歷程記錄的過程中,為了查看遊戲更新情報前往了數位商店Nintendo eShop,並有模有樣的點開了Paypal儲值選項,甚至將使用者服務條款好好地閱讀完畢,此行為更讓無敵丸在影片中吐槽「許多人類都不一定能把使用者服務條款讀完」,在一系列的操作後,寵物魚關閉了數位商店,本以為事情到這裡就結束了,但隨著第二次開啟數位商店,這次寵物魚成功地「盜刷」了主人的信用卡,在觀眾的注目之下儲值了500日圓的商城點數。沒想到這之後,寵物魚還繼續操作,不僅用點數兌換了商城內的道具,甚至下載了一款免費遊戲。

在這之後,無敵丸有試著寫信給任天堂客服,以我的寵物魚的誤操作導致消費,是否可以申請退款,並附上影片佐證,而幸虧最終整起事件迎來了一個好結局,任天堂認可了這筆申請並予以了退款。

 

結語

這一次的事件不只在社群上被廣大的傳播及討論,也引發了對科技與日常生活交織的深思。儘管程式碼可以精確控制物體行為,但在系統能判斷的終究只有有限的選項,在沒有被設想的意外發生時,就可能導向不可預見的結果。無敵丸的企劃讓我們看到了程式碼與物理世界交織的奇妙,但希望下一次他開實況時,要記得關閉他的任天堂Switch的網際網路連線功能,不然如果又遭遇盜刷的結果,希望任天堂也會受理他的退款申請了。

 

參考資料

  1. ライブ配信でペットの魚にクレジットカード情報を公開され、挙句の果てに決済されてしまった件について(https://youtu.be/pkh2u0SRWdQ)
  2. お魚ポケモンのシステムを完全解説します(https://youtu.be/k7ITxfdJ8Mc)
  3. 無限猴子定理(https://zh.wikipedia.org/zh-tw/%E7%84%A1%E9%99%90%E7%8C%B4%E5%AD%90%E5%AE%9A%E7%90%86)