危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18787760

内存读取破解QQ密码

QQ账号的安全防护一直是一个热门话题,关于键盘记录等技术的实现方式在网上的讨论非常多。由于攻防不断升级,QQ自身的安全性也在不断提高,从QQ最近几年的技术实现来看,QQ的键盘输入安全一直是重点关注对象,要进行密码获取将会涉及到一些比较底层的技术,难度相对较大。但是,从另外一个角度去思考问题,我们会发现一些用的人不多,却是非常有效的方法,本文危险漫步将为大家介绍使用内存读取的方法来破解QQ密码。

我们通过输入正确的账号密码完成QQ的登录,在这个过程中,QQ除了把账号密码发送到服务器进行验证之外,还会在内存中保存至少一份密码的哈希值,这个值可以进行之后的一些访问的验证,比如打开QQ游戏等。我们要通过内存读取的方式来获得QQ密码,首先需要知道QQ密码哈希值到底放在内存的哪个位置。当然,我们没有必要自己编程搜索哈希值的位置,有一个开源的软件叫Cheat Engine,它本来是用来在打游戏的时候作弊用的,不过我们可以利用它很好地完成搜索哈希值的任务。

首先运行QQ,若版本不同,哈希值的内存存放位置也可能会不一样),输入自己的账号密码登陆之后就不用再管它了。然后我们需要获得自己QQ密码的哈希值,这个值将要被用来搜索QQ进程空间里面密码哈希值的位置。QQ密码的哈希值是用MD5算法计算出来的,所以我们也需要一个MD5计算工具来计算自己的密码的哈希值,这类计算工具非常多,有在线的也有本地的,,笔者用的是一个叫HASH的工具。我们新建一个文本文件,把密码写在里面然后保存文件,用这个工具打开这个保存了密码的文本文件即可看到密码的哈希值为21232F297A57A5A743894AOE4A801FC3。

打开Cheat Engine 5.4,点击左上角的那个小电脑的图标选择我们要打开的进程“QQ.exe”。界面上的“Value type”选择为“Array fo Bytes”,表示我们要搜索连续的字节,勾选“Hex”标签前面的选择框,然后把前面得到的哈希值粘贴到“Hex9后面的文本框。

点击“First Scan”,开始危险漫步的第一次搜索。软件界面左侧马上显示了3个存放哈希值的位置:OOf07494、Ola9a364和Olaba97c。这三个值只是存放了密码哈希值的位置的地址,这些位置可能是会变动的,我还要继续寻找指向这些地址的指针。将“Value fo type”改为“4 Bytes”,分别将上面三个地址粘贴到搜索框,可以得到指向OOf07494的地址为Ola2e448,指向Ola9a364的地址为019749ec,没有找到Olaba97c这个值。现在我们开始感到疑惑了,到底上面哪一个地址才是基址呢?

既然身为基址,那么可以确定的是它在相同的环境中所在的位置是不会变化的。于是,我们可以果断地再开一个QQ,在新开的QQ进程里面重新完成一次上面的过程。这次,还是得到3组和之前类似的数据:指向OOf07494的地址为Ola2e448,指向Ola99c e4的地址为01974aac,没有找到Olaca34c。不难看出,地址为Ola2e448的这个指针在两个QQ里面都没有变,我们可以用这个地址来编程实现内存哈希值读取。

本来已经用MFC写过一个GUI程序,但为了有便讲解,重新写了一个控制台界面的程序,尽量避免MFC内容的干扰。此程序使用VC6.0编写并运行通过。

程序代码的主要思想是例举所有进程名为“QQ.exe”的进程(主要代码在函数GetAllHashValue中),打开进程后读取我们在上文中获得的指针所指向位置的数据(主要代码在函数GetHashValueByProcessID和ReadMemoryData中),最终将数据转换并显示出来(主要代码在ShowHashValue函数中)。以上代码中函数的具体作用在函数前面的注释里面已经有说明,另外里面有一些系统调用,如果不清楚详细用法可以到网上查,这里不再累述。

现在我们可以构建并执行程序,控制台界面将显示出所有正在运行的QQ的密码哈希值。我们在控制台界面点击右键,单击标记,然后选中MD5值的那串文本,再于标题栏点击右键,点击“编辑一>复制”,就可以把文本复制下来了。拿到这串文本,直奔各大MD5破解站吧,如果密码不够强大能马上逆向出来,比如前面示例中的那串MD5值可以逆向得到明文“admin”。

到这里细心的朋友应该发现读取出来的MD5值并没有输出与之相对应的QQ号码,如果一台电脑上开了多个QQ就不好判断密码是哪一个QQ的了。其实,用相同的方法就可以找出内存中保存的QQ号码,比找密码相对来说简单多了,有兴趣的朋友可以继续实践,我是危险漫步,你学会了吗?