Re: [新聞] 抽獎被抓包!網友攤開程式碼 發現大獎根本抽不到消失
※ 引述《flydragon198 (Richard)》之銘言:
: ※ 引述《dick58582001 (TwMarco)》之銘言:
: : http://tinyurl.com/zcef2qe 三立
: : 抽獎被抓包!網友攤開程式碼 發現大獎根本抽不到
: : 網路抽獎活動現在非常盛行,近日,東森購物網舉辦了「絕讚iPhone轉轉樂」的抽獎活動
: : ,許多網友都衝著豐富的獎品參加該抽獎活動。但就有網友在臉書上爆料,該抽獎活動完
: : 全抽不到大獎,因為把程式碼打開來看,裡面的程式早已設計好;該消息一出,引發許多
: : 網友熱議,大呼「太讓人驚呆了!」事後,東森購物網也發文致歉,表示是設定時誤植才
: : 釀成這樣的烏龍。
: : 「絕讚iPhone轉轉樂」的抽獎獎品相當吸睛,包括iPhone6S的1元券、2000元折價券等,
: : 但網友就踢爆,這些大獎通通都抽不到,因為這個抽獎的程式碼裡,早就設計好!消息一
: : 出,引起許多網友討論,直說:「太過分了!」另外,曾任柯文哲競選團隊網路部工程師
: : 的王景弘(TonyQ),也在臉書上表示,該程式寫了幾種對應結果,但偏偏沒寫到一元券
: : 的結果,這也代表,主辦單位根本沒想讓人有機會中獎;更有網友搞笑的說,如果這樣騙
: : 人的廣告還能有iPhone中獎者的話,就更好笑了,因為就證明他是「內定的」。
: : 消息曝光後,ETMall東森購物網已在臉書道歉,他們表示,這次抽獎活動的獎品機率,是
: : 設定程式時的失誤,而為了表達歉意,他們也提出彌補辦法,希望可以平息大家的怒氣。
: 稍微簡單講解一下這個程式碼給不懂程式碼的人看
: funtction lastto(returncode) //玩這個遊戲,後端系統會回傳一個數字
: {
: if(parseInt(returncode) == -99) //如果回傳的數字是-99,會顯示系統忙碌
: {
: alert("系統忙碌中,請稍候再試!");
: }
: else if (parseInt(returncode) == -1)
: {
: alert("現在非活動期間內!");
: }
: else if (parseInt(returncode) == 1) //如果回傳1,應該是會顯示折價300
: {
: showPopWin('../R6Images/facebook/FB_iphone/300.html',250,345,'',true);
: }
: else if (parseInt(returncode) == 2) //如果回傳2,應該是會顯示折價500
: {
: showPopWin('../R6Images/facebook/FB_iphone/500.html',250,345,'',true);
: }
: else if (parseInt(returncode) == 3) //如果回傳3,應該是會顯示折價800
: {
: showPopWin('../R6Images/facebook/FB_iphone/800.html',250,345,'',true);
: }
: else if (parseInt(returncode) == 4) //如果回傳4,應該是會顯示折價2000
: {
: showPopWin('../R6Images/facebook/FB_iphone/2000.html',250,345,'',true);
: }
: else
: {
: alert("每人只能玩一次囉!");
: }
: jQuery('#popupTitleBar').css('padding-top','0')
: isPlayer = -25;
: }
: 所以只有回傳上面這些數字會顯示出來對應的訊息或網頁[B,例如300折價券
: 如果returncode回傳5,6,[B7,8這些,都會跳出"每人只能玩一次囉!"
: 再怎麼抽獎都就是上面那些結果,所以
: 誤植?少屁了,就剛好只把折價部分的程式碼寫出來,最好會是誤植
: 我是不知道你們信不信啦,總之我是信了XDDDDDDDDDDDDDDD 誤植
不好意思,本魯只是個因為興趣使然會寫點程式的小嫩咖
有幾個問題想請教專業的大大............
這個判斷系統回傳數字與對應獎項的程式,有必要寫到那麼多個if判斷式嗎?
可不可以先定義一個類似hash or dictionary 的物件,包含可能對應的結果
e.g.
returncodes = {'-99':'系統忙碌中,稍後在式','-1':'現在非活動期間內', \
'1':'/xx/xx/1.img','2':'/xx/xx/2.img', '3':'/xx/xx/3.img'}
然後透過程式下列程式碼,來print出回應
value = returncode() #get returncode from server
value = str(value) #change variable type from int to string
if str(value) in returncodes.keys():
print(returncodes[value])
else:
print ('每人只能完一次')
這樣程式碼應該會比較簡潔,要擴充獎項也會容易許多,
只要把要擴充的獎品,加到hashable的物件裡面就可以了。
不知道實務上,這樣做會有怎樣的缺點?
第二個問題是,實際在開發這種樂透app時,
從伺服器端要一個returncode,
然後由使用者終端這裡判斷程式,給出對應獎項是很正常的作法嗎?
因為如果使用者懂得root手機,就可以看到程式碼,
使用者只要偽造一個回傳的值,就可以欺騙程,拿到自己想要的特定獎品。
顛倒過來,把判斷獎項的程式嗎,放在伺服器端,
由終端這裡,送出一個returncode不是安全許多?
終端這裡的程式碼只要類似這樣就可以了:
retuncode = random(0, 10000) #從0~10000之間隨機選取一個數字
prize = send(returncode, servername)
#把returncode傳給伺服器,並得到伺服器的回傳值
print (prize)[B
而伺服器那邊要寫一個接受終端發出的returncode的程式
和判斷獎項的程式:
prizes ={'one':'count 100', 'two':'count 200'; 'three':'count 300'\
'ip:'iphone[D' }
if prize in prizes:
send(prinzs[prize], terminal_name)
else:
send('Nothing', terminal_name)
這樣也不比較不用擔心程式碼曝光。
這是本魯的一點粗淺想法,希望有高手可以分享一下實物上的作法
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.136.176.152
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1450619635.A.86F.html
→
12/20 21:55, , 1F
12/20 21:55, 1F
推
12/20 21:56, , 2F
12/20 21:56, 2F
※ 編輯: sexyrickysky (140.136.176.152), 12/20/2015 21:58:33
→
12/20 21:57, , 3F
12/20 21:57, 3F
→
12/20 21:58, , 4F
12/20 21:58, 4F
推
12/20 21:58, , 5F
12/20 21:58, 5F
推
12/20 22:00, , 6F
12/20 22:00, 6F
→
12/20 22:00, , 7F
12/20 22:00, 7F
推
12/20 22:01, , 8F
12/20 22:01, 8F
→
12/20 22:02, , 9F
12/20 22:02, 9F
→
12/20 22:02, , 10F
12/20 22:02, 10F
→
12/20 22:03, , 11F
12/20 22:03, 11F
→
12/20 22:06, , 12F
12/20 22:06, 12F
→
12/20 22:07, , 13F
12/20 22:07, 13F
推
12/20 22:10, , 14F
12/20 22:10, 14F
噓
12/20 22:10, , 15F
12/20 22:10, 15F
推
12/20 22:13, , 16F
12/20 22:13, 16F
推
12/20 22:15, , 17F
12/20 22:15, 17F
→
12/20 22:15, , 18F
12/20 22:15, 18F
→
12/20 22:16, , 19F
12/20 22:16, 19F
→
12/20 22:16, , 20F
12/20 22:16, 20F
→
12/20 22:17, , 21F
12/20 22:17, 21F
→
12/20 22:18, , 22F
12/20 22:18, 22F
→
12/20 22:18, , 23F
12/20 22:18, 23F
→
12/20 22:20, , 24F
12/20 22:20, 24F
→
12/20 22:20, , 25F
12/20 22:20, 25F
→
12/20 22:20, , 26F
12/20 22:20, 26F
有點專業,看了好多次稍微搞懂。
所以您的意思是不是指,
他的終端這裡的樂透原始程式碼只是將使用者轉到特定網頁,
告訴使用者得到什麼獎項,真正的折價券之類的代碼或序號,
還是由伺服器這裡發出。
就算我偽造一個retuncode,欺騙終端程式,
我雖然看到了得獎畫面,可是我實際上是沒有拿到真正可以用的折價卷序號?
而終端這裡樂透程式,實際上可以不用寫,
只要寫一個程式,在接收伺服器發出的折價券代碼的同時,
也將使用者得獎的畫面show出來就好?
※ 編輯: sexyrickysky (140.136.176.152), 12/20/2015 22:29:29
推
12/21 13:01, , 27F
12/21 13:01, 27F
→
12/21 13:01, , 28F
12/21 13:01, 28F
討論串 (同標題文章)
完整討論串 (本文為第 7 之 8 篇):