账号被盗后恢复的办法和原理(附源代码) by maiyude

View this thread on steempeak.com
· @maiyude · (edited)
$5.30
账号被盗后恢复的办法和原理(附源代码)
在steem上玩耍,如果不小心丢了密码怎么办?密码被黑客修改了怎么办?

别惊慌,还是能找回的。办法就是寻找账户创建人恢复账号。

需要的东西有两个
1.30天内用过的账户密码(要有owner权限)
2.一个可靠的账户创建人


原理是如何的呢?我简单用大白话解释一下。

假设这里被盗的账号是@fishaa,而账户创建者就是@maiyude

1.首先@fishaa重设了一个密码,把账户的公钥发给了@maiyude,假设这个公钥就是“STEMXXXNEW"

2.@maiyude通过各种途径,确定了寻求帮助的@fishaa是被盗者本人。(确定这点很重要,因为黑客也可以发出请求协助的要求,不确定的话改来改去个没完。)

3.@maiyude在区块链上发布了一个广播,内容如下
“@fishaa被盗号啦,我是他的恢复人@maiyude,我要帮助他重设新密码为“STEMXXXNEW"。”

4.当上述广播被区块确认后,@fishaa本人就可以去发一个广播,把密码修改回来了。广播内容如下:
“我@fishaa,账号被盗了,我要重设一个新密码。我的新密码是““STEMXXXNEW"”,老密码是“STEMMxxxOLD”。”

5.账号密码成功重设。


这里面账户创建人@maiyude全过程只接触了账号的公钥,不知道私钥,所以非常安全。
@fishaa拥有账户创建人@maiyude为他做证明,同时还使用了老密码和新密码签名广播,所以也验证了他是曾经拥有账户的本人,也验证了账户恢复人@maiyude发广播中的公钥是他的,所以不会出现误领的现象。

### 重点

重设密码有两个重点:
- 1 .需要知道30天内用过的密码,这用于验证账号是不是你的。
- 2.一个可靠的账户创建人很重要!!!如果你的账号创建人是不可靠的,你很可能无法重设密码。并且如果他在创建账号的时候记录了你的密码。那么,在30天内,你的账号很可能被随时随意的修改密码。因为他同时满足了修改密码的两点。

这是非常危险的,如果你的账号使用了不可靠的第三方服务创建,请马上修改账户创建人。

---
---
下面上实操代码

### 第一步,我们让@fishaa重设一个密码:

假设密码为“P579KW3z524GvZupBKeFTK8M1LyRP2uEcwms3X8WfUYXVmhxVqG”,这密码是自己随便打的,你也可以设置为“123456”啥的。

我们可以通过以下代码计算出账户的公私钥:

```
from beemgraphenebase.account import PasswordKey

player="fishaa"
password="P579KW3z524GvZupBKeFTK8M1LyRP2uEcwms3X8WfUYXVmhxVqG"#新密码

#从新密码生成KEY
owner_key = PasswordKey(player, password, role="owner")
posting_key = PasswordKey(player, password, role="posting")
active_key = PasswordKey(player, password, role="active")
memo_key = PasswordKey(player, password, role="memo")

#新密码_私钥
owner_key_private=owner_key.get_private()
posting_key_private = posting_key.get_private()
active_key_private = active_key.get_private()
memo_key_private = memo_key.get_private()
print("新密码私钥")
print("主密码:",password)
print("owner_key:",owner_key_private)
print("posting_key:",posting_key_private)
print("active_key:",active_key_private)
print("memo_key:",memo_key_private)

print("------------------------------")
print("新密码公钥")
owner_key_get_public=owner_key.get_public()
posting_key_get_public = posting_key.get_public()
active_key_get_public = active_key.get_public()
memo_key_get_public = memo_key.get_public()
print("owner_key:",owner_key_get_public)
print("posting_key:",posting_key_get_public)
print("active_key:",active_key_get_public)
print("memo_key:",memo_key_get_public)

```

通过运行上面的代码,我们可以记录下所有的公私钥。
然后我们把owner key的公钥发给账户创建人@maiyude。
这把公钥是:STM7MzCwhcxjjXZj9w8ZnV3HkqKw7cGCvUcQUS1RfHB48XQtCx2BM(owner_key)

通过各种途径联系账户创建人@maiyude,请求协助。

----
## 第二步,账户创建人@maiyude发布一个@fishaa被盗号,需要重设密码的广播,代码如下:

```
from beem.steem import Steem
from beembase import operations
from beem.transactionbuilder import TransactionBuilder


nodes="https://cn.steems.top"#节点

player="maiyude"#账户恢复人
key="5JxxxxxxxxxxxxxxxxxxxxxxxxxxxZwj"#恢复人的active key

toplayer="fishaa"#被恢复者

owner_key="STM7MzCwhcxjjXZj9w8ZnV3HkqKw7cGCvUcQUS1RfHB48XQtCx2BM"#@fishaa的新公钥

s = Steem(keys=[key],nodes=nodes)


who_owner = {'weight_threshold': 1, 'account_auths': [], 'key_auths': [[str(owner_key), 1]]}

op = operations.Request_account_recovery(
    **{
        "recovery_account": player,
        "account_to_recover": toplayer,
        "new_owner_authority": who_owner
    })

tx = TransactionBuilder(steem_instance=s)

tx.appendOps(op)
# 把签名添加并签名
tx.appendSigner(player, "active")

tx.sign()


# 广播
tx.broadcast()
```



