如何黑一个黑客

最近,在搜检垃圾信息时,我偶然看到了这样一个很普通的邮件。它使用了一个很简单的编造八卦的伎俩,推测奥巴马的性取向,并提供了一个指向一个证明图片的链接。

邮件内容

这条垃圾信息没有什么特别的,但链接指向的这个具有双重后缀的,叫做“you.jpg.exe”的文件却有点研究价值。出于好奇,我把这个文件下载下来,检查它会干些什么事。

我首先做的是看看这个文件真正的文件类型。很显然,它不是一个关于奥巴马的图片,而是一个可以自解压的RAR文件。

RAR文件

通过RAR提取工具,我打开了这个自解压文件,看到了里面的内容。

RAR文件内容

解压了“you.jpg.exe”,检查里面的每一个文件,但发现它们都是经过加密的。于是,我在测试机上直接运行了“you.jpg.exe”,看看会有什么事情发生。双击它后,下面的这个图片跳了出来。嘿嘿,果然不是奥巴马。

考拉

在后台,下列文件被自动安装到了Windows System32目录下:

  • bpk.dat
  • bpk.exe
  • bpkhk.dll
  • bpkr.exe
  • inst.dat
  • pk.bin

而且,在注册表里创建了一个自动运行的autorun命令:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
bpk = <%windir%\System32\bpk.exe>

我在谷歌上搜索这些文件名称,找到了一些有用的信息,测试机上被安装的这些文件是一种键盘监控程序,特别之处是,这是一款商业版的软件,来自Blazing Tools公司,叫做Perfect Keylogger (PK)。这款键盘监控软件可以通过正常的渠道购买和合法的使用,公开宣传功用是监控孩子或员工的上网行为,等等。你可以想象,它同样可以拿来做坏事。

我的分析到这儿差不多准备结束了。但几分钟后,有趣的事情出现了。监控软件连接上了一个远程的FTP服务器,这样我就有了机会捕获这个入侵者的FTP帐户信息了。

Screenshot-Follow TCP Stream

通过拦截到的用户名和密码,我登入了这个FTP服务器,发现了大量的存放有监控日志和受害人桌面屏幕截屏的文件夹。从这些数目众多的日志就可以看出,这个垃圾信息制造者的一条八卦信息的伎俩是多么的有效。

FTP-0424E

下面是这个FTP服务器的注册信息:

Whois

我还不想就这么结束,我对这个监控软件的安装程序做了更进一步的研究,我希望能找到这个窃听事件的幕后人物。

从这个软件的网上帮助页面上的信息中得知,这个程序有一个快捷键能把隐藏着的管理员控制界面或系统托盘图标调出来。缺省的快捷键是组合的CTRL+ALT+L,但我试了一下,不好使。于是我使用暴力方式尝试各种键组合,终于让我找到了正确的按键。但令人沮丧的是,出现的是下面的窗口:

Password

在打算反编译这款软件、破解它的密码前,我在网上搜索了一下,发现了一些提示。我找到了Chris Pogue个人博客,他很巧是在Trustwave SpiderLabs的一位同事,之前也碰到过这种软件。在他的博客里,他指出密码和一些其它配置属性都存放在一个叫做PK.BIN的加密文件里,监视数据存放在一个叫BPK.DAT的加密文件里。他还说,这些文件可以通过简单的对字节进行和0xAA的XOR运算破解。

我猜测Chris分析的是一个老版本的,因为对0xAA进行XOR并不能解码配置文件。然而,从转换的BPK.DAT文件里可以看出,这种XOR操作还是部分的有效的,为了让转码的效果更好看,我使用了双字节0xAA, 0x00进行XOR操作:

BPKdecoded

我更感兴趣的是PK.BIN这个文件,因为里面存放着这款软件的详细配置信息,其中可能包含这个软件入侵者的信息。可这需要更多的工作,因为很显然,简单的与0xAA进行XOR操作是不能解码的。所有我猜测很可能需要另外一个不一样的XOR值。

以文本模式查看这个文件是下面这个样子,注意看那些很多重复的片段!

Pk.bin.enc

在十六进制模式中,我取出这些重复出现的字符,把它们进行XOR运算:

Pk.bin.hexmode

通过一些python脚本,使我破译了这个文件:

if len(sys.argv) > 1:
    pkhandle = open(sys.argv[1],'rb')
    pkbuffer = pkhandle.read()
    pkhandle.close()

    key=[0x0D,0x0A,0x08,0x05,0x01,0x02,0x06,0x03,0x03,0x0E,0x01,0x08,0x03,0x0C,0x09,0x07,0x05,0x0D,0x0C,0x0B,0x03]
    dec = ''
    ctr = 0
    for i in range(11,len(pkbuffer)):
        a= ord(pkbuffer[i])
        b =key[ctr%len(key)]
        x = a^b
        dec = dec+(chr(x))
        ctr+=1

    dechandle = open('pk.dec','wb')
    dechandle.write(dec)
    dechandle.close()

瞧!(提示:我涂掉了一些细节,以保护FTP服务器上的受害人的信息不外泄)

Pk.dec.textmodeE

解码后的PK.BIN文件向我展示了足够的信息让我能进入管理员控制面板,包括这款软件的管理员密码,FTP服务器密码,软件的购买许可证注册姓名和注册号。我输入管理员密码,很好用,里面我看到了入侵者要窃取哪些信息,以及更多的关于软件的配置信息。

PKPanel

在配置文件里,软件许可证的注册姓名是Charles Onuigbo。

现在,我不确定Charles Onuigbo就是这个入侵者,或真有其人。唯一值得一提的是,这是个在尼日利亚——垃圾邮件制造之国——一个非常常见的名称!

我用邮件向ISP举报了这个FTP站点,希望这个站点能够尽快的被关闭。

更新:我收到了管理这台服务器的公司的一份邮件,里面写到:

"你好-
不知道我的同事是否就此事给你回复过。
我们已经禁止了你所说的这个帐号对这个服务器
的访问权限... "

我再次尝试登录这个FTP服务器,确认这个恶意的FTP帐号已经被封掉了。感谢Liquid Web公司的Alex Kwiecinski和你们团队行动的这么迅速。

[英文原文:Pwning a Spammer's Keylogger ]
分享这篇文章:

12 Responses to 如何黑一个黑客

  1. cyler123 says:

    不得不说。。。标题有点哗众取宠的味道。

    另外,作者足够的蛋疼啊。。。。

  2. Ramiel says:

    这类文章在诸如《黑客X档案》之类的杂志上面有很多啊,感觉有点拉低本站的整体水平。

  3. paladin_t says:

    说实话,看了原文标题再看译文的,觉得这次标题翻译的真不怎么样。

  4. evan says:

    这片文章是本站比较好的文章,如果那个木马不是作者自己写的话。

    普通人看到这个邮件,不知道是木马。一般程序员看到了,知道是木马,就直接删掉了。其他的程序员,就像作者,做了一些事情,让作者:

    提供自己一个锻炼机会,练习各种知识。

    保护普通人,成为上帝。

  5. 若擘 says:

    作者好牛

  6. 河孢子 says:

    以前讨厌这样的故事,现在看着津津有味啊。

  7. poly says:

    最后一句被活生生的翻译成那样的了。

  8. 凌晨 says:

    蛮有趣的,虽然我不是很懂

  9. shirne says:

    这些邮件我一般直接删掉的。
    不过也有一次无聊,下载来看了,是反动的一些资料,就删掉了。

  10. Sandy says:

    有机会,我也来玩一把。

  11. 陈龙 says:

    是用什么监测软件对测试机里的一举一动进行监测的呢?

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据