litecoin密码忘记后...

原创 2013年12月02日 20:53:33
知识共享许可协议

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。


       这一段时间一直在挖矿,毕竟买个能玩极品飞车效果全开的中档显卡,只上网有点浪费。所以就挖挖比特币,后来发现以PC机挖比特币就是脑袋抽抽,就改挖莱特币(litecoin)。前几天莱特币价格暴涨(从27到380),就像兑换点人民币买点电。结果突然发现,半年前我脑袋进水了,居然设了一个钱包密码,结果钱包只能进不能出。

       哎呦,这坑爹啊,我试了能想起来的所有密码都不对。眼看着好多money就打水瓢了,不甘心啊!咱是工程师,虽然理论水平不高,不过暴力破解还是可以的,无非是暴力破解自己的密码。那么,现在来梳理一下已知条件和未知条件,以及目标,然后设计一个稍微高效的暴力破解程序

已知条件:

1.我的密码就那几个,不会是一个完全随机数。强度一般

2.litecoin钱包密码可尝试无数次,不会有锁定、验证码的问题

未知条件:

1.如何自动测试密码?这是暴力破解的关键,否则手动输入的话,就不是对程序使用暴力了,而是对自己使用暴力了。(我想起了红烧猪蹄~~~)

2.暴力破解简单来说就是使用程序遍历密码字典,那么字典如何生成?什么样的字段适合现在的情况?

目标:

找到钱包密码

        网上搜了一下,也看了一下litecoin的源码,最后发现litecoin-0.8.5.1这个版本(之前的版本没测试过)有两个钱包程序,一个是daemon方式的,没有GUI;一个是基于QT的GUI。最开始,我在windows环境下,使用python调用win32con库,模拟键盘输入来测试,速度很快,但是密码框没有显示明文,也不知道输入的内容是否正确。也懒得安装QT Creator修改LineEdit的显示属性。感兴趣的话可以自己搜索,不过要注意一点,键码和ascii是不一样的。

        网上很多文章(大部分是转载同一篇文章)都是使用win32con.keybd_event()这个函数,第一个参数是按键码,文章多是说可以通过ord('a')来获取按键码,但是ord是获取ascii码的,与键码基本都不相同。比如,你要模拟键盘输入小写字母'a',它的ascii码为97,按键码是65,所以keybd_event()的第一个参数就是65,而如果要输入大写字母'A',就需要实现shift+a的操作。简单来说,你怎么用键盘输入字符,就怎么使用这个模拟函数。

        扯的远了,回归正题。我最后是在linux环境下,通过rpc和litecoin的守护进程通信,执行unlock操作,进行密码试错的。首先要配置litecoin.conf文件添加rpcpassword,不知道从哪个版本开始使用litecoind需要设置rpc密码了。

~/.litecoin$ cat litecoin.conf 
rpcpassword=123

在命令行启动litecoind守护进程

./litecoind -daemon
建议找一台独立的电脑,把有密码的钱包文件wallet.dat拷过去,避免出现某些不可遇见的错误。

下面这条命令就是用于钱包解锁的

./litecoind walletpassphrase YOUR-PASSWORD 120

如果解锁失败,会返回如下信息

error: {"code":-14,"message":"Error: The wallet passphrase entered was incorrect."}
解锁成功无返回信息,不过重复解锁会返回:

error: {"code":-17,"message":"Error: Wallet is already unlocked."}
如果你看到这个信息,往上找log,肯定有一个密码是正确的


我弄了一个shell脚本自动尝试解锁操作

#!/bin/bash

for line in `cat code`
do
        echo "testing  "$line
        `./litecoind -rpcpassword=123 walletpassphrase $line 120`
        echo $line >> testedcode
done
其中code是字典文件

那么,最重要的字典文件如何创建呢?这个就和个人习惯有关了。我的习惯是用自己常用的密码进行组合生成新的密码,相信很多人都是这个习惯,又可以保证密码强度和长度,又不容易忘记。所以,我用python脚本帮忙生成全排列组合(高中概率学基本知识,看不懂回家翻书),并保存在文件中(这些文件最后一定要都删除了,小心密码泄露)。下面是字典生成代码:

from itertools import product

heads=["aaaa","bbbb"] #这里是常用的密码组合开头
chars=["ccc","dd","123","*()"]

count = 0
f = open("code", "w")
for h in heads:
    for l in range(4):
        ret = list(product(chars, repeat=l))
        for c in ret:
            c = "".join(c)
            c = h+c
            #密码长度规则
            if len(c) < 8:
                continue
            count += 1
            f.write(c+"\n")

f.close()
print count
简单说明一下,itertools.product是python的一个迭代工具中的全排列生成函数,其中repeat表示重复次数,可以在python的执行环境中做做试验,很简单的。

我把密码进行了分组,有些密码是只会出现在开头的(个人喜欢而已)。分组的好处是减少组合个数。


最后,终于把密码找到了,万幸啊!


如果你找回自己的密码,来点捐赠吧,让我有点成就感:LYM4ruVfHn57qLNBdk97VSEv8am8WXRDoy

相关文章推荐

p2pool比特币/莱特币服务器架设篇

p2pool—最好的矿池(没有之一) 彪悍的帖子 不需要回复可见 苦逼的矿工 不要求大家贡献   注 大家最好自己架设矿池!如果手边没有闲置电脑,或懒得维护,可以到下面的矿池挖矿!    BITCOI...

litecoin-0.8.6.2-win32-setup.exe

  • 2014年03月28日 20:21
  • 12.61MB
  • 下载

litecoin-0.8.5.1-win32-setup

  • 2013年11月27日 08:35
  • 13MB
  • 下载

Linux下莱特币Litecoin挖矿教程

装自 http://www.75271.com/1523.html Litecoin(缩写: LTC)是一种点对点的电子货币,也是MIT/X11许可下的一个开源软件项目。Lit...

litecoin-0.6.3c-win32

  • 2013年11月22日 16:57
  • 12.52MB
  • 下载

莱特币(litecoin)矿池(p2pool)架设之WINDOWS篇

莱特币(litecoin)矿池p2pool架设之Windows篇 随着币价的不断下跌,矿池偷算力和手续费,所以本人写了此教程,希望能帮助到有需的人。下一篇应该是LINUX环境下的架设。本教程只是演...
  • hljzzj
  • hljzzj
  • 2015年08月09日 16:15
  • 4216

centOs7 忘记root密码

centOs7root用户密码忘记了,怎样重置root密码呢?
  • niu_hao
  • niu_hao
  • 2016年10月21日 14:22
  • 2811

Fedora 11忘记密码的解决办法

前言:比较喜欢Fedora,但公司用的Ubuntu,因此一直未好好用过Fedora。最近有需要用到了Fedora,那当然要好好耍耍。 环境:别人的Fedora 11机,借来用,不知道root密码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:litecoin密码忘记后...
举报原因:
原因补充:

(最多只允许输入30个字)