![image.png](https://cdn.steemitimages.com/DQmdW11WbJeTKuH3Mc1cjaB4tY8PJsEoAoJFvDjSDKDrrfw/image.png)


成功广播,内含新密码的公钥。

----

## 第三步,被盗者@fishaa发布广播,重设密码

需要旧密码和新密码同时签名

代码如下:

```
from beem.steem import Steem
from beembase import operations
from beem.transactionbuilder import TransactionBuilder
from beemgraphenebase.account import PasswordKey

nodes="https://cn.steems.top"#节点

toplayer="fishaa"#被盗者
password="P579KW3z524GvZupBKeFTK8M1LyRP2uEcwms3X8WfUYXVmhxVqG"#新密码
old_password="P5uPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgH"#30天内老密码




#从新密码获取账户owner公私钥
owner_key = PasswordKey(toplayer, password, role="owner")
owner_key_private=owner_key.get_private_key()
owner_key_public=owner_key.get_public()



#从旧密码获取账户owner公私钥
old_key = PasswordKey(toplayer, old_password, role="owner")# owner key
old_key_private=old_key.get_private_key()
old_key_public=old_key.get_public_key()


#写入广播信息
who_owner_new = {'weight_threshold': 1, 'account_auths': [], 'key_auths': [[str(owner_key_public), 1]]}
who_owner_old = {'weight_threshold': 1, 'account_auths': [], 'key_auths': [[str(old_key_public), 1]]}

op = operations.Recover_account(
    **{
        "account_to_recover": toplayer,
        "new_owner_authority": who_owner_new,
        "recent_owner_authority": who_owner_old,
        "extensions": []
    })

s = Steem(nodes=nodes)
tx = TransactionBuilder(steem_instance=s)

tx.appendOps(op)

# 把签名添加并签名
tx.appendWif(str(owner_key_private))#新密码签名
tx.appendWif(str(old_key_private))#老密码签名
tx.sign()


# 广播
tx.broadcast()
print("完成")

```



![image.png](https://cdn.steemitimages.com/DQmTNvXJfrRFQX13wjSugFY3C3aoX9mkLD26NaLBdv11Qa8/image.png)

成功重设,可以看到,账户的新公钥已经生效了。
下面的signatures有两行,分别是旧密码和新密码的签名生成的。

到此结束

# 再次提醒,一个靠谱的账户恢复人很重要!
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 133 others
👎  
properties (23)
post_id86,144,009
authormaiyude
permlink2dqngr
categoryhive-180932
json_metadata{"tags":["hive-180932","cn","cn-stem","steemstem","cn-programming","palnet","zzan","dblog","diamondtoken","marlians","neoxian","lassecash","upfundme","actnearn"],"users":["fishaa","maiyude"],"image":["https:\/\/cdn.steemitimages.com\/DQmdW11WbJeTKuH3Mc1cjaB4tY8PJsEoAoJFvDjSDKDrrfw\/image.png"],"app":"steemcn\/0.1","format":"markdown"}
created2020-05-27 01:45:42
last_update2020-05-27 05:14:06
depth0
children11
net_rshares9,675,729,165,270
last_payout2020-06-03 01:45:42
cashout_time1969-12-31 23:59:59
total_payout_value2.658 SBD
curator_payout_value2.644 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length4,933
author_reputation21,161,943,744,615
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (198)
@hertz300 ·
鱼哥好犀利😄
拍拍拍
!shop
👍  
properties (23)
post_id86,144,135
authorhertz300
permlinkqaywee
categoryhive-180932
json_metadata{"app":"steemcn\/0.1"}
created2020-05-27 02:03:54
last_update2020-05-27 02:03:54
depth1
children1
net_rshares1,100,489,861
last_payout2020-06-03 02:03:54
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length16
author_reputation76,834,373,699,494
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (1)
@wanghj353 ·
支持你的贴子(by MARLIANS)
properties (22)
post_id86,208,010
authorwanghj353
permlinkre-qaywee-20200602t021815z
categoryhive-180932
json_metadata{"app":"rewarding\/0.1.5"}
created2020-06-02 02:18:15
last_update2020-06-02 02:18:15
depth2
children0
net_rshares0
last_payout2020-06-09 02:18:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length19
author_reputation1,939,893,008
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@teamcn-shop ·
你好鸭,maiyude!
@hertz300赠送1枚SHOP币给你!
![](https://cdn.steemitimages.com/DQmadPZSURDoChgXH9xMdFHEHApQBacDnDK1oUJy5MwVgGF/shop.jpg)

目前你总共有: 2枚SHOP币
<p><sup>查看或者交易 <code>SHOP币</code> 请到 <a href="https://steem-engine.com/?p=market&t=SHOP">steem-engine.com</a>.</sup></p>
无聊吗?跟我猜拳吧! **石头,剪刀,布~**
properties (22)
post_id86,144,140
authorteamcn-shop
permlinkqaywee
categoryhive-180932
json_metadata"{"app":"teamcn-shop bot\/1.0"}"
created2020-05-27 02:04:03
last_update2020-05-27 02:04:03
depth1
children6
net_rshares0
last_payout2020-06-03 02:04:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length288
author_reputation66,748,950,931,416
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@cloudblade ·
剪刀
properties (22)
post_id86,144,784
authorcloudblade
permlinkqaz1fk
categoryhive-180932
json_metadata{"tags":["actnearn"],"app":"actnearn\/0.1","canonical_url":"https:\/\/www.actnearn.com\/@cloudblade\/qaz1fk"}
created2020-05-27 03:52:33
last_update2020-05-27 03:52:33
depth2
children1
net_rshares0
last_payout2020-06-03 03:52:33
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length2
author_reputation82,540,418,526,802
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@teamcn-shop ·
https://4.bp.blogspot.com/-oInLew9OmLU/WoGwDsoWkdI/AAAAAAATXIk/0lhcgqrs4eMRJIfTqNdf9QCG1pbtaTRvwCLcBGAs/s1600/AW785125_09.gif 
  You lose! 你输了!不给我点赞,你就再吃我一拳~
properties (22)
post_id86,144,785
authorteamcn-shop
permlinkqaz1fk
categoryhive-180932
json_metadata"{"app":"teamcn-shop bot\/1.0"}"
created2020-05-27 03:52:42
last_update2020-05-27 03:52:42
depth3
children0
net_rshares0
last_payout2020-06-03 03:52:42
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length157
author_reputation66,748,950,931,416
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@maiyude ·
石头
properties (22)
post_id86,145,230
authormaiyude
permlinkqaz4tt
categoryhive-180932
json_metadata{"app":"steemcn\/0.1"}
created2020-05-27 05:05:51
last_update2020-05-27 05:05:51
depth2
children1
net_rshares0
last_payout2020-06-03 05:05:51
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length2
author_reputation21,161,943,744,615
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@teamcn-shop ·
https://1.bp.blogspot.com/-C7Q9mslTi_4/WoGwG68iCDI/AAAAAAATXJY/bJl5Nwa6CUQ04uj6429OiX4OMoxCLrN6QCLcBGAs/s1600/AW785125_22.gif 
 It’s a tie! 平局!再来!下回我再出拳头!
properties (22)
post_id86,145,234
authorteamcn-shop
permlinkqaz4tt
categoryhive-180932
json_metadata"{"app":"teamcn-shop bot\/1.0"}"
created2020-05-27 05:06:00
last_update2020-05-27 05:06:00
depth3
children0
net_rshares0
last_payout2020-06-03 05:06:00
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length154
author_reputation66,748,950,931,416
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@maiyude ·
石头
properties (22)
post_id86,147,200
authormaiyude
permlinkqazgg2
categoryhive-180932
json_metadata{"app":"steemcoinpan\/0.1"}
created2020-05-27 09:16:48
last_update2020-05-27 09:16:48
depth2
children1
net_rshares0
last_payout2020-06-03 09:16:48
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length2
author_reputation21,161,943,744,615
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@teamcn-shop ·
https://4.bp.blogspot.com/-mmW-s8jFGGo/WoGwFCWm5jI/AAAAAAATXI4/T9UiUyrg7acAFnpPigWlgbdyo-Cb4M8AgCLcBGAs/s1600/AW785125_15.gif 
 You win!!!! 你赢了! 给你1枚SHOP币!
properties (22)
post_id86,147,202
authorteamcn-shop
permlinkqazgg2
categoryhive-180932
json_metadata"{"app":"teamcn-shop bot\/1.0"}"
created2020-05-27 09:16:57
last_update2020-05-27 09:16:57
depth3
children0
net_rshares0
last_payout2020-06-03 09:16:57
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length155
author_reputation66,748,950,931,416
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@luoyanliang ·
支持原创
properties (22)
post_id86,144,557
authorluoyanliang
permlinkqayzwk
categoryhive-180932
json_metadata{"app":"steemcn\/0.1"}
created2020-05-27 03:19:36
last_update2020-05-27 03:19:36
depth1
children0
net_rshares0
last_payout2020-06-03 03:19:36
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length4
author_reputation1,833,721,315,508
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@cloudblade ·
不错的介绍
很详细
properties (22)
post_id86,144,783
authorcloudblade
permlinkqaz1fe
categoryhive-180932
json_metadata{"tags":["actnearn"],"app":"actnearn\/0.1","canonical_url":"https:\/\/www.actnearn.com\/@cloudblade\/qaz1fe"}
created2020-05-27 03:52:27
last_update2020-05-27 03:52:27
depth1
children0
net_rshares0
last_payout2020-06-03 03:52:27
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length9
author_reputation82,540,418,526,802
root_title账号被盗后恢复的办法和原理(附源代码)
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000