没有作弊的抽奖程序

2017-03-16 14:55:28 +08:00
 xuboying

之前总是看到调侃要 review 抽奖程序的梗,突发奇想,直接在 IDE 里抽奖效果如何。

5322 次点击
所在节点    分享创造
40 条回复
aploium
2017-03-16 15:07:29 +08:00
为什么不用 html+js 或者 python 这样的脚本语言?_?
/*说不定人家直接魔改底层随机数生成器呢*/
xuboying
2017-03-16 15:09:21 +08:00
@aploium 要改这个闭源 IDE 程序,修改 for 循环,你要黑了微软和 Intel 。。。
mahone3297
2017-03-16 15:12:07 +08:00
这种录屏幕,是用什么程序?
zjcqoo
2017-03-16 15:14:17 +08:00
事实上只要是程序,总是能作弊的。可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。

要让大家信服的抽奖,只能依靠第三方客观数据(或者权威数据)生成随机数种子。比如 N 个城市的天气温度、 TOP 10 的股票数据等。之前写过一篇类似的: https://www.cnblogs.com/index-html/p/trusted-lottery-algorithm.html
xuboying
2017-03-16 15:19:16 +08:00
@zjcqoo 你的前提是大家相信你上了一个真网站(无劫持,无错误 api ,网站也没 bug ),得到了真数据,然后程序没有 bug ,生成了真随机数。。。
然后相信 "可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。"的说法不成里

-------------------------------
我这个随机数是我手按 pause 的时刻生成的,你可以让任何人让来点,显然简单多了
代码就两行,小学生也能看懂,
然后相信 "可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。"的说法不成里

来吧,大家 review 我的代码吧
xuboying
2017-03-16 15:20:47 +08:00
@mahone3297 LICEcap
shoaly
2017-03-16 15:27:03 +08:00
所以必须是第三方的, 比如我就觉得 微信群里面 发 100 元红包, 最高的前三名 对应线下的大奖. 应该是绝对公平了
xuboying
2017-03-16 15:29:42 +08:00
@shoaly 这个程序里没有随机数生成函数啊,要 review 代码的同学到底会不会 review 啊。
xuboying
2017-03-16 15:34:07 +08:00
@shoaly 看错了,你是说是完全不用自己的程序。。。好吧,这样的办法也可以。
aploium
2017-03-16 15:36:48 +08:00
扔硬币吧扔硬币吧
pungis
2017-03-16 15:44:34 +08:00
你这和 1 楼没有本质区别,可以作弊的地方多了
关键在于你没有让人绝对可以信服的证据

密码学里早就有可以绝对让人信服的公平抽奖法了
基于人,基于物理都不行
只有基于数学才是绝对可靠的
还是多学学吧
xuboying
2017-03-16 15:47:32 +08:00
@pungis 这是一个面向 review 年会抽奖程序梗的应对方法。 请举出可以作弊的具体地方

并提出你的方法
binux
2017-03-16 15:58:04 +08:00
@xuboying 评估计算速度,按下停止
xuboying
2017-03-16 15:59:32 +08:00
@binux 我小时候玩的小霸王学习机估计可行
pungis
2017-03-16 16:03:54 +08:00
@xuboying
你是程序员吗?难以想象你问这种问题
一台运行 windows 的电脑可以有无数种作弊的地方好吗?
windows api 不懂?
i 的值是不是在文本框?我写个进程 SetWindowText 行不行?
你那结果最终不得是屏幕上显示?我覆盖一张图上去呢?

我的方法上面都说了,自行 google 密码学掷硬币及其扩展
caixiexin
2017-03-16 16:03:59 +08:00
信任体系是建立在有一个所有人都信任的权威存在,就像 HTTPS 的 CA 。
只要能说服所有人的话,剪刀石头布也能抽奖的嘛😌
xdeng
2017-03-16 16:06:08 +08:00
随机生成函数 就是你自己 =.=
shoaly
2017-03-16 16:06:48 +08:00
@xuboying 在场面上, 你说的话的真实性永远无法自证清白.
因为抽奖本身并不是一个科学, 说再多, 听者并不能懂, 也不想懂, 他们只会简单的觉得 这玩意是你做的, 所以你能"控制".
除非你跟抽奖这件事是完全不搭边, 毫无利益牵扯. 所以采用"第三方", 并不是从原理上更清白, 而是大家更容易相信
typcn
2017-03-16 16:14:31 +08:00
很简单啊。。。 Hook 一下绘图函数改数字就完了。。。。
改一行汇编直接换寄存器值都没问题
xuboying
2017-03-16 16:23:06 +08:00
@pungis 我同意你说的可以用系统 api 来处里,有心要做这种事情,你要搞障眼法,那无数的办法都可以。梗里面只是要 review code ,就给大家一个最简单的可以行的办法,因为 code 的好坏也会左右抽奖结果,这个错误可能是无心引入的。既然要 review ,就 review 大家都看不懂的。


什么样的人群抽奖,要用什么样的方式
你在老年人忽悠中心高抽奖,如果你拿个乒乓球,他们会接受,你写个程序,他们会给你一堆问题,这个电脑会不会有硬件“问题”,有没有黑客,你没法用电脑给他们抽奖

梗是基于程序员的,年会抽奖,用的是熟悉的模式环境,熟悉的方法,你能想到的作弊我也能想到,一个 for 循环,估计没有任何流派的程序员看不懂吧,


你硬要讲 google 的密码学,那么请你帮台下几千名程序员先普及一下密码学的知识,大家不要吃饭吃菜,听你上面滔滔不绝 4 个小时,然后还是没有听懂啊啊啊啊啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX