昨天做一道密码学题目,需要比较大的计算资源才能爆破出几个参数。虽然在本机上跑出了结果,但是毕竟一台笔记本电脑的计算很慢,在遇到其他问题的时候可能就 GG 了。因此今天租用了一台 x86 云服务器来重新做一遍这个计算任务。

0x00 租用服务器

  由于比较熟悉阿里云,就在阿里云上面租了。入口是“超级计算集群”。

  按照自己的计算任务,选择对应的配置。我们这一次任务不需要多少内存,但需要很强的 CPU 主频,故选择计算型。

▲ 选择实例

  另外,这里选择了抢占式实例。也就是竞价使用服务器,当自己的出价够高时成交;不够高时服务器实例被释放。竞价成功后实例会保留至少 1h. 我们的任务在 1h 之内可以跑出来,因此可以选择抢占式实例(比按量计价优惠很多)。

▲ 系统镜像选择 aliyun linux

  系统镜像随便选,我选了基于 CentOS 的 Aliyun Linux.

▲ 网络设置

  网络设置这边,由于我们不会搞出多大的流量,选择按流量计费。

▲ RSA 密钥对

  用自己的 RSA 密钥对登录服务器,此时密码登录将会被关闭,提升安全性。确认订单之后,等待几十秒钟,我们的实例就启动好了。

0x01 爆破

  由于 Python 过于慢,这一次的代码是 C++ 写的。安装 g++lrzsz

yum install lrzsz
yum install gcc-c++    # yum 里面的 g++ 叫做 gcc-c++

  然后改写代码,支持在命令行参数里面指定参数范围,以便之后多进程计算:

int main(int argc, char** argv) {
    // ...

    for(int x = atoi(argv[1]); x < atoi(argv[2]); x++) {
        fprintf(stderr, "calc [%d]\n", x);
        // ...
    }

    return 0;
}
▲ 用 argv 指定爆破范围

  编译的时候注意加 -O3 优化。然后开很多个进程跑就行了。每一个终端的指令如下:

./boom 1234 5678 > crack.log &

  我们一共开了 12 个进程来跑计算,比我的笔记本电脑快了很多。最后  CPU 监控情况如下:

▲ CPU 使用率稳定在 99% 

  我们榨干了服务器 CPU 的性能。几分钟之后,爆破出了正确结果。

0x02 释放实例

  实例用完了不释放会继续收费。做完了计算之后,记得及时释放~

▲ 释放实例

  这一次由于任务比较简单,需要的计算资源不算太高。以后任务需要更多资源的时候,选择更高配置的实例就可以了。