没有作弊的抽奖程序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xuboying
V2EX    分享创造

没有作弊的抽奖程序

  •  
  •   xuboying 2017-03-16 1455:28 +08:00 5939 次点击
    这是一个创建于 3213 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    111.gif

    第 1 条附言    2017-03-16 15:30:38 +08:00
    这个程序里根本就没有随机数生成函数啊,梗里一直要 review 代码的同学到底会不会 review 啊。
    第 2 条附言    2017-03-16 16:32:37 +08:00
    感觉是“梗”的诉求错了,要梗里要 review 代码的同学洗洗睡觉吧, hello world 级别的代码也不会信的。
    第 3 条附言    2017-03-17 13:34:41 +08:00
    感觉程序员都好厉害啊,改寄存器,改屏幕,插帧都会。这么有能耐抽什么奖啊,自己造奖品好了。
    40 条回复    2017-03-18 15:47:02 +08:00
    aploium
        1
    aploium  
       2017-03-16 15:07:29 +08:00
    为什么不用 html+js 或者 python 这样的脚本语言?_?
    /*说不定人家直接魔改底层随机数生成器呢*/
    xuboying
        2
    xuboying  
    OP
       2017-03-16 15:09:21 +08:00
    @aploium 要改这个闭源 IDE 程序,修改 for 循环,你要黑了微软和 Intel 。。。
    mahone3297
        3
    mahone3297  
       2017-03-16 15:12:07 +08:00
    这种录屏幕,是用什么程序?
    zjcqoo
        4
    zjcqoo  
       2017-03-16 15:14:17 +08:00   1
    事实上只要是程序,总是能作弊的。可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。

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

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

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

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

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

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


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

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


    你硬要讲 google 的密码学,那么请你帮台下几千名程序员先普及一下密码学的知识,大家不要吃饭吃菜,听你上面滔滔不绝 4 个小时,然后还是没有听懂啊啊啊啊啊
    xuboying
        21
    xuboying  
    OP
       2017-03-16 16:23:46 +08:00
    @typcn 求发个 asm 版本的
    xuboying
        22
    xuboying  
    OP
       2017-03-16 16:31:02 +08:00
    @shoaly 我觉得你说的有道理,感觉是梗的诉求错了,要 review 代码的同学洗洗睡觉吧
    binux
        23
    binux  
       2017-03-16 16:39:59 +08:00 via Android
    @xuboying “梗是基于程序员的”,你是野生程序员吧
    jiangzhuo
        24
    jiangzhuo  
       2017-03-16 17:19:33 +08:00
    只要让所有人都信服就行了,无所谓公平不公平。本来大家就是想看看这群人里谁气运最好,奖品就归谁。既然是比气运就很容易了。
    拿年会抽奖这事来说,所有人聚集到一个屋子里,密封好,放毒气,同时死掉,看来世谁投胎比较好就行了。
    qwertyiuop
        25
    qwertyiuop  
       2017-03-16 17:20:09 +08:00
    用彩票号码当种子
    EricInBj
        26
    EricInBj  
       2017-03-16 17:22:43 +08:00
    我们抽奖是用北京车牌摇号一样的做法。
    伪随机算法,签到顺序形成数组,抽下标。
    种子数可以现场产生,每一桌随便找个人,说一个数字,然后把所有桌子的数字连起来。
    当然也可以去第三方网站产生一个随机数。

    不过现场产生的互动性效果好一点。
    EricInBj
        27
    EricInBj  
       2017-03-16 17:23:58 +08:00
    @sTnaw 这种有个问题,就是说种子得在抽奖编号产生之后确定下来才行。要不然还是可以操作的。过不了 review ,哈哈。
    xierch
        28
    xierch  
       2017-03-16 19:47:36 +08:00
    https://blog.sorz.org/p/p2p-lucky-draw/
    谁来把这个实现一下吧(
    loading
        29
    loading  
       2017-03-16 19:58:45 +08:00 via Android
    随便拿一台手机,打开 codepen.io
    用浏览器跑 js 。
    xierch
        30
    xierch  
       2017-03-16 20:24:58 +08:00
    @xierch 其实很简单啊,就是每个人自己生成一个随机数,藏着。所有人先公布 hash ,再公布随机数,
    最后用所有人的随机数据合起来生成结果。只要保证自己的数别人猜不到,就行了。

    先订好协议,取个帅气的名字,注册个时髦的域名,吸引不同的人写一些不同语言平台的开源实现。

    抽奖的时候,无所谓的人看着就好;想参与的人自己掏出手机开个网页、装个 app ,注入熵;认真的人,自己 review 代码自己编译或者干脆自己照着协议写一个。

    多好,现在就差一个程序员了。
    sgissb1
        31
    sgissb1  
       2017-03-16 21:38:17 +08:00
    关键你录屏的时候如何证明你没有插帧了?
    xuboying
        32
    xuboying  
    OP
       2017-03-16 22:31:09 +08:00 via Android
    @sgissb1 哥哥,用的时候观众自己上来看吧。重建工程也可以的,就 5 行。
    RqPS6rhmP3Nyn3Tm
        33
    RqPS6rhmP3Nyn3Tm  
       2017-03-17 02:44:05 +08:00 via iPhone
    开个浏览器, random.org
    再不济买个摇奖机,物理的怎么作弊
    blackboar
        34
    blackboar  
       2017-03-17 09:43:39 +08:00
    你怎么保证 IDE 没被动过手脚!

    问题的关键不在于用什么技术的,要找出一种办法让大多数人觉得公平就可以了,总是有个别人觉得有内幕有什么办法。
    sgissb1
        35
    sgissb1  
       2017-03-17 10:23:22 +08:00
    @xuboying 大哥,现在可以动态插入帧的。。。所以我只想说天下没有不舞弊的事情,因为不舞弊要做到公正公开。因为你直播也好,录播也罢,就算把人聚集在电脑前写代码抽奖也一样,如何证明每一幅画面就是原始的真实的。
    sgissb1
        36
    sgissb1  
       2017-03-17 10:23:46 +08:00
    @blackboar 这个场子砸的我点 32 个赞!
    xuboying
        37
    xuboying  
    OP
       2017-03-17 13:29:19 +08:00
    @sgissb1 取消抽奖环节,结贴
    xuboying
        38
    xuboying  
    OP
       2017-03-17 13:31:55 +08:00
    @blackboar 没有办吧保证 IDE 没有被动过手脚,也不能保证发给你的奖品是真货,所以取消抽奖环节吧。
    sgissb1
        39
    sgissb1  
       2017-03-17 13:54:21 +08:00
    @xuboying 从抽奖到放弃, 2333333 。你被大家各种压制的飞起
    run2
        40
    run2  
       2017-03-18 15:47:02 +08:00
    我还见过直接用微信摇一摇的
    -。- 其实感觉这样的节奏还行,谁也作不了弊(除非你加了抽奖主持的微信号,[可能]会再也摇不到你)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2366 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 04:30 PVG 12:30 LAX 20:30 JFK 23:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86