faceoff的笔记 https://bbs.21ic.com/?460399 [收藏] [复制] [RSS]

日志

修改网卡(RTL8139)物理地址硬方法

已有 5388 次阅读2006-5-30 17:30 |个人分类:网络技术相关|系统分类:通信网络


修改网卡(RTL8139)物理地址硬方法

下面的代码都是我在放暑假期间写的,绝对是原创
原文发表于http://www.blog.com.cn/user1/4623/

希望能借此文落伍,谢谢!

关键词:BIOS ROM EEPROM FlashROM 网卡 修改 物理地址ethernet change MAC MACchger

 

主板上有BIOS 的Flash Rom 可以通过BIOS系统的提供商,或者是主板的制造商那里得到刷主板的Flasher ,AMI-AMIFLASH 、AWARD-AWDFLASH还有ASUS的图形化的刷BIOS软件等等。你可以通过修改软件来修改ROM中的内容,比如增加一个自定义的开机画面,增加一个硬盘还原系统或者直接在ROM中增加一个升级ROM的小组件,这样升级BIOS就很容易了。



显卡上有显卡的BIOS的ROM,可能并不是所有的人的显卡的BIOS都可以改,因为只有显卡的BIOS是Flash ROM 或者是EEPROM的才可以修改更新。显卡的ROM改造和主板的改造目的是有所不同的。改显卡的ROM 主要是为了进一步超频,因为显卡的驱动一方面是通过显卡的Device ID 来识别显卡的核心,另一方面是通过显卡的性能参数,比如核心频率,显存频率。只有这两个方面同时符合另一类显卡的要求时才可以被系统识别成功。

这些信息都是从系统RSET 后显卡通过自身的ROM 进行加载信息来初始化显卡(寄存器)。这也使修改ROM的目标更明确,更吸引人(9550(¥400)->9600 pro(¥800)->9600XT(¥1200~……)),并且这些都是免费的。而这些只需要一个 Flasher!,具体的刷法就自行去参考网上资料我这里就不多说了,现在这种文章很多的。



其实,除了以上能刷固件的东西还很多(CD-Rom、 DVD-Rom、 MP3、 数码相机……)但是真正是中国人自己写的升级软件,或者是修改软件并不多,大多数都是外国人高手也多出自俄罗斯或者是德国。所以我决定要自己写一个刷ROM的软件,并且是别人没有写过的软件。



这些设备中还有一种设备——网卡,它本身也可以连接一个EEPROM(64*16),来储存网卡信息,包括网卡设置及物理地址,Device ID、Vendor ID等等。但你们可能要问为什么要改网卡的EEPROM,因为这样就可以自己定义网卡的物理地址,你还可以Clone网卡的物理地址(这以上都是为了正常的试验或者是合法的拷贝的基础上,在此只是学术上的讨论)。你可能说在windows下可以通过修改注册表或者是修改网卡属性中的配置信息中的高级选项设置Network  Address项。对!这都没错,但是这些都是建立在Windows平台下,如果没有了Windows,你该如何办,或者说你换操作系统怎么办,再改一遍?如果你不嫌累,但如果你用的是Linux或者是DOS那又怎么办呢?? 改EEPROM就能让它一次性搞定。网卡的物理地址在EEPROM中的位置根据网卡的芯片不同,布局也就不同、但他们都有共性就是他们都是储存在EEPROM上,当网卡加电时,通过网卡芯片的自动读取功能从EEPROM中读取出来,通过硬件机构设置到网卡的寄存器中,之后在通过系统的自检,操作系统的网卡的Driver加载把网卡的寄存器映射到物理内存空间或者是I/O空间。通过读写网卡芯片映射的寄存器,来操纵网卡来读或修改网卡EEPROM。



我利用暑假的10天时间写了一个软件,利用它可以永久性修改网卡的物理地址,或者更新备份网卡EEPROM的软件。此软件是针对Realtek  RTL8139 10 /100 M 自适应网卡,如果不太清楚,看一下设备管理器中的网络适配器中的信息。如果是 “Realtek RTL8139 Family PCI Fast Ethernet NIC”或者是有”RTL8139”字样的都可以。我的同学中不管是Intel 还是 AMD 的CPU ,不管是集成网卡还是独立网卡,百分之八十都是这种型号的。



软件是运行在DOS环境下的!(Windows 下不可,Windows 下有保护机制,它会禁止对硬件的一切直接访问,除非是驱动。等我考完研,我会修改这个程序让它能在Windows 下运行),不必是纯DOS,只要有一张windows 98 启动盘或者是DIY的 MS-DOS 7.1的启动盘(建议),引导进DOS。按以下具体方法操作即可。

具体使用方法如下:



输入命令:MACchger 后加如下参数(只可加一个或者不加,参数全是大写)

-H /-?:打印帮助信息

-V              :显示网卡物理地址

-C              :修改网卡物理地址,它会要求用户输入原来的网卡的物理地址,通过用户输入的信息来校验软件解析物理地址的正确性,并确认用户清楚自己所做的事情,校验后会提示用户输入修改后的物理地址,最后输入"OK"(注意:全是大写)确认修改物理地址,并完成修改,或输入任意字符来取消。

-S              :保存网卡EEPROM镜像到当前目录下AT93C46.bin文件中,已将EEPROM中的大端顺序修改为小端顺序了。

-W                     :刷写当前目录下网卡EEPROM镜像AT93C46.bin到网卡的EEPROM中。



********************************************************************

*                                                                                                                                   *

*                  RTL8139 Ethernet Card EEPROM Flasher                                               *

*                                                                                                 version : 1.0.33           *

********************************************************************

Usage:

MACchger [-option]

-?/-H Print the Help Msg

-V view RTL8139 MAC address

-C change the MAC address of local host's MAC Address

-S save the RTL8139's EEPROM(AT93C46) to File named with AT93C46.bin

-W load the File of AT93C46.bin and write to the ethernet card's EEPROM



Author:    Quby [kju:bi]

School:    Dalian University of Technology

Date:      2005,AUG,30

Email:      Quby@eyou.com

Blog:      http://quby.blogchina.com



修改的物理地址,只有当机器重起后才会生效。


如果程序提示不能运行,有什么 DMPI 的字段,你就先运行一下文件中的CWSDPMI.EXE的文件,再运行以上命令。


其实,网卡的EEPROM的内容还不止修改MAC地址,所有网卡的配置信息也在里面,如果你感兴趣的话,你还可以执行修改AT93C46.bin文件中的内容。但你还要注意网卡中的内容是按照大端的顺序存放的,而Intel的CPU是按照小端来存放内容的。比如:0x8129,0x8139,0x10EC 如果是大端:0x81,0x29,0x81,0x39,0x10,0xEC (按照高字节,低内存地址)而小端:0x29,0x81,0x39,0x81,0xEC,0x10(按照高字节,高内存地址)。,RTL8139 的EEPROM 是分成两种一种是X16按照 16位为 1字,大端储存的方式进行的(用的比较多),另一种是X8按照8位为1 字,它就不存在此问题。我已经将这些转化做到程序中,修改内容就按照下表进行就可以了。

但最后还要提醒一下,修改后的bin还需要进行校验和计算,并将结果存放在bin 中的0x32~0x33位置,如果校验和不正确,是无法被刷进EEPROM,我的程序会检查这一点的,并会提示正确的校验和的。因为如果含带错误的校验和的bin是不会被RTL8139读取的,它会采用默认值进行初始化的,也就起不到刷写的意义了。


建议用户在修改EEPROM前,先通过”MACchger –S”的指令进行备份EEPROM到当前目录的”AT93C46.bin”再用“MACchger -C”来修改MAC,重起之后如果发现有问题或者物理没有修改成功,就再用”MACchger -W”写回备份的EEPROM。

下载地址:http://www.blog.com.cn/user1/4623/upload/2005958802.rar


store in  gmail


 


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (2 个评论)

困惑的人 2006-8-16 05:09

你好,我通过各种搜索途径,偶然看到你的这篇文章。有一些问题想要问你,不值能不能帮我。

问题是这样的,因为某种原因,我买到一块技嘉的主板,上面集成了两个MARVELL的8001千兆芯片,但是貌似如同这块板一开始就来自于非正规途径一样,它的BIOS也怪怪的,怪到集成网卡的BIOS里,设备ID,制造商ID,以及MAC都是0,以至于装驱动时必须强行安装且工作不稳定。现在我想通过刷新主板bios的方式来解决这一问题,就必须把bios里的各ID和MAC找回来,但是因为原ID和MAC都是0,我根本无法定位到底在哪里,所以四处搜寻方法,找到这里,不知你能否提供一些有用的信息。先谢谢了。我的EMAIL:104859527@qq.com

回复 高高 2006-12-21 14:10
你好,我想请问你读写8139的eeprom的原理. 我弄了好久了,硬是弄不出.. 8139的mac存放在eeprom的哪个地方啊? 好像文档中没有说明哦. 如果方便的话,可以把flash rom的源码发给我吗? pjg159716107@tom.com 谢谢!!
回复 alee 2007-4-13 23:31
你好! 我也是碰到楼上的问题! 可否帮忙解决???
回复 alee 2007-4-13 23:37
email: ai-lee@126.com
回复 battery609 2009-5-6 08:05
好文章,好技术,但经过我的试用发现集成网卡RTL8139/810X Family PCI Fast Ethernet NIC在输入指令后提示找不到AT93C46,是不是这款网卡没有使用该芯片?