自动化Bip39种子回收

我最近忘记了密码,所以被锁在了账本外面。当我试图从我的恢复短语重置时,我意识到我只有24个必要的单词中的23个(不知道它是怎么发生的)。我不确定这个词在哪个位置,但我确信其他23个词的顺序是正确的。也就是说,我必须在其他任何位置上尝试所有的可能性。
我发现这篇文章给了我一个单词列表来填充缺失的单词:丢了比特币钱包,12个助记符种子短语单词中只有11个。我怎样才能得到我的比特币?
我正在寻找一段代码,可以让我搅拌的解决方案,而不用手动尝试钱包一个接一个。
钱包回收
记忆种子
分享
改进这个问题
跟随
10月9日18:52编辑
墨奇♦
52.8K33232金徽章145145银徽章459459铜徽章
10月9日16:59被问到
内特·格雷
3133青铜徽章
你需要一个程序来生成所有可能的组合吗?一个例子是一个程序,里面保存了所有可能的文件组合。或者你正在寻找一个程序来测试所有可能的组合直接在处置?– vincenzopalazzo 10月9日19:49
我现在列出了所有的可能性,通过代码上的链接,原来的职位。我只想有一个自动化的方法来测试大约200个条目的列表(我相信由于校验和规则,列表太小了)。我下载了electrum钱包,并已手动测试了一些,但过程是相当乏味的– 内特·格雷10月9日20:11
添加评论
3个答案
0
你知道钥匙链上的一个地址吗?Ledger使用BIP44派生,因此您可以编写一个循环来检查不同的种子短语,并将结果地址与您知道的应该在keychain中的地址进行比较。这样你就可以在不需要在线的情况下输入恢复词。
例如,如果是我,我可能会用bitcoinjs库写一些东西。下面是用bitcoinjs编写的一个开始(注意,我使用的是3.3.2版)。这将获取一个恢复种子和一个地址,它将搜索密钥链并告诉您地址是否存在于其中。
//var words=“段增加英寸确保玉米雪茄建议获取产量证明”;
//var addr=“1C4XZQX7UH8CNXZAN5CRUJKBXGB1GUWP”;
var searchbtn=document.getElementById(“搜索BTN”);
searchbtn.onclick =函数(){
变量字=document.getElementById(“文字”)。价值;
变量地址=document.getElementById(“地址”)价值;
变量深度=document.getElementById(“深度”)。值;
墨水链(addr,words,depth);
}
函数inkeychain(addr,keychain,depth){
var isfound=假;
对于(var i=0;i<深度;i++){
变量种子=hd.bip39.mnemonicToSeed(钥匙链);
var根=b。bitcoin.HDNode.fromSeedBuffer(种子)
//常量根=bitcoin.HDNode.fromSeedHex(seed.toString(’hex’))
var钱包=root.derivePath(“m/44’/0’/0’/0/”+i);
//遗产
变量地址=wallet.getAddress();
变量wif=wallet.keyPair.toWIF();
//赛格威特p2sh
变量pubKey=wallet.keyPair.getPublicKeyBuffer();
var pubKeyHash=b。bitcoin.crypto.hash160(公开密钥);
var脚本=b。bitcoin.script.witnessPubKeyHash.output.encode(pubKeyHash);
var scripthash=b。bitcoin.crypto.hash160(手稿);
var scriptPubKey2=b。bitcoin.script.scriptHash.output.encode(散列);
变量p2shsegwit=b。bitcoin.address.fromOutputScript(脚本PubKey2);
if(地址===addr){
isfound=真;
console.log(地址,wif);
$(’#result’).html(’在keychain中的’+i+’位置找到了’+addr+’);
警报(’找到!’);
}else if(p2shsegwit===地址){
//检查是否存在segwit p2sh
isfound=真;
console.log(德国威斯康辛州);
$(’#result’).html(’在keychain中的’+i+’位置找到了’+addr+’);
警报(’找到!’);
}
}
if(isfound===false){
$(’#result’).html(’无匹配项’);
}
}
https://bitcoinfunction.com/?id=5d9ea508d9bed
从这里开始,您可以更进一步,让单词变量成为一个包含所有不同组合的数组,然后循环它们。
分享
改进这个答案
跟随
编辑时间:10月10日3:27

我只知道24个单词中的23个,实际上我刚刚发现了我将比特币从另一个钱包转移到分类账的交易记录。在这种情况下,你的方法行得通吗?另外,如果我在electrum中手动测试一组单词,并选择m/84’/0’/0’,而不是m/44’/0’/0’,它是否会显示钱包中是否有硬币?我对电脑略知一二,但有些问题我想不通,所以很抱歉问了一些看似愚蠢的问题。– 内特·格雷10月10日19:53
添加评论
0
从您链接到的相关问题扩展这个答案(使用python),我们可以开始缩小可能性列表。
从已知单词的有序列表开始:
有序\u已知\u单词=[
“荣耀”,
“两次”,
“电影”,
“近”,
“高级”,
“信任”,
“雷声”,
“背书”,
“建议”,
‘方案’,
“习惯”,
‘限制’,
“慢”,
“院子”,
“堵塞”,
“参加”,
‘轴’,
“够了”,
‘仅’,
“魔法”,
“头发”,
‘规则’,
‘区域’,
]
首先,为缺失单词的每个可能位置生成短语模式:
def生成短语模式(有序的已知单词,助记符长度=24):
模式列表=[]
对于范围内的i(0,助记符长度):
列表模板=[‘{x}’]*助记符长度
单词位置=0
对于位置,枚举中的已知单词(有序的已知单词):
如果i<=位置:
列表模板[position+1]=已知单词
其他:
列表模板[位置]=已知单词
单词位置+=1
列表_patterns.append(’,’.join(列表\模板))
返回\u模式的\u列表
这将使列表列表产生如下结果:
{x} ,荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,缓慢,码,阻塞,出席,轴,足够,只有,魔术,头发,规则,区域
荣耀,{x},两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,{x},电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,{x},接近,高级,信任,雷鸣,支持,建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,近,{x},高级,信任,雷鸣,支持,建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,{x},信任,雷鸣,支持,建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,{x},雷鸣,支持,建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,{x},支持,建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,{x},建议,计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,{x},计划,习惯,限制,慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,{x},习惯,限制,缓慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,{x},限制,缓慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,{x},慢,码,阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,缓慢,{x},码,阻塞,出席,轴,足够,只有,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,缓慢,码,{x},阻塞,出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,缓慢,码,阻塞,{x},出席,轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,慢,码,阻塞,出席,{x},轴,足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,缓慢,码,阻塞,出席,轴,{x},足够,只,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,缓慢,码,阻塞,出席,轴,足够,{x},仅,魔术,头发,规则,区域
荣耀,两次,电影,接近,高级,信任,雷霆,支持,建议,计划,习惯,限制,缓慢,码,阻塞,出席,轴,

def生成所有有效短语(短语模式):
从btctools.HD文件导入检查,单词
短语总数=[]
对于短语模式中的模式:
对于单词:
助记符=pattern.format格式(x=文字)
如果检查(助记符):
总计_短语.附加(助记符)
返回总计\u短语
在这一点上,我们有180个有效的24字助记符短语,其中一个包含您的硬币。
而你可以手动检查所有这些,这将是一个乏味的任务。正如m1xolyd1an的回答中所讨论的,如果您知道以前使用的地址之一,我们可以使用这些助记符短语中的每一个来生成每个短语产生的前5个左右的确定性地址,并执行比较以检查地址匹配。
从btctools导入Xprv
导入json
主地址列表=[]
对于所有短语中的短语:
m=从助记符(短语)
#检查前几个地址空间是否存在已知匹配
对于范围(0,5)中的i:
地址=(m/44./0./0./0/i).地址(’P2PKH’)
如果addr==’1C26mdyEsNpe4fpkYtuHzH4Y378wez8mxP’:
主地址_列表.append({addr:phrase})
elif addr==’1BjoCJhvRCx9nVLPaKhg4qQ2YYps8mDgY4’:
主地址_列表.append({addr:phrase})
打印(找到地址匹配:’,len(主地址列表))
打印(json.dumps文件(主地址列表,缩进=4,排序键=True)
如果找到任何地址匹配项,则将它们打印为键值对:
{
“<地址>”:“<记忆短语>”
}
下面是两个以不同方式合并上述逻辑的python脚本:
https://github.com/d-fay/cryptotools/blob/master/solve\u partial\u 12word\u助记符\u example.py
https://github.com/d-fay/cryptotools/blob/master/solve\u partial\u 24word\u助记符\u example.py
分享
改进这个答案
跟随
编辑时间:3月27日1:03
回复时间:2月28日5:49
塔基2
10133青铜徽章
添加评论
-1
1-恐怕您无法找到/搜索24个助记种子短语单词中有23个的比特币地址。
另一个灾难是不知道单词的顺序。
继续。。。我的建议是生成并保存一个熵,就像这个例子中的十六进制值。这样,在这种情况下,您可以轻松检索任何地址。
分享
改进这个答案
跟随
19年10月24日1:23答复
坎雷
1
作者提到要确定其他23个单词的顺序——taky2 Feb 28’20 5:50
添加评论

Web

发表评论

邮箱地址不会被公开。 必填项已用*标注