作者laechan (小太保)
看板mud
標題[wizs] 數字圖程式
時間Fri Oct 7 10:58:02 2011
※ [本文轉錄自 mud_sanc 看板 #1EZcght6 ]
作者: laechan (小太保) 看板: mud_sanc
標題: [wizs] 數字圖程式
時間: Fri Oct 7 10:57:43 2011
假設底下為顯示範圍
┌──────────────────────────┐
│1234567890123456789012345678901234567890123456789012│
│2 │
│3 │
│4 │
│5 │
│6 │
│7 │
│8 │
└──────────────────────────┘
2005年時寫過類似的東西,不過當時功力還不足,玩家有寫出
過辨識程式。
現在的話,要寫出程式無法辨識的數字圖基本上是辦得到的。
基本流程簡述如下..
一、r=random(數字範圍)
二、進行每個數字的顯示大小及字樣定義
a.先決定大小
b.再跑出字樣
c.儲存起來
三、再進行每個數字之間的「起始顯示位置設定」,以顯示圖
範圍為例,假設要顯示六位數字,那基本上最大寬度公式
max w = 2x2 + 7 x 6 + (7-1) = 52
四、加入雜訊
五、秀圖
這支程式並不難寫,出來的數字圖類似底下...
┌──────────────────────────┐
│1234567890123456789012345678901234567890123456789012│
│2 * **** * * ** * ****** * *** ** ** │
│3 * * ****** * * * * │
│4 *** ** **** ** * * * * ** *** │
│5 * * * ** **** ****** * * │
│6 *** ** *** *** * * * ** * ** * │
│7 * * * * * * * * * *│
│8 * * ***** * ****** │
└──────────────────────────┘
答案:284739
上面的意思就是..
一、數字的大小至少就有三種樣式(佔5、6、7行)
二、數字的起始顯示位置(從左上算起)最多有 3x5 種,不過依
數字的大小最少則是 5 種(平移區間)。
三、數字的字樣是隨機的,也就是殘缺or腫瘤顯示,例如4那個
字,左上就出現多餘的 *,而中段就缺少一個 *。
四、數字之間是可以交疊的,例如 7 跟 3。
五、數字圖攙了一定數量的「雜訊」,例如你會看到空白處有出
現 * 號。
像這種圖要破解就有一定難度了。若要做為防機程式,則有幾個
原則必須掌握..
一、我們允許程式跑出「真的無法辨識的圖」。
然後請玩家等待一段時間等圖更新再試一次即可。這時的重
點就放在「這類圖的出現機率真的很低」。
二、我們允許玩家輸入錯誤的重試,但是重試必須限制時間及次
數。
然後失敗次數超過就要等待一段時間等圖更新再試一次。例
如玩家就有可能把上圖猜成「28
9739」,這時當然會
顯示猜錯答案,沒關係,玩家這時就會知道答案應該是「2
8
4739」。適度的容錯是必要的。
比方容錯三次,這樣真正手動的玩家才能有機會在三次內猜
到答案。
三、程式無法百分之百防止掛機
這是因為不可能玩家每做什麼就跑出該判斷(會被玩家罵死)
,所以這時應該把程式擺在「重點處」,例如說 recall 點
、補品補充店、公會adv/train、以及像是不應該被經常使
用但偶爾必須用到的 en 指令、go 指令(行走)、login 時..
然後設定好週期觸發時間即可,例如玩家走動時只要判斷時
間到了就自動出現數字圖,然後玩家未回答出正確答案前就
不允許其走動、以及做其它相關的指令(en、recall等)。
然後允許玩家即使看到了數字圖也可以不必馬上回答,有空
時再回答即可(比方它正在戰鬥中這樣)。
也就是說不需要要求 100% 的防堵率,反而才能讓防機效率
達到最好。
以上心得跟大家分享。
Laechan@Sanc
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.81.23.70
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.81.23.70
※ 編輯: laechan 來自: 115.81.23.70 (10/07 11:00)
推 QQmother:免空抓A片常會看到這種(誤 10/07 15:45
推 vagniphor:7跟3疊再一起好難認 除非顏色不同 10/08 01:18
推 GhostTW:不說看不出來= =" 10/08 12:07
→ laechan:基本防破解的手段之一就是數字交疊 10/08 12:09
底下是自行在記事本『清除雜訊&殘缺填補』後的結果
****** * * ****** ******
* * * ****** * * *
****** ******* * * * * ******
* * * ******* ****** *
****** ******* * * * *
* * * * * *
******* * ******
實際的顯示是無邊框的。原則上雜訊量跟殘缺量的多寡
是可以控制的,但基本原則不變..
一、每個數字的大小不能完全一樣
二、每個數字的顯示起始位置也不能有規律
三、允許數字交疊顯示 <= 重點
這樣即便透過 zmud 產生字圖圖形檔,要寫該圖形檔的
解析程式也不是那麼好寫的。
(反過來說若不允許交疊,就有被輕易破解的可能)
※ 編輯: laechan 來自: 122.117.11.103 (10/08 23:57)
推 cutecpu:推,第一次看到 mud 引進 captcha 防機器人的作法 10/17 00:51