|
在闲逛网络几个小时寻找关于此话题的好的文档,我意识到,它根本不存在。我两年多一直在使用MPI,即OpenMPI和MPICH2,并已熟悉在大量环境中有效地执行。我也有经验,通过运作的MPI建立可扩展密码破解。就目前而言,它会告诉你利用所有内核的单台PC的破解,而不是仅仅一个内核。
目标:
安装一组类似可扩展性的目录结构
安装OpenMPI
安装John的Ripper MPI
运行一个简单的测试并破解一个MD5哈希
目录结构的方法
建立一个系统,这几乎是最重要的部分,该系统的可扩展性将不会破坏你升级到最新版本的应用程序。我要迅速列出提纲,我如何为一台机器建立一个目录结构。
/apps/
/apps/myapp1/
/apps/myapp1/v1.x/
/apps/myapp1/v1.x/install/
/apps/myapp1/v1.x/x86_32/
/apps/myapp1/v1.x/x86_64/
/apps/myapp1/v2.x/
/apps/myapp1/v2.x/install/
/apps/myapp1/v2.x/x86_32/
/apps/myapp1/v2.x/x86_64/
/apps/myapp1/latest ? v2.x/
/apps/myapp1/stable ? v1.x/
/apps/myapp1/env/
/apps/
这个基本目录为我们所有的群组用户应用。
/apps/myapp1/
在“myapp1”这种情况下,我们为每个应用程序创建一个基本目录的子目录。
/apps/myapp1/v1.x/
稳定版本的应用程序将低于此目录结构。将使用实际版本号作为目录名称。
/apps/myapp1/v1.x/install/
源代码为这一特定版本将被下载、解压、并汇编于此目录。
/apps/myapp1/v1.x/x86_32/
如果应用程序是汇编的32位处理器,那么这就将被安装并运行。
/apps/myapp1/v1.x/x86_64/
如果应用程序是汇编的64位处理器,那么这就将被安装并运行。
/apps/myapp1/v2.x/
最新版本的应用软件将进入下面这个目录结构。
/apps/myapp1/v2.x/install/
源代码位这一特定版本将被下载、解压、并汇编此目录。
/apps/myapp1/v2.x/x86_32/
如果应用程序师汇编的32位处理器,那么这就将被安装并运行。
/apps/myapp1/v2.x/x86_64/
如果应用程序师汇编的64位处理器,那么这就将被安装并运行。
/apps/myapp1/latest ? v2.x
这是一个符号链接“latest”指向目录命名的不稳定安装的版本。
/apps/myapp1/stable ? v1.x
这是一个符号链接“stable”指向目录命名的稳定安装的版本。
这些符号链接将允许你升级软件,而不是以适应变化需要重建环境。只需修改符号连接指向新版本。如果我有“/apps/myapp1/v1.x/bin/”在所有用户.bashrc的$PATH变量,那么我将必须更新所有用户.bashrc文件,升级到“/apps/myapp1/v2.x/bin/”。通过使用“latest”和“stable”符号链接,你只需要把每个用户的.bashrc文件放置到“/apps/myapp1/stable/bin/”。当要迁移所有用户到“/apps/myapp1/v2.x/bin/”,只需修改“stable”的符号链接指向它。一个简单的更改符号链接,所有用户将自动开始使用最新版本。这对于可扩展性并可让你测试新的版本是非常重要的,不影响其他用户把“/apps/myapp1/latest/bin/”放置到你的$PATH中。
/apps/myapp1/env/
这是脚本和修改用户环境的文件。
硬件和软件
我选择的是GNU/Linux发行版。我已经安装到一个包含“Intel(R) Xeon(R) E5405 @
2.00GHz”四核处理器的服务器。这就是为什么我使用“-np 4”命令。
注意:我使用的是64位的操作系统和软件,注意你的版本。
安装OpenMPI
OpenMPI v1.3.2 (最新版本) / OpenMPI v1.3.1 (稳定版本)
~ # mkdir /apps
~ # mkdir /apps/openmpi
安装 v1.3.2:
~ # mkdir /apps/openmpi/v1.3.2
~ # ln -s /apps/openmpi/v1.3.2 /apps/openmpi/latest
~ # mkdir /apps/openmpi/v1.3.2/install
~ # mkdir /apps/openmpi/v1.3.2/x86_32
~ # mkdir /apps/openmpi/v1.3.2/x86_64
~ # cd /apps/openmpi/v1.3.2/install
~ # wget
http://www.open-mpi.org/software/ompi/v1.3/downloads/openmpi-1.3.2.tar.gz
~ # tar -xf openmpi-1.3.2.tar.gz
~ # cd openmpi-1.3.2
32位系统:
~ # ./configure --prefix=
/apps/openmpi/v1.3.2/x86_32
64位系统:
~ # ./configure
--prefix=/apps/openmpi/v1.3.2/x86_64
~ # make
~ # make install
安装 v1.3.1:
~ # mkdir /apps/openmpi/v1.3.1
~ # ln -s /apps/openmpi/v1.3.1 /apps/openmpi/stable
~ # mkdir /apps/openmpi/v1.3.1/install
~ # mkdir /apps/openmpi/v1.3.1/x86_32
~ # mkdir /apps/openmpi/v1.3.1/x86_64
~ # cd /apps/openmpi/v1.3.1/install
~ # wget
http://www.open-mpi.org/software/ompi/v1.3/downloads/openmpi-1.3.1.tar.gz
~ # tar -xf openmpi-1.3.1.tar.gz
~ # cd openmpi-1.3.1
32位系统:
~ # ./configure --prefix=
/apps/openmpi/v1.3.1/x86_32
64位系统:
~ # ./configure
--prefix=/apps/openmpi/v1.3.1/x86_64
~ # make
~ # make install
~ # mkdir /apps/openmpi/env
~ # cd /apps/openmpi/env
~ # echo ‘export PATH=${PATH}:/apps/openmpi/latest/x86_64/bin’
> prepenv_latest
~ # echo ‘export PATH=${PATH}:/apps/openmpi/stable/x86_64/bin’
> prepenv_stable
编辑/etc/env.d/00basic并修改LDPATH:
LDPATH="/usr/local/lib:/apps/openmpi/latest/x86_64/lib:/apps/openmpi/stable/x86_64/lib"
~ # env-update && source
/etc/profile
运行OpenMPI健全检查:
~ # source /apps/openmpi/env/prepenv_latest
~ # mpirun -np 4 hostname
最后的命令,上面输出的电脑主机四倍。不低,不高,四倍。如果是的话,那么你的“最新”OpenMPI版本正在工作。
~ # env-update && source
/etc/profile
~ # source /apps/openmpi/env/prepenv_stable
~ # mpirun -np 4 hostname
最后的命令,上面输出的电脑主机四倍。不低,不高,四倍。如果是的话,那么你的“稳定”OpenMPI版本正在工作。
安装John the Ripper MPI
John the Ripper MPI v1.7.3.1
~ # mkdir /apps/jtr
安装 v1.7.3.1:
~ # mkdir /apps/jtr/v1.7.3.1
~ # ln -s /apps/jtr/v1.7.3.1 /apps/jtr/latest
~ # mkdir /apps/jtr/v1.7.3.1/install
~ # mkdir /apps/jtr/v1.7.3.1/x86_32
~ # mkdir /apps/jtr/v1.7.3.1/x86_64
~ # cd /apps/jtr/v1.7.3.1/install
~ # wget
http://www.bindshell.net/tools/johntheripper/john-1.7.3.1-all-2-mpi8.tar.gz
~ # tar -xf john-1.7.3.1-all-2-mpi8.tar.gz
~ # cd john-1.7.3.1-all-2-mpi8/src
32位系统:
~ # make linux-x86-sse2
64位系统:
~ # make linux-x86-64
~ # cd
/apps/jtr/v1.7.3.1/install/john-1.7.3.1-all-2-mpi8/run
~ # cp * /apps/jtr/v1.7.3.1/x86_64/
~ # mkdir /apps/jtr/env
~ # cd /apps/jtr/env
~ # echo ‘export PATH=${PATH}:/apps/jtr/latest/x86_64’
> prepenv_latest
~ # echo ‘source /apps/openmpi/env/prepenv_latest’
>> prepenv_latest
~ # echo ‘cd /apps/jtr/latest/x86_64’
>> prepenv_latest
运行John the Ripper健全检查:
~ # env-update && source
/etc/profile
~ # source /apps/jtr/env/prepenv_latest
~ # mpirun -np 4 ./john -test
利用CPU内核的独立电脑
此时,你应该有一个正常运作的MPI环境和一个正常运作的John the
Ripper版本。所以,现在让我们继续前进到最具有乐趣的一部分:破解密码!
我们第一项任务需要建立一个John the
Ripper的清理脚本,因为它创建了大量的文件没有得到清理而运行。如果你不再需要john_log和john.pot文件,可以将它们清除。
~ # cd /apps/jtr/env
~ # echo "#!/bin/bash" > cleanup_latest.sh
~ # echo "rm /apps/jtr/latest/x86_64/john_rec.rec*"
>> cleanup_latest.sh
~ # echo "rm /apps/jtr/latest/x86_64/john_log"
>> cleanup_latest.sh
~ # echo "rm /apps/jtr/latest/x86_64/john.pot"
>> cleanup_latest.sh
~ # chmod + x cleanup_latest.sh
目前整个平台安装了。下一步我们以一个简单的MD5哈希开始测试运行。
~ # env-update && source
/etc/profile
~ # source /apps/jtr/env/prepenv_latest
~ # echo "root:e80b5017098950fc58aad83c8c14978e"
>> md5s.txt
~ # mpirun -np 4 ./john -format=raw-md5 -incremental:alpha
./md5s.txt
Loaded 1 password hash (Raw MD5 [raw-md5])
Loaded 1 password hash (Raw MD5 [raw-md5])
Loaded 1 password hash (Raw MD5 [raw-md5])
Loaded 1 password hash (Raw MD5 [raw-md5])
abcdef
(root)
Process 0 completed loop.
thread: 0 guesses: 1 time:
0:00:00:00 c/s: 1582K trying:
abaflm - abcdch
密码是“abcdef”。如果你对John the Ripper语法有疑问,请阅读相关文档。
每次运行之后,我通常会复制“john.pot”文件到安全位置,然后清除:
~ # /apps/jtr/env/cleanup_latest.sh
尾声
以后我将修改更新此文档,向用户展示如何扩展到群组,跨越许多电脑和许多CPU核心。如果你有问题,利用Bing/Google/Baidu等搜索引擎,或者写信息发送至我(Czy)的E-mail
--> Hack01[at]Live.cn,我会尽力帮你解决所遇到的问题。
# Hacker NetSpy [Czy]
__
__
___
__
__
__
____
_____
_____
_/\_
___
/\ \/\ \ /' __`\ /'__`\/\ \ /
/ /'____\\ _
`\
/\
__`\
/\_ _\ / __\
\ \ \_\ \/\ \/\ \/\ \/\_\ \ \/ / /\ \____ \ \_\
\ \ \ \/\
\
__\//\ \\/\ \___
_____
__ __
\ \
_ \ \ \_\ \ \ \/_/_
\ _\ \ \ ___\
\ _
/ \ \ \ \
\ /'__`\\ \ \\ \___
\/\ _ `\/\ \/\ \
\ \ \ \ \ \
_ \ \ \_\ \ \ \\`\ \ \____
\ \\`\ \ \ \
\ \/\ __/ \ \ \_/ __\ \ \ \_\ \ \ \_\
\
\ \_\ \_\ \_\
\_\ \____/\ \_\ \_\ \_____\ \_\ \_\ \ \_\
\_\ \____\ \ \__\/\____\ \ __/\ \____
\
\/_/\/_/\/_/\/_/\/___/
\/_/\/_/\/_____/\/_/\/_/
\/_/\/_/\/____/ \/__/\/____/\ \
\/ \/ __/\ \
\
\_\
/\_____\
\/_/
\/_____/
|