手机验证码登录QQ,出现隐藏QQ?实战爆破一下
林墨白
撰写于 2023年 07月 31 日

源于网络

关于隐藏QQ

前几天在说说中发现引人注目的一条广告。
f202ff37d1c6c345fa6e5287d452fb19.png
说是什么手机号验证码登录就会出现隐藏QQ,秉承着好奇心害不死人的原则试了一下,我把两个手机号试了一下,发现了一个隐藏QQ号,就是:85xxxxxx39这个
7cf9f5473714ab91cc76a4f1910fb7be.png

为什么会有呢?

好问题!据说由于中国人口很大,然后手机号会被重复使用的。我这个才注册没多久的(冤种)腾讯QQ大王卡就是别人用过的手机号(居然二手货,害!),这个隐藏QQ就是别人注册后没解绑或者没绑定手机号默认是注册手机号

登录试试?

试试就试试 哦哟!不得了!腾讯QQ还留了one hand,还要有验证!
cd36e6d4cca422c7a3fb2ce1d304b4f7.png
很显然包括通过资料辅助验证这四种验证方式都行不通

找回密码,再登录

找回密码可以用手机号号找回,这样我们就可以找回隐藏QQ的密码了!但是事与愿违,很可惜这也需要进一步的验证!
5f9af119dab220efc59a01d9033d5367.png

开始爆破

选择爆破方式

如果爆破密码很显然这是一个错误的选择,我选择爆破QQ号码。这样即可以在验证码登录后填写QQ号进行验证,也可以进行用QQ号找回密码然后再用手机验证码验证。

怎样爆破?

众所周知一般的QQ号都是8到10位数。因为85xxxxxx39中的x有6个,所以我断定这个QQ一定有10位,虽然很low的断定但是情有可原,毕竟也是弄着玩。问:10位QQ号中有6位数字不知道,有多少种可能。我毫不犹豫的打开了百度口算出来了,有100万种可能。如果我一个一个搜然后比对头像的话需要很久,就算我一秒一个也需要12天,感觉不多但是前提是得不吃不喝一秒一个,这个手工搜索不现实。
我的垃圾思路:想出来用头像比对的方式来爆破QQ号→代码运行出100万个可能的QQ号→弄到正确QQ头像的原图→通过对每个QQ头像链接进行比对→最后代码来执行比对任务

如何得到100万个QQ

这里使用的是PHP代码执行的,自己使用要适当修改。

//列出100万个QQ号
<?php
$prefix = '85';//前两位
$suffix = '39';//后两位
$total = 1000000; // 总共的可能数量如果是9位QQ的话那就是100000
$result = "";
// 生成可能的中间六位数字
for ($i = 0; $i < $total; $i++) {
    $middle = str_pad($i, 6, '0', STR_PAD_LEFT); // 使用0填充到6位数
    
    $qq = $prefix.$middle.$suffix;
    $result .= $qq."\n";
}
// 将列出结果一行一个QQ号保存到qq.txt
file_put_contents('qq.txt', $result);
echo "可能的QQ号已保存到qq.txt文件中。";
?>

随便上传到一个PHP文件里(例如go.php),第一种:用域名访问该文件(域名/go.php)第二种:SSH终端中运行go.php,两种方式都可以生成,然后服务器里的qq.txt文件里就包涵100万个QQ号了

找正确QQ头像的原图

我们先从QQ上截屏,这个截屏因为比较模糊,所以我们要找它的原图。
d61c3cfa6b3991610722cfa6cf980a21.png
这里没有什么高级的图片变高清或者什么修复的软件和代码。我用的是最朴实无华的百度识图,然后找相识,这个方法仅仅适用于头像是网图的。我这个还是不错找到了
a5a5f37ef7c35efead28f1a4070a7500.jpg
043ebf2c8f8426d44de114f8c9022982.jpg

快速获取其它QQ头像

这里有一个获取QQ头像的链接,高清大图

