行眩铱赡芑嵋恢彼降诙焯炝痢�
“法医那里没找到多少有价值的线索,凶手把现场清理得很干净。”他疲惫地揉揉眼睛,“我们在彭勃那里也没找到什么有用的东西,这个案子可真够窝火的,到现在几乎一点进展也没有。”
“你认为彭勃有嫌疑吗?”
“从他的突然失踪看,他和这个案子肯定有关系,但是我们目前还没有任何确凿的证据证明这一点,所以我才说窝火。”秦思伟叹了口气,塞给我一个条子,“我一会儿去CNCERT——我把彭勃家里用的计算机也搬过去检查了。你把那封邮件转发到他们的办公邮箱吧,这是地址。”
“好的。”我打开电脑,点击进入我的邮箱,发现里面又有一封未读邮件,发件人还是彭勃,时间是17点22分,内容和凌晨的那一封完全一样,还是那幅可爱的图片。
“我觉得他好像想告诉我们什么,但是为什么不直说呢?”我把两封邮件都转发到了秦思伟指定的邮箱,“我也想去应急技术处理中心看看。”
“那你贿赂贿赂我啊。”他嬉皮笑脸地说,“我肚子好饿啊。”
“我就知道你狗嘴里吐不出象牙。”
饱餐了一顿烤鱼和咖喱饭后,我们驱车来到西土城附近的CNCERT。这个机构的办公地点坐落在僻静小巷的尽头,独栋的灰色玻璃大楼里透出的灯光在寂静的夜色中给人一种很威严的感觉,它的全称其实是“国家计算机网络应急技术处理协调中心”,是信息产业部直属的计算机安全事件应急小组。在这里工作的技术人员很多都可以称得上是IT领域的权威。
我们在宽敞的大厅办理了登记手续以后,乘电梯来到中心的五楼,在那里等待我们的是一位年轻的工程师,秦思伟称他为丁博士。
“要找到邮件发送的地址并不是很难。”丁博士一边敲打着键盘,一边给我们解释,“我要先找到发送这个邮件的IP地址,也就是逻辑地址,然后再进一步确定它的物理地址,这需要一点时间。”
“那就拜托您了。”秦思伟专注地看着他的一举一动,“我今天下午让人送来的那台计算机您检查过了吗?”
“我正要跟你说这件事。”丁博士站起身,走到机房的尽头,那里并排摆放着两台单机,“我发现新送来的那台机器上也有一个security文件夹,不知道是不是同样的内容,只是不知道他们用什么算法加的密,我只能用穷举来解码,这恐怕就要很长的时间了。还有,彭勃给你发的图片,正好是姚锐电脑的桌面。”
“难道说,图片里真的有什么玄机吗?”我盯着屏幕上那只憨厚得一塌糊涂的小猫,“这个图片其实除了有点偏大,没什么特别之处啊。”
“偏大?怎么偏大了?”丁博士问我,“这图片就是普通的1024×768啊。”
“我是说一般的1024×768的bmp格式文件,大小都在2MB左右的,这幅图却有3MB——我跟我收集的图片比较过了。而且,bmp格式……为什么是bmp呢?用jpg不是能节省一些空间吗?效果也没什么区别……”
“也许问题就在这里!”丁博士似乎恍然大悟,“这幅图片里也许隐含着文件。”
“您是说,这是用伪装加密软件处理过的图片?”我也突然明白了,“不过因为加密时有些疏忽,导致了图片占用空间偏大了。”
“伪装加密?”秦思伟疑惑地看着我,“能具体说说吗?”
“现在有一些软件可以把文件隐藏在bmp图片中。这样,利用人们的思维定式,就可以确保文件的安全。”
“为什么一定是bmp呢?”
“伪装加密需要将一个文件隐藏在一张图片中,所以必须要求图片中有可供存放文件的位置。有一点常识的人都知道,几MB的bmp文件之所以能被压缩为几百KB的jpg文件,就因为bmp格式没有压缩,在它里面有大量的冗余字符,而这个特点正是伪装加密软件所需要的,这样,只需对图片进行轻微压缩,就能顺利地将文件放入图片中,而jpg图片因为压缩比太高,就不大可能完成这个工作了。”
“原来如此,那我们能解密吗?”秦思伟着急地追问。
“当然没问题。”丁博士轻快地点击着鼠标,“我估计他是用z…file或者hide in picture做的伪装加密,这些软件的特点是,图片的质量不会受影响,但是占用空间会变大。它们用的是128位Blowfish算法,用我编的软件很快就可以破解。”
解密只用了几分钟时间,我们眼前出现一串数字:
10—19—9—1—5—3—19—22—19—8—20—5—21—18—19—4
“果然是密码!”秦思伟乐不可支地说,“快试试看!”
丁博士把数字串输入电脑,结果却是密码错误。我们又尝试着把数字之间的横杠去掉,但还是不对。
“其实,把数字提取出来的话,一共16个,正好可以写成一个4×4矩阵。这是常用的恺撒矩阵。”丁博士一边说,一边在一张白纸上写下:
10 19 9 1
5 3 19 22
19 8 20 5
21 18 19 4
“把这个矩阵做置换,就得到另一个矩阵,也就得到了新的数字组合。”他继续演算:
10 5 19 21
19 3 8 18
9 19 20 19
1 22 5 4
得到一个新的数字串10—5—19—21—19—3—8—18—9—19—20—19—1—22—5—4
但是我们把它输入电脑,还是提示密码错误。
“密码不一定非得是数字吧?”我发现了一个问题,“字母和符号都可以作密码,而且这些数字都是26以内的,会不会是字母密码?”
“你是说1=a,2=b……”秦思伟皱起眉头,“那么原先那串数字就应该换算成j s i a e c s v s h t e u r s d,对吧?”
可是这个字符串仍然不是我们想要的密码。
“我觉得是不是也应该把数字换算成的字母再做变换呢?”丁博士边说边写:
j s i a
e c s v
s h t e
u r s d
“把这个矩阵作置换呢?”我发现眼前的字符变得有规律了,“这样字符串就变成了j e s u s c h r i s t s a v e d,可以组合成单词!”
“jesus christ saved?有点意思啊!”丁博士把这一串字符输入电脑,屏幕上的文件夹图标一闪,弹出一个窗口,里面有3个文件夹。在另一台机器上如法炮制,加密的文件夹里也是同样名称和大小的3个文件夹。
“原来如此啊!”秦思伟长长地呼了口气,“终于把它打开了。丁博士,这些文件夹里是什么内容?”
“是……程序的源代码,不知道是什么重要的代码让他们搞得如此神秘。”
“对了,彭勃发送邮件的地址查得怎么样了?”我突然想起来今天来的主要目的。
“逻辑地址应该查出来了。”丁博士踱到正在追踪的那台机器旁边,“两封信不是同一个IP地址,不过这两个地址是通过同一个地址汇聚上来的,应该是同一个地区。我需要地址的管理者——也就是电信运营商协助找到地址使用的详细信息,这样才能进一步找到发送邮件的物理地址。”
“那需要多长时间呢?难度大吗?”
“难度不是很大,不过一时半会儿的也出不来结果的。那两段程序我要读懂也需要时间。”丁博士笑着说,“两位先回去吧,结果一出来我会通知你们的。”
我们离开CNCERT的时候,下了大半天的雪已经停了,路上的积雪经过汽车的碾轧结成了一层薄冰。街上的车子都小心翼翼地前行,喷洒融雪剂的环卫车也慢吞吞地行驶着。秦思伟虽然一向自诩车技超群,遇到这样的情况也不敢开得太快,磨蹭了一个小时,才把我送到家门口。
“这鬼天气!”他愤愤地嘟囔了一句,把车里的暖气拨到最大,“晚上多盖床毯子啊,别冻感冒了。”
“你还是照顾好你自己吧,黑眼圈都出来了。”
“干我们这一行的就是这样,休息没规律。”他苦笑着,“也不知道丁博士那里什么时候能查出结果。”
“你着急也没用。不过我还是觉得很奇怪,那个security里面的程序到底是什么呢?彭勃为什么要把我们的注意力引到哪里呢?”
“鬼才知道!”
一觉醒来,天已经彻底放晴了,阳光照在路边的积雪上,反射出刺眼的光。小区的花园里,几只宠物狗相互追逐嬉戏,早起锻炼的人三五成群地聚集在一起。我正打算开窗通风,电话响了。
“起来了没有?”秦思伟的声音里夹杂着嗡嗡声,应该是在开车,“丁博士让我们尽快过去一趟。你赶快收拾一下,15分钟以后下楼等我。”
一个小时以后,我们已经坐在CNCERT的机房里。丁博士看起来很疲惫,但是精神却依然饱满。
“我们已经知道,彭勃的第一封电子邮件是在丰台区花乡附近一个叫太平洋的网吧发送的,第二封邮件是在距离太平洋不到一公里的一家叫极品速度的网吧发送的。”他递给秦思伟一张打印着数据的活页纸,“不知道对你们有没有帮助。”
“当然有帮助了。”秦思伟如获至宝似的接过那一页白纸,“实在是太感谢您了。”
“先别忙着说谢谢。”丁博士起身为自己沏了一杯茶,“两位,听说过‘银行大盗’吗?”
“一种可以窃取银行账户和密码的木马。”我被他突如其来的问题问得有点糊涂。
“基本正确。”丁博士喝了一口茶,继续说道,“去年,我是指2004年秋天,我们中心发现了一种危害和隐蔽性都很强的木马,这种木马不仅可以窃取目前国内大多数网络银行的密码,更重要的是它具有反追踪和自我毁灭的功能,所以我们费了九牛二虎的力气也没有截获到完整的木马程序。”
“这个案子我知道。”秦思伟点点头,“全国有好几百个受害者被人掏空了银行账户,但是我们一直没有找到可以突破的线索。而且犯罪分子在猖獗了三个多月后突然就偃旗息鼓了,从此再也没有任何消息。”
“关键是我们到现在也不知道这个木马的传播途径和它的来源。”丁博士继续对我们进行网络安全技术教育,“我一直怀疑,它不是传统的利用捆绑或者拼合方式入侵的木马……”
“不好意思,博士。”我终于忍不住打断了他的滔滔不绝,“这跟凶杀案有关系吗?”
“我也不知道和谋杀是否有关,但是昨天我们打开的security文件夹里的三个文件夹中有一个是‘魔力彩虹’的源程序,另外两个就是‘银行大盗’的用户端和服务器端程序的代码。”丁博士摘下眼镜,用一块绒布轻轻地擦拭着。
“您能确定吗?”秦思伟的惊讶溢于言表。
“我能确定吗?我当然能确定。根据我的分析,木马的开发者把它嵌入了‘魔力彩虹’的代码之中,在用户安装游戏的时候也就自动安装了‘银行大盗’。木马设计了IE关联,当用户启动IE进入网上银行系统的时候,木马会自动运行,记录下用户名和密码,然后发送到服务器端。”
“目前流行的木马,特别是盗取密码的木马,差不多都是这样的。”我的好奇心又被勾起来了,“这个木马有什么特别之处吗?”
“这是一个应用了远程线程动态嵌入技术的dll木马,它通过提升权限的方法把interinfo。exe这样的系统进程当成自己的宿主进程。因此发现和查杀都十分的困难。”
“远程?线程?动态?dll?”秦思伟一下子听到这么多术语,表情一片茫然。
“动态嵌入是dll木马使用的一种技术,而远程线程技术是实现动态嵌入的一种方式。”我只好用比较通俗的语言解释给他,“理论上来说,每个进程都有自己的私有内存空间,别的进程是不允许对这个私有空间进行操作的。但是实际上,黑客仍然可以利用诸如动态嵌入这些方法进入并操作进程的私有空间,也就拥有了与那个远程进程相当的权限。这样做的目的,是让木马的核心代码运行于别的进程的内存空间,这样不仅能很好地隐藏自己,也能更好地保护自己。”
“正确。”丁博士颔首微笑,“不过这个木马最让我吃惊的地方是,它还采用了类似三线程的机制实现自我保护。”
“不是远程线程吗?怎么又三线程了?”秦思伟越听越糊涂了。
“是这样的。”我继续给他扫盲,“最近一段时间,很多黑客采用了三线程这种技术保护自己的木马。简单地说,就是将想执行的代码放在进程的主线程里,然后再生成两个辅助线程,一个驻留在主进程体内,另一个通过创建远程线程驻留到其他正在运行的进程体内。驻留主进程体内的辅助线程同时观察注册表和远程进程的情况。驻留在远程进程体内的辅助进程则监视主进程的运行情况。如果主进程被kill了,它会确认程序的可执行文件是否也被删除掉了。如果系统目录下的可执行文件不存在了,则用备份的文件恢复可执行文件,然后再重新启动。不过博士,dll木马本身是非进程的木马,怎么会又用到三线程呢?”
“它使用的是类似的机制。”丁博士推了一下眼镜,“在宿主进程里开启一个监视线程,一旦发现被扫描或者追踪,就启动自我毁灭的机制。然后,他们在‘魔力彩虹’里启动了一个远端线程,作用就是在木马毁灭以后,在适当的时候自我恢复。”
“这些技术对我而言太过艰深了。”秦思伟的两条浓眉紧紧地拧在一起,“但是,我可以肯定,开发木马程序的人应该是姚锐。因为‘魔力彩虹’是他担任主要开发的,在里面加个木马不是什么难事。至于彭勃,我想他也应该有份。”
“彭勃是负责软件测试的,和姚锐的关系又那么好,我很难想象他没有参与其中。”我点头表示同意,“否则他怎么会有源程序和密码呢?”
“如果真是这样,那么彭勃就有了杀姚锐的动机。你想想看,他们利用‘银行大盗’窃取了好几百万的赃款,又适时地收手,没有给警察留下有用的线索,那么下一步呢?肯定是要分赃!但是这个时候,就会出现利益冲突,彭勃为了独吞赃款杀死姚锐就在情理之中了。不过姚菲在这里面又是什么角色呢?”
“姚菲不具备参加这种技术犯罪的条件。”我叹了口气,“不过,她是否知道哥哥和男朋