构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器

Ring3 下隐藏进程 library nthide;usesWindows,ImageHlp,TlHelp32;type SYSTEM_INFORMATION_CLASS = (SystemBasicInformation,SystemProcessorInformation,SystemPerformanceInformation,SystemTimeOfDayInformation,SystemNotImpleme 阅读详情
 
构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器


作者:Azy (hi.baidu.com/azy0922)
完成:2008-10-22

    优良的rootkit(以下简写为rk)通常应该具备隐蔽稳定的通信功能。正如优秀的程序员一直追求用最简洁的代码完成功能需求一样,优秀的rk coder也一直秉承着绝不在rk中加入过多无用的远程命令,让rk尽量回归其原始定义--获得“root”权限的kit的宗旨。而如何实现隐蔽是rk通信首先要考虑的问题。
    因此,出现了各式各样的隐蔽隐藏技术。几年前的高级手段随着内核技术的公开与普及在时下被理所当然地判定为浅“藏”辄止,而时受深度检测工具干扰的在内核级深藏不露的rk亦不能使rk coder感到一劳永逸。因为构造隐蔽通信中的无人之境才是他们永恒不变的追求。

一、浅“藏”
    一直以来隐蔽战线采取着一种策略,即:藏得了就藏,藏不了就“装”。靠在ring3层隐藏自己端口的rk如今肯定是回天乏术了,而像ring3级别的Hacker Defender以及Byshell则是通过挂接网络native api来实现端口复用从而达到不开端口隐蔽通信的伪装效果。尽管作者们使用的技术与技巧十分之精湛,但面对如今这个内核代码满天飞的局面,ring3对抗ring0还是显得势单力薄了一些。ring3级别的挂钩很容易被检测,端口复用同样会在ring0层的连接枚举下无可遁形,同时又受到基于主机的防火墙的封杀。与此同时或是更早,PCC(Passive Convert Channels)进入到某些人的视线之中。这种将后门或者rk通信数据嵌入到正常的数据包之中的方法的确很有创意(例如通过TCP报头中的ISN来传递数据的NUSHU),但却无法逃脱本身缺陷导致的局限性以及被检测的厄运。

二、深藏不露?
    伴随着rk面向内核层的全线出击,隐蔽通信方面也催生出了新技术。而这些新技术的答案也往往可以在NDIS_PROTOCOL_BLOCK之中找到。为什么?因为协议驱动,中间层驱动和微端口驱动在NDIS体系中按照自顶向下的顺序排列。所以位于最上层的协议驱动首当其冲地成为了宰割对象。并且NDIS_PROTOCOL_BLOCK这个结构可以用很强大来形容,它下面的各个成员链接到的结构可以说是五花八门、不尽其数,这里面当然就包括NDIS_OPEN_BLOCK,NDIS_PROTOCOL_CHARACTERISTICS等结构。这些结构之中包含有N多函数指针,于是很容易联想到对它们进行暗箱操作。
    协议驱动在DriverEntry()中会调用NdisRegisterProtocol()向NDIS库注册自己的协议,获取到一个指向NDIS_PROTOCOL_BLOCK的指针。NDIS做的则是把这个结构放到协议块链表的最前面,链表头由ndisProtocolList指定。事实上,每个协议的NDIS_PROTOCOL_BLOCK通过一个单向链表链在了一起。
    Uay通过挂接NDIS_PROTOCOL_CHARACTERISTICS结构中的发送和接收例程实现自己的隐蔽通信;Deepdoor则是挂接了TCP/IP协议的NDIS_OPEN_BLOCK块中的发送和接受处理例程达到目的。Uay和Deepdoor有些类似,都是在协议层上进行挂接,因此它们要自己实现封包解包等一些功能。其实可以做手脚的地方还有很多,比如DKOM NDIS_MINIPORT_BLOCK。
    另一方面,检测与防护战线也不甘示弱。中间层驱动,设备过滤,MajorFunction hooking,NDIS.SYS导出表挂接,NDIS代码补丁...战火一度在内核层引爆。随着基于主机的网络嗅探器与防火墙在内核位置的下移,上述原本深藏不露的隐蔽通信方法也因为疲于应付而变得捉襟见肘。其中某些手段在协议链遍历和NDIS_OPEN_BLOCK函数指针完整性检测的排挤下也开始逐渐失效。更严重的是,它们的通信数据包在Iris等网络嗅探工具下可以马上现形。因此,这就需要我们开辟新的方法。

三、无人之境?
    那么究竟如何才能绕过现有一切检测技术,并且在通信数据包不被基于主机的嗅探器截获的情况下实现隐蔽的通信呢?答案即:回归原始,直接和网卡芯片控制器交互。下面的文字将围绕这一主题展开:以PCI总线类型的Realtek RTL8139高速以太网卡为例,具体阐述rk同网卡芯片控制器实施交互的过程,探讨打造出一个如入无人之境的隐蔽rk的可能。由于某些原因,所以仅仅描述原理,感兴趣的朋友自己动手也完全没有问题。
    同控制器直接交互的优点在于通过直接I/O芯片上的一些端口寄存器避免了一切NDIS层面上的挂接,嗅探器完全不能抓到任何我们的数据包,因为它在我们的上面!还有,这种方法根本不受操作系统环境下对网卡状态的影响:将网络连接关闭,网卡停止等都是徒劳,因为生杀大权牢牢被我们掌控。只要网卡连在总线上,供电,网路畅通即可实现数据传输。
    作为目前应用范围较广的RTL8139芯片控制器提供了众多特性。比如高度集成的以太网MAC,物理芯片同收发器的集成,支持远程唤醒,最大可支持128K EPROM和Flash Memory。与此同时,RTL8139提供了为数众多的端口寄存器供映射到I/O空间,下面仅结合网卡初始化、数据包的发送与接收讲解常用的几个,其它的参考datasheet即可。

1. 8139初始化   
    网卡在初始化时涉及到的寄存器有:CR(Command Register),TCR(Tx Configuration Register),RCR(Rx Configuration Register),IMR(Interrupt Mask Register),RBSTART(Rx Buffer Start Address)。它们很多可以顾名思义。初始化过程大致为:
(1) 设置CR:将CR中的RE和TE标志位置1并写入CR,即启用8139网卡芯片的收发器。这两个标志位置1后,接收状态机和发送状态机将由空闲变为活动状态
(2) 设置RCR:
a 将RCR中的RBLEN(BIT12-11)相应位置1并写回RCR:即指定接收环形缓冲区(Rx Ring Buffer)的大小(通常设为16K+16bytes);
b 将MXDMA(BIT10-8)标志中的相应位置1,写回RCR:即指定接收的DMA传输数据最大值(通常为1024bytes);
c 将RXFTH(BIT15-13)标志中的相应位置1并写回RCR:即指定Rx FIFO的接收数据阀值(通常为64bytes),这个下面会讲到
d 将AB,AM,APM位置1写回,即指明接受广播、组播以及匹配网卡地址的数据包
(3) 设置TCR:
a 将TCR中的IFG(BIT25-24)标志位置为全1并写回TCR,指定帧间隔时间;
b 将MXDMA(BIT10-8)相应位置1(视不同情况而定),指明每次DMA发送数据的最大字节数(推荐值为1024bytes)
(4) 设置RBSTART:将事先分配的物理地址写入Receive Buffer Start Address,8139芯片会将Rx FIFO中的数据移动到这块物理内存
(5) 设置IMR:开启除系统错误外的所有中断,并写入IMR。这个寄存器指明了在什么条件下会致使芯片的中断控制逻辑产生一个中断并调用ISR

2. 发送数据包
    其实在我们的rk中完全没必要再对网卡进行初始化,因为网卡驱动已经帮助我们做了这项工作。如果需要,rk可以读出这些端口寄存器的值进行修改(比如直接让网卡halt掉)。让我们把注意力放在8139芯片的收发数据包上。根据RTL8139 datasheet中的规定,其在进行数据发送时要用一对描述符用以描述待发送的数据。这对描述符分别是TSD(Transmit Status Descriptor)和TSAD(Transmit Start Address Descriptor)。而8139共提供了4对这样的描述符用于数据的发送,即TSD0-3,TSAD0-3。它们分别位于I/O空间的0x10偏移和0x20偏移处,每个描述符4字节大小。这四个描述符是轮流使用的。
    从硬件层讲,当对一对transmit描述符I/O完毕之后,8139芯片就会在指令的控制下通过PCI接口将数据包从物理内存以总线主控的DMA传输模式搬运到网卡芯片的发送FIFO(Tx FIFO)。而这个数据包的物理地址和大小恰好是对TSD和TSAD进行I/O写时指定过的,所以它可以很轻松地得到该数据包。8139芯片内置了两个大容量(2K)的收发FIFO用于暂存即将送上电缆及从电缆上接收的报文。如果FIFO中包含了一个完整的数据包抑或包大小到达了在TSD中指定的阀值,芯片便开始继续向下传输。接下来数据包将会经由FIFO控制逻辑部件,到达收发逻辑接口,然后再经MII接口出去离开MAC到达物理芯片。物理芯片中经过编码后再通过发送器部件送至RJ-45端口。
    当然,软件层没必要关心太多FIFO之后的事情,rk只需要按照规矩做就行了。发送包的流程大概如下:
(1) 分配好一块物理内存,将待发送数据包拷贝到这片内存
(2) I/O写transmit描述符,将数据包的内存地址和大小填入
    当整个数据包被送上电缆时,TSD中的TOK(Transmit OK)标志位被置为1,如果之前在IMR中开启了TOK中断,此时中断就会触发。

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 :P
部署项目隐藏端口号 问题描述: 我在部署项目到服务器上的时候想要隐藏所要引用的端口,不想让端口号显示在url中 解决办法: 把端口号改为80,比如:访问 http://location:80/aaa和http://location/aaa效果是一样的 注意如果使用该端口,需要进行域名备案,如果不进行备案则不能使用,但是如果使用8080端口的话则可以继续使用 ... 阅读详情

相关推荐

Realtek RTL8139与810x系列网卡技术详解及应用实战

Realtek RTL8139是一款高度集成的以太网控制器芯片,广泛应用于早期PC及工控设备中。其核心架构融合了MAC层控制逻辑与PHY物理层接口,支持10/100Mbps自适应传输速率,采用PCI总线与主机系统通信,具备DMA引擎、Wake-on-LAN(WoL)等高级功能。Windows XP 所采用的网络驱动体系基于 NDIS 5.1 规范,这是微软为统一网络接口卡(NIC)驱动开发而制定的一套标准化接口框架。

weixin_35756130的博客 1735

rtl8139 END驱动性能分析

RTL8139 网卡性能提升分析3162412793@qq.com技术交流QQ群:691976956 一、数据接收优化数据接收优化,主要是从如下几个点出发进行驱动软件的修改:接收中断实现上下部方式,中断中通过发送同步信号量,收包由一个阻塞的任务来获取到该信号量后开始进行接收的动作。原始方式:当有网络数据包接收完毕后,CPU会进中断服务程序,中断服务中,通过一个系统API函数来挂接收包任务,那就是n...

嵌入式系统项目分享 1670

RTL8139C Datasheet

REALTEK 3.3V SINGLE CHIP FAST ETHERNET CONTROLLER WITH POWER MANAGEMENT RTL8139C(L) 1. Features:.................................................................. 2 2. General Description................................................ 3 3. Block Diagram ........................................................ 4 4. Pin Assignments...................................................... 5 5. Pin Descriptions ...................................................... 6 5.1 Power Management/Isolation Interface .............. 6 5.2 PCI Interface....................................................... 6 5.3 FLASH/EEPROM Interface ............................... 8 5.4 Power Pins .......................................................... 9 5.5 LED Interface ..................................................... 9 5.6 Attachment Unit Interface .................................. 9 5.7 Test and Other Pins............................................. 9 6. Register Descriptions............................................ 10 6.1 Receive Status Register in Rx packet header.... 12 6.2 Transmit Status Register................................... 13 6.3 ERSR: Early Rx Status Register....................... 14 6.4 Command Register ........................................... 14 6.5 Interrupt Mask Register .................................... 15 6.6 Interrupt Status Register ................................... 15 6.7 Transmit Configuration Register ...................... 16 6.8 Receive Configuration Register........................ 17 6.9 9346CR: 93C46 (93C56) Command Register ......... 19 6.10 CONFIG 0: Configuration Register 0............. 20 6.11 CONFIG 1: Configuration Register 1............. 21 6.12 Media Status Register ..................................... 22 6.13 CONFIG 3: Configuration Register3.............. 22 5.14 CONFIG 4: Configuration Register4.............. 24 6.15 Multiple Interrupt Select Register..................... 25 6.16 PCI Revision ID.............................................. 25 6.17 Transmit Status of All Descriptors (TSAD) Register......... 25 6.18 Basic Mode Control Register.......................... 26 6.19 Basic Mode Status Register ............................ 26 6.20 Auto-negotiation Advertisement Register.............. 27 6.21 Auto-Negotiation Link Partner Ability Register............... 27 6.22 Auto-negotiation Expansion Register .............. 28 6.23 Disconnect Counter ........................................ 28 6.24 False Carrier Sense Counter ........................... 28 6.25 NWay Test Register........................................ 28 6.26 RX_ER Counter.............................................. 29 6.27 CS Configuration Register.............................. 29 6.28 Flash Memory Read/Write Register ........................ 29 6.29 Config5: Configuration Register 5 ................. 30 6.30 Function Event Register ................................. 31 6.31 Function Event Mask Register........................ 31 6.32 Function Present State Register ...................... 32 6.33 Function Force Event Register ....................... 32 7. EEPROM Contents .............................................. 33 7.1 Summary of EEPROM Registers ............................. 35 7.2 Summary of EEPROM Power Management Registers....... 35 8. PCI Configuration Space Registers..................... 36 8.1 PCI Configuration Space Table ........................ 36 8.2 PCI Configuration Space Functions.................. 37 8.3 Default Values After Power-on (RSTB asserted)...... 42 8.4 PCI Power Management Functions .................. 43 8.5 Vital Product Data (VPD)................................. 45 9. Functional Description ......................................... 46 9.1 Transmit Operation ........................................... 46 9.2 Receive Operation............................................. 46 9.3 Line Quality Monitor ........................................ 46 9.4 Clock Recovery Module ................................... 46 9.5 Loopback Operation ......................................... 46 9.6 Tx Encapsulation .............................................. 46 9.7 Collision............................................................ 46 9.8 Rx Decapsulation.............................................. 47 9.9 Flow Control..................................................... 47 9.9.1. Control Frame Transmission..................... 47 9.9.2. Control Frame Reception.......................... 47 9.10 LED Functions................................................ 47 9.10.1 10/100 Mbps Link Monitor...................... 47 9.10.2 LED_RX .................................................. 48 9.10.3 LED_TX .................................................. 48 9.10.4 LED_TX+LED_RX................................. 49 10. Application Diagram .......................................... 50 11. Electrical Characteristics ................................... 51 11.1 Temperature Limit Ratings .......................

网卡EEPROM介绍及内容写入方法

网上查了会儿资料,也没查出什么有用的中文资料来,所以就按平时的积累来写了。本文主要记载各种网卡中的内容,及在Linux下烧写的方法。平时的工作中遇到过4种网卡,8139, 8100, 8169, 8110,对于不同的网卡,EEPROM中的内容一般是不同的。  先扔出8139的eeprom内容:(通过烧写器把芯片里面的内容读出来,再通过hexdump工具变

天地沙鸥 - Csdn站 7704

RTL8139网卡芯片英文资料

RTL8139网卡芯片英文 资料

RTL81系列网卡控制IC

RTL81系列网卡控制IC datasheet

使用RTL-8139网卡制作硬盘还原卡

硬盘还原卡,又称电脑还原卡,使用创新的安全硬盘管理技术HDSafe,硬件级解决电脑教室的管理问题,具备强大的数据保护和还原功能是误删除、误格式化、感染病毒等不希望发生的硬盘数据改变,在下一次开机时能够瞬间还原。    而且目前的硬盘还原卡,多是集成了10M/100M网卡的还原卡,将网卡和还原卡集中一起,不但使用方便而且还节省了一个扩展槽,的确物有所值。    目前不少文章介绍了使用RTL-8139

2088

PIC单片机应用开发实践教程(二): 新建工程

File---New ProjectMicrochip Embedded --- Standalone Project 选择所用MCU对应型号 点击 Finish 后,工程就建好了 至止,我们的一个新工程就建完成了!

qq_57798018的博客 2891

网络设备(网卡)内核驱动程序详细解析(以主要rtl8139和dm9000A驱动程序为例)

学习应该是一个先把问题简单化,再把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动 也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,那其他的事情自然就水到渠成了,这是笔者的心得。 一般在使用的Linux...

Tasdily的博客 2943

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1885

J-SCOPE实战:除了看波形,如何用它和JLink-RTT模式高效调试你的STM32变量?

本文详细介绍了如何利用J-SCOPE和JLink-RTT模式高效调试STM32变量,实现实时数据可视化。通过对比HSS和RTT模式的优劣,提供固件端配置、J-SCOPE设置及实战应用案例,帮助开发者快速掌握这一高效调试技术,特别适用于电机控制、传感器融合等需要实时监控的场景。

weixin_29159613的博客 448

精彩---rtl8139网卡驱动程序分析

学习应该是一个先把问题简单化,再把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动 也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,那其他的事情自然就水到渠成了,这是笔者的心得。          一般在使用的Linu

sdulibh的专栏 3993

iPhone用户必看:TrollStore巨魔商店在线安装保姆级教程(iOS 14-16.6.1适用)

本文为iOS 14至16.6.1系统的iPhone用户提供了一份详细的TrollStore(巨魔商店)在线安装教程。文章从核心原理、安装前准备讲起,逐步详解了通过Safari浏览器获取安装器、信任企业证书、部署TrollStore及关键后置配置的全过程,并附带了常见问题排错指南,帮助用户安全、高效地实现无需越狱安装第三方应用。

h0i1j2k3l的博客 2006

realtekrtl8139网卡驱动 linux,Realtek网卡驱动官方版-瑞昱网卡驱动下载-PC下载网

Realtek瑞昱网卡驱动是一款由realtek官方推出的一款驱动程序。软件支持Realtek瑞昱RTL RTL8139/810x/8169/8110等型号的网卡,可以帮助您解决千兆网卡的带宽不足问题,PC下载网为你提供Realtek瑞昱网卡驱动下载,欢迎前来下载。相似软件版本说明软件地址2.0.1.14版查看9.18.0907 最新版查看4.93-3 官方版查看1.0 官方版查看Realtek瑞...

weixin_33539834的博客 1618

【Bug已解决】Codex CLI 报 stream disconnected before completion 解决方案

方案适用场景推荐指数更新根证书库社区验证的最常见根因⭐⭐⭐⭐⭐检查系统时间虚拟机/容器等特殊运行环境⭐⭐⭐⭐核对 base_url 配置排除证书问题后的下一步排查⭐⭐⭐⭐更换网络环境测试怀疑本地网络设备存在干扰⭐⭐⭐升级到最新版本已知版本缺陷的场景⭐⭐⭐⭐报错虽然表现形式很像网络连接问题,但社区排查的多个真实案例表明,很大一部分情况的根因其实是本机系统的 TLS 证书信任链异常或系统时间不准确,而不是单纯的网络质量问题。优先检查并更新系统根证书库,这是社区验证过的高频根因。

一键难忘的博客 8026

044、Edge Impulse的音频分类实战

上周调试一块STM32WBA52开发板,板载PDM麦克风死活采不到有效数据。示波器怼上去,时钟线波形漂亮得像教科书,数据线却像心电图——全是毛刺。折腾半天发现是电源纹波干扰,给麦克风单独加了个LC滤波,世界清净了。这种坑,做音频分类的嵌入式工程师迟早要踩一遍。

2401_88858637的博客 56

网口扫盲三:以太网芯片MAC和PHY的关系

问:如何实现单片以太网微控制器? 答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件.这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积.单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下. 问:以太网MAC是什么? 答:MAC即Media Access Control,即媒体访问控制子层协...

weixin_33967071的博客 9606

Android 15.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在15.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 1204

五十三.网络(3)--区块同步getblocks消息

在节点互发了version消息后,就会发送getblocks消息,请求对方的区块以进行同步。

d3582077的专栏 180

[Dify实战] OA 公文排版助手:自动格式化、编号、生成摘要-带配套资源

摘要: Dify 公文排版助手通过自动化解决公文处理中的格式混乱、编号错漏等问题。支持标题层级自动编号、摘要生成、要素补全等功能,输出标准化Markdown格式。核心流程包括输入原文、智能识别、自动排版与要素输出,适用于通知、纪要等场景。实施需统一模板规则,规范输入格式,并通过试跑优化纠错率与处理效率。关键价值在于减少人工返工,提升排版一致性,未来可对接OA系统实现全流程自动化。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 474

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 338

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

AI 芯片片上网络 NoC 深度解析:flit、虚通道与拥塞控制如何决定 GPU/TPU/LPU 的算力利用率

AI芯片算力瓶颈不在FLOPS,而在片上网络(NoC)——数据搬运的能耗与延迟决定MFU上限。物理限制下,长线延迟不随工艺缩小,迫使NoC将全局布线拆为可流水的短链路;能量账显示,一跳传输耗能可达数十次乘加操作。拓扑选择直接影响性能:二维mesh虽布线可行,但均匀流量下每节点可用带宽按1/√N衰减,实测仅达标称值30%。虚通道、双网设计、静态调度(如Groq)等技术旨在突破此瓶颈。从总线到crossbar再到多跳NoC,本质是用延迟换可行性。未来趋势:专用通路(脉动阵列)、晶圆级集成(Cerebras)、跨

我的博客 110

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: MS08-067漏洞分析
下一篇: MS08-066 Microsoft Ancillary Function Driver Elevation of Privilege exploit
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值