http://q.qlogo.cn/headimg_dl?dst_uin=QQ账号&spec=640&img_type=jpg

然后我们可以通过PHP代码写出一个可以根据qq.txt文件里的QQ号批量下载QQ头像的代码。

//批量下载图片
<?php
// 检查qq.txt文件是否存在
if (!file_exists('qq.txt')) {
    echo "qq.txt文件不存在";
    exit;
}
// 创建img文件夹
if (!file_exists('img')) {
    mkdir('img');
}
// 读取qq.txt文件
$qqList = file('qq.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 遍历每个QQ号
foreach ($qqList as $qq) {
    $qq = trim($qq); // 去除空格和换行符
    $url = "http://q.qlogo.cn/headimg_dl?dst_uin={$qq}&spec=640&img_type=jpg";
    $imgPath = "img/{$qq}.jpg"; // 图片保存路径及文件名
    // 下载图片并保存
    file_put_contents($imgPath, file_get_contents($url));
}
echo "图片下载完成!";

我们有100万个QQ号,如果一次性全部下载完的话有些废服务器,所以这个代码不好用,优解看下一步。

该如何进行对比?

这个问题问得好!我也不知道,但是我有百度,查到了一个:“感知哈希算法之图片相似度对比
我简简单单的抄袭借鉴了一下,加上批量下载图片。我们可以知道,如果一次性下载完100万张QQ头像服务器是承受不住的,但是我们可以分批处理下载图片。
把代码运行一小会儿后出现了错误:ERR_ADDRESS_UNREACHABLE可能是因为运行时间和内存的原因,我加上了相应限制:

set_time_limit(0);
ini_set('memory_limit', '2048M');

感觉100万张图片全部下载下来很多而且占用空间,所以加了一个每执行完一批就就删除对应的图片。做了一些优化可以让服务器负担更小,比如对循环进行优化,减少不必要的重复计算和使用缓存来减少重复的计算或读取操作,提高性能。最终完整的代码就新鲜出炉咯

//感知哈希算法对比图片相似度
<?php
set_time_limit(0);
ini_set('memory_limit', '2048M');//根据实际情况修改数字
class img_compare
{
    // 比较相似度
    public function compare($img1, $img2)
    {
        $hash1 = $this->gethash($img1);
        $hash2 = $this->gethash($img2);
        if (strlen($hash1) !== strlen($hash2)) return false;
        $count = 0;
        $len = strlen($hash1);
        for ($i = 0; $i < $len; $i++) {
            if ($hash1[$i] == $hash2[$i]) {
                $count++;
            }
        }
        // 返回相似度
        return $count;
    }
    // 将图片文件返回为图像标识符
    public function getimg($url)
    {
        $name = pathinfo($url, PATHINFO_EXTENSION);
        $img = call_user_func('imagecreatefrom' . ($name == 'jpeg' ? 'jpeg' : $name), $url);
        return $img;
    }
    // 获得图片指纹
    public function gethash($url)
    {
        $array = array();
        $total = 0;
        $new_img = imagecreatetruecolor(8, 8);
        list($ex_w, $ex_h) = getimagesize($url);
        $ex_img = $this->getimg($url);
        imagecopyresampled($new_img, $ex_img, 0, 0, 0, 0, 8, 8, $ex_w, $ex_h);
        imagedestroy($ex_img);
        for ($i = 0; $i < 8; $i++) {
            for ($j = 0; $j < 8; $j++) {
                $gray = (imagecolorat($new_img, $j, $i) >> 8) & 0xFF;
                $array[$i][$j] = $gray;
                $total += $gray;
            }
        }
        imagedestroy($new_img);
        $average = intval($total / (8 * 8 * 2));
        $hash = '';
        for ($i = 0; $i < 8; $i++) {
            for ($j = 0; $j < 8; $j++) {
                $hash .= ($array[$i][$j] >= $average) ? '1' : '0';
            }
        }
        return $hash;
    }
}
$file_path = 'qq.txt';
$qq_numbers = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 分批处理参数
$batch_size = 10;
$total_qq = count($qq_numbers);
$num_batches = ceil($total_qq / $batch_size);
// 定义匹配数组
$matched_qq = [];
$img = new img_compare();
// 启用输出缓冲区控制
ob_start();
// 循环遍历分批处理
for ($i = 0; $i < $num_batches; $i++) {
    $start = $i * $batch_size;
    $end = min(($i + 1) * $batch_size, $total_qq);
    // 当前批次的QQ号码
    $batch_qq = array_slice($qq_numbers, $start, $end - $start);
    // 处理当前批次的QQ号码
    foreach ($batch_qq as $qq) {
        // 构建替换后的链接
        $replace_url = str_replace("QQ", $qq, "https://q1.qlogo.cn/g?b=qq&nk=QQ&s=640");
        // 下载图片
        $local_image_path = 'img/' . $qq . '.jpeg';
        file_put_contents($local_image_path, file_get_contents($replace_url));
        // 计算图片相似度
        $similarity = $img->compare($local_image_path, 'img/true/QQ.jpeg');
        // 输出链接对比结果到内容输出框
        echo "QQ号码:" . $qq . ",相似度:" . $similarity . "%\n";
        // 判断相似度是否大于等于90%
        if ($similarity >= 90) {
            // 添加到匹配数组
            $matched_qq[] = $qq;
        }
    }
    // 写入当前批次匹配的号码到trueqq.txt文件
    if (!empty($matched_qq)) {
        file_put_contents('trueqq.txt', implode(PHP_EOL, $matched_qq) . PHP_EOL, FILE_APPEND);
        echo "已匹配的号码已保存到trueqq.txt文件\n";
        $matched_qq = []; // 清空匹配数组
    }
    // 删除下载的图片
    foreach ($batch_qq as $qq) {
        $local_image_path = 'img/' . $qq . '.jpeg';
        if (file_exists($local_image_path)) {
            unlink($local_image_path);
        }
    }
}
// 输出已匹配的号码
if (!empty($matched_qq)) {
    echo "已匹配的号码:\n";
    foreach ($matched_qq as $qq) {
        echo $qq . "\n";
    }
}
// 清空输出缓冲区并关闭
ob_end_flush();
?>

你需要做的!

  1. 在服务器上创建go.php,写入“列出100万个QQ号”的代码后运行,然后会自动创建qq.txt而且里面包涵所以可能的QQ号
  2. 在服务器上创建img文件夹,所有下载的头像将会上传到img文件里里
  3. 在服务器上创建img/true文件夹把正确的头像放在img/true里并命名QQ.jpeg
  4. 在服务器上创建trueqq.txt,这是用于储存正确率三90%的QQ号
  5. 新建一个run.php,将“感知哈希算法对比图片相似度”的代码写入,最后运行
    run.php并得出结果。

最后

结果

结果我是没成功,报错502 Bad Gateway,通常是由服务器端出现问题导致的。因为没钱买高配置的服务器所以报错

帮助

各位大佬,我是小菜。如果有什么代码错误和需要修改的地方,请提出来我好学习学习。

唠叨

就是这个QQ号也是别人的,如果强行给人家拿了。别人应该也会心疼的,如果实在想要可以加爆破得到的QQ,看看有没有人使用 。这个代码写的不怎么好,可能有问题,毕竟服务器的原因没有完成。

2024年1月3日补充

我运行代码的时候一直用的浏览器访问php文件来运行的,所以导致502 Bad Gateway,后来想我发现是可以直接在SSH终端里,使用命令运行php,而且可以长时间运行代码,但是我没有时间来继续实践下去了(主要是那个隐藏QQ号被我解绑了)

手机验证码登录QQ,出现隐藏QQ?实战爆破一下

温馨提示:

本文最后更新于2024年05月06日,已超过74天没有更新,若内容或图片失效,请留言反馈。

源于网络

关于隐藏QQ

前几天在说说中发现引人注目的一条广告。
f202ff37d1c6c345fa6e5287d452fb19.png
说是什么手机号验证码登录就会出现隐藏QQ,秉承着好奇心害不死人的原则试了一下,我把两个手机号试了一下,发现了一个隐藏QQ号,就是:85xxxxxx39这个
7cf9f5473714ab91cc76a4f1910fb7be.png

为什么会有呢?

好问题!据说由于中国人口很大,然后手机号会被重复使用的。我这个才注册没多久的(冤种)腾讯QQ大王卡就是别人用过的手机号(居然二手货,害!),这个隐藏QQ就是别人注册后没解绑或者没绑定手机号默认是注册手机号

登录试试?

试试就试试 哦哟!不得了!腾讯QQ还留了one hand,还要有验证!
cd36e6d4cca422c7a3fb2ce1d304b4f7.png
很显然包括通过资料辅助验证这四种验证方式都行不通

找回密码,再登录

找回密码可以用手机号号找回,这样我们就可以找回隐藏QQ的密码了!但是事与愿违,很可惜这也需要进一步的验证!
5f9af119dab220efc59a01d9033d5367.png

开始爆破

选择爆破方式

如果爆破密码很显然这是一个错误的选择,我选择爆破QQ号码。这样即可以在验证码登录后填写QQ号进行验证,也可以进行用QQ号找回密码然后再用手机验证码验证。

怎样爆破?

众所周知一般的QQ号都是8到10位数。因为85xxxxxx39中的x有6个,所以我断定这个QQ一定有10位,虽然很low的断定但是情有可原,毕竟也是弄着玩。问:10位QQ号中有6位数字不知道,有多少种可能。我毫不犹豫的打开了百度口算出来了,有100万种可能。如果我一个一个搜然后比对头像的话需要很久,就算我一秒一个也需要12天,感觉不多但是前提是得不吃不喝一秒一个,这个手工搜索不现实。
我的垃圾思路:想出来用头像比对的方式来爆破QQ号→代码运行出100万个可能的QQ号→弄到正确QQ头像的原图→通过对每个QQ头像链接进行比对→最后代码来执行比对任务

如何得到100万个QQ

这里使用的是PHP代码执行的,自己使用要适当修改。

//列出100万个QQ号
<?php
$prefix = '85';//前两位
$suffix = '39';//后两位
$total = 1000000; // 总共的可能数量如果是9位QQ的话那就是100000
$result = "";
// 生成可能的中间六位数字
for ($i = 0; $i < $total; $i++) {
    $middle = str_pad($i, 6, '0', STR_PAD_LEFT); // 使用0填充到6位数
    
    $qq = $prefix.$middle.$suffix;
    $result .= $qq."\n";
}
// 将列出结果一行一个QQ号保存到qq.txt
file_put_contents('qq.txt', $result);
echo "可能的QQ号已保存到qq.txt文件中。";
?>

随便上传到一个PHP文件里(例如go.php),第一种:用域名访问该文件(域名/go.php)第二种:SSH终端中运行go.php,两种方式都可以生成,然后服务器里的qq.txt文件里就包涵100万个QQ号了

找正确QQ头像的原图

我们先从QQ上截屏,这个截屏因为比较模糊,所以我们要找它的原图。
d61c3cfa6b3991610722cfa6cf980a21.png
这里没有什么高级的图片变高清或者什么修复的软件和代码。我用的是最朴实无华的百度识图,然后找相识,这个方法仅仅适用于头像是网图的。我这个还是不错找到了
a5a5f37ef7c35efead28f1a4070a7500.jpg
043ebf2c8f8426d44de114f8c9022982.jpg

快速获取其它QQ头像

这里有一个获取QQ头像的链接,高清大图

http://q.qlogo.cn/headimg_dl?dst_uin=QQ账号&spec=640&img_type=jpg

然后我们可以通过PHP代码写出一个可以根据qq.txt文件里的QQ号批量下载QQ头像的代码。

//批量下载图片
<?php
// 检查qq.txt文件是否存在
if (!file_exists('qq.txt')) {
    echo "qq.txt文件不存在";
    exit;
}
// 创建img文件夹
if (!file_exists('img')) {
    mkdir('img');
}
// 读取qq.txt文件
$qqList = file('qq.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 遍历每个QQ号
foreach ($qqList as $qq) {
    $qq = trim($qq); // 去除空格和换行符
    $url = "http://q.qlogo.cn/headimg_dl?dst_uin={$qq}&spec=640&img_type=jpg";
    $imgPath = "img/{$qq}.jpg"; // 图片保存路径及文件名
    // 下载图片并保存
    file_put_contents($imgPath, file_get_contents($url));
}
echo "图片下载完成!";

我们有100万个QQ号,如果一次性全部下载完的话有些废服务器,所以这个代码不好用,优解看下一步。

该如何进行对比?

这个问题问得好!我也不知道,但是我有百度,查到了一个:“感知哈希算法之图片相似度对比
我简简单单的抄袭借鉴了一下,加上批量下载图片。我们可以知道,如果一次性下载完100万张QQ头像服务器是承受不住的,但是我们可以分批处理下载图片。
把代码运行一小会儿后出现了错误:ERR_ADDRESS_UNREACHABLE可能是因为运行时间和内存的原因,我加上了相应限制:

set_time_limit(0);
ini_set('memory_limit', '2048M');

感觉100万张图片全部下载下来很多而且占用空间,所以加了一个每执行完一批就就删除对应的图片。做了一些优化可以让服务器负担更小,比如对循环进行优化,减少不必要的重复计算和使用缓存来减少重复的计算或读取操作,提高性能。最终完整的代码就新鲜出炉咯

//感知哈希算法对比图片相似度
<?php
set_time_limit(0);
ini_set('memory_limit', '2048M');//根据实际情况修改数字
class img_compare
{
    // 比较相似度
    public function compare($img1, $img2)
    {
        $hash1 = $this->gethash($img1);
        $hash2 = $this->gethash($img2);
        if (strlen($hash1) !== strlen($hash2)) return false;
        $count = 0;
        $len = strlen($hash1);
        for ($i = 0; $i < $len; $i++) {
            if ($hash1[$i] == $hash2[$i]) {
                $count++;
            }
        }
        // 返回相似度
        return $count;
    }
    // 将图片文件返回为图像标识符
    public function getimg($url)
    {
        $name = pathinfo($url, PATHINFO_EXTENSION);
        $img = call_user_func('imagecreatefrom' . ($name == 'jpeg' ? 'jpeg' : $name), $url);
        return $img;
    }
    // 获得图片指纹
    public function gethash($url)
    {
        $array = array();
        $total = 0;
        $new_img = imagecreatetruecolor(8, 8);
        list($ex_w, $ex_h) = getimagesize($url);
        $ex_img = $this->getimg($url);
        imagecopyresampled($new_img, $ex_img, 0, 0, 0, 0, 8, 8, $ex_w, $ex_h);
        imagedestroy($ex_img);
        for ($i = 0; $i < 8; $i++) {
            for ($j = 0; $j < 8; $j++) {
                $gray = (imagecolorat($new_img, $j, $i) >> 8) & 0xFF;
                $array[$i][$j] = $gray;
                $total += $gray;
            }
        }
        imagedestroy($new_img);
        $average = intval($total / (8 * 8 * 2));
        $hash = '';
        for ($i = 0; $i < 8; $i++) {
            for ($j = 0; $j < 8; $j++) {
                $hash .= ($array[$i][$j] >= $average) ? '1' : '0';
            }
        }
        return $hash;
    }
}
$file_path = 'qq.txt';
$qq_numbers = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 分批处理参数
$batch_size = 10;
$total_qq = count($qq_numbers);
$num_batches = ceil($total_qq / $batch_size);
// 定义匹配数组
$matched_qq = [];
$img = new img_compare();
// 启用输出缓冲区控制
ob_start();
// 循环遍历分批处理
for ($i = 0; $i < $num_batches; $i++) {
    $start = $i * $batch_size;
    $end = min(($i + 1) * $batch_size, $total_qq);
    // 当前批次的QQ号码
    $batch_qq = array_slice($qq_numbers, $start, $end - $start);
    // 处理当前批次的QQ号码
    foreach ($batch_qq as $qq) {
        // 构建替换后的链接
        $replace_url = str_replace("QQ", $qq, "https://q1.qlogo.cn/g?b=qq&nk=QQ&s=640");
        // 下载图片
        $local_image_path = 'img/' . $qq . '.jpeg';
        file_put_contents($local_image_path, file_get_contents($replace_url));
        // 计算图片相似度
        $similarity = $img->compare($local_image_path, 'img/true/QQ.jpeg');
        // 输出链接对比结果到内容输出框
        echo "QQ号码:" . $qq . ",相似度:" . $similarity . "%\n";
        // 判断相似度是否大于等于90%
        if ($similarity >= 90) {
            // 添加到匹配数组
            $matched_qq[] = $qq;
        }
    }
    // 写入当前批次匹配的号码到trueqq.txt文件
    if (!empty($matched_qq)) {
        file_put_contents('trueqq.txt', implode(PHP_EOL, $matched_qq) . PHP_EOL, FILE_APPEND);
        echo "已匹配的号码已保存到trueqq.txt文件\n";
        $matched_qq = []; // 清空匹配数组
    }
    // 删除下载的图片
    foreach ($batch_qq as $qq) {
        $local_image_path = 'img/' . $qq . '.jpeg';
        if (file_exists($local_image_path)) {
            unlink($local_image_path);
        }
    }
}
// 输出已匹配的号码
if (!empty($matched_qq)) {
    echo "已匹配的号码:\n";
    foreach ($matched_qq as $qq) {
        echo $qq . "\n";
    }
}
// 清空输出缓冲区并关闭
ob_end_flush();
?>

你需要做的!

  1. 在服务器上创建go.php,写入“列出100万个QQ号”的代码后运行,然后会自动创建qq.txt而且里面包涵所以可能的QQ号
  2. 在服务器上创建img文件夹,所有下载的头像将会上传到img文件里里
  3. 在服务器上创建img/true文件夹把正确的头像放在img/true里并命名QQ.jpeg
  4. 在服务器上创建trueqq.txt,这是用于储存正确率三90%的QQ号
  5. 新建一个run.php,将“感知哈希算法对比图片相似度”的代码写入,最后运行
    run.php并得出结果。

最后

结果

结果我是没成功,报错502 Bad Gateway,通常是由服务器端出现问题导致的。因为没钱买高配置的服务器所以报错

帮助

各位大佬,我是小菜。如果有什么代码错误和需要修改的地方,请提出来我好学习学习。

唠叨

就是这个QQ号也是别人的,如果强行给人家拿了。别人应该也会心疼的,如果实在想要可以加爆破得到的QQ,看看有没有人使用 。这个代码写的不怎么好,可能有问题,毕竟服务器的原因没有完成。

2024年1月3日补充

我运行代码的时候一直用的浏览器访问php文件来运行的,所以导致502 Bad Gateway,后来想我发现是可以直接在SSH终端里,使用命令运行php,而且可以长时间运行代码,但是我没有时间来继续实践下去了(主要是那个隐藏QQ号被我解绑了)


版权属于:林墨白 所有,采用《知识共享署名许可协议》进行许可,转载请注明文章来源。

本文链接: https://blog.lmb520.cn/archives/656/

赞 (3)

猜您想看

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论

人机验证