解析Realtek RTL8139单芯片以太网控制器
[导读]优秀的Rootkit coder也秉承着绝不在Rootkit中加入过多无用的远程命令,让Rootkit尽量回归其原始定义,因此出现了各式各样的隐蔽隐藏技术。
3. 接收数据包
接收模块相对就要复杂一些。因为transmit是一个主动行为,而receive是被动的。rk毕竟不是硬件,没有一个机制触发它使其能比网卡更早的得到数据包到达的中断信号。因此我们不得不对网卡驱动的ISR做些处理。
之前提到了所谓的Tx FIFO,那么自然就会有一个Rx FIFO。从电缆上接收的数据包首先被放置在芯片的Rx FIFO中。当Rx FIFO到达了RCR中预先设定的数据量阀值时,芯片就会发信号申请占用PCI总线,以总线主控模式通过DMA将数据传送到接收缓冲区。
而这个接收缓冲区是以一个环形的方式组织而成的,其实质还是一片连续的物理内存。这里面涉及到一个CAPR(Current Address of Packet Read),其中包含了当前读到的数据包的地址。综上,那么网卡处理一个包的整个过程为:
(1) 线路上接收到的数据存储在芯片的Rx FIFO中
(2) 当到达接收阀值时,数据被移动到Rx Buffer(RBSTART指定的物理内存)
(3) 当整个包移动完毕时,接收包头信息被写入包的起始。
(4) CR中的BUFE标志位被置为1,ISR中的TOK标志位置为1
(5) 网卡的ISR例程被调用,由ISR来清TOK位并更新CAPR
讲到这里,原理已经很明显了。rk能做的就是替换掉网卡驱动的ISR,当接收中断产生时自己同芯片控制器交互,读包并判断是否是自己的包,如是做特殊处理,否则交由原始ISR处理,当然,也可以邪恶地对包任意进行涂改让Sniffer去嗅去吧。
不得不提地是,这种方法明显存在严重依赖网卡芯片型号,通用性不好的弊端,但鱼和熊掌不可兼得,我们毕竟迈出了一步,但要走的路还很远。
PS:由于条件受限,测试用bin会在适当的时候放出
四、参考资源
[1] Realtek RTL8139C(L) datasheet Rev1.4, 2002
[2] Sean. Programming guide and sample code for RTL8139 family. 1999
[3] Alex Tereshkin. Rootkits: Attacking Personal Firewalls. BH Vegas 2006
[4] Joanna Rutkowska. Fighting Stealth Malware-Towards Verifiable OSes. CCC 2006
[5] uty. Uay Rootkit source code
[6] Azy. AK922 Rootkit (http://hi.baidu.com/azy0922)
本文导航>>
- 1.Realtek RTL8139以太网控制器利用(上)
- 2.Realtek RTL8139以太网控制器利用(下)




![[图]黑莓BB10系统主屏界面抢先看:MeeGo泪流满面](http://img.bbs.chinabyte.com/data/attachment/forum/201205/15/204553bbsbyasz3k3kahn6.jpg)


![[图]《暗黑3》开服9小时](http://img.bbs.chinabyte.com/data/attachment/forum/201205/15/105452z164x1irp6ez4rxi.jpg)


