分类 软件 下的文章

近日对这个短小精悍且兼容性极佳的XP启动引导文件多重启动菜单十分感兴趣,特意还做了张17合1的XP OEM安装光盘,光盘总容量701MB。由于本人安装光盘的文字菜单部分较长,为了最大化利用有限的资源,不得不对其进行分析一番。

先看下本人已经挪位修改的目录描述
3edd751ex7247f87ead1a&690.jpg
当前起始位置为7B8,结束位置为7FD,总共70字节,去掉菜单项描述(7B8)1字节、目录字节宽度描述(7B9)1字节,剩68字节,最多可以有17个菜单项。
3edd751ex76cfb6bd06f3&690.jpg
修改 0000011C: 3A06B807 cmp al,[07B8] //指向新的菜单数描述

修改 00000126: A2B707 mov [07B7],al //指向新的临时变量地址

加亮部分简单分析:判断键盘输入的AL寄存器,是否在“A~Z”之间,通过“and al,1F”,得出一个值,当小于等于菜单数描述,就将值存入7B7H。
3edd751ex76cfb8428c9d&690.jpg

修改 0000049C: A0B707 mov al,[07B7] //取出临时变量的值,即菜单项
修改 0000049F: F626B907 mul b,[07B9] // al(菜单项)和7B9(目录字节宽度)相乘,得到偏移量,存放于ax寄存器
修改 000004A3: 05BA07 add ax,007BA //偏移量和7BA相加,得出菜单项相对应的目录名称的地址,并把这个地址存入536H,所以想把53BH菜单往前挪位,比较困难。

按照这个规律,便可弹性的调整菜单字节长度和目录长度的矛盾,轻松实现挪位操作。

前面讲的是如何去编辑启动文件,有兴趣的网友可以下个早期WIN2000的(不带SP)的启动文件,对比一下,慢慢研究。

下面讲处理启动组文件夹,先看一个图
3edd751ex78115a5152fe&690.gif
V1.6.BIN的500h行处有SETUPLDR.BINBOOTFIX.BINI386这样一个字段。告诉我们启动时要寻找I386里的这两个文件SETUPLDR.BIN和BOOTFIX.BIN。大家在做EASYBOOT时都会有run XXXX.BIN,这个XXXX.BIN(比如叫DEL1.BIN)要预先处理,修改I386为DEL1。这个I386是路径。这个在这个改过的V1.6.BIN的I386已经失去作用了,路径改过在750h行的ACE1及其后面的一些连续的四个字符,而且路径是可选择的,但我们选A(ACER)就是选ACE1路径,选B(ASUS)就是选ASU1路径,选择CDEFG。。。以此类推。

BOOTFIX.BIN干嘛用?微软的CD启动时总会有“Press any key to boot from CD”,如果不按任意键,5秒后计算机将从硬盘启动。如果按了,就从CD启动。现在如果想合集光盘也要出现“Press any key to boot from CD”,就必须从微软原版XP的I386复制一份 BOOTFIX.BIN到ACE1目录下。如果想延迟时间长一点 160h行的“49 00 12 00”,将“49”改为“AA”延时可达10秒,改为“FF”延时可达15秒。
为什么,BOOTFIX.BIN只放在ACE1,因为默认是从第一个启动组文件夹开始搜索这个BOOTFIX.BIN。

如何加载编辑好的启动文件?可以用CDIMAGE,也可以用ultraiso加载。

CDIMAGE命令行(假定你编好的V1.6.BIN在CDIMAGE文件夹里,而XPCD是你制作XP合集的文件夹):

f:\cdimage\cdimage -lWinXP -g -h -n -o -m -bf:\cdimage\V1.6.BIN f:\XPCD f:\xpsp3v1.6.iso

ultraiso则更简单些,“启动光盘--加载引导文件”,这个引导文件就是你编写好的V1.6.BIN。

二、 引导BCDW、引导软盘镜像、引导Easyboot菜单

其实BCDW启动兼容性也还可以,但支持的中文数量有限。运用最广泛的Easyboot,经常用BCDW来引导软盘镜像,最典型的是调用DOS工具包里的某个工具,所以我们很容易看到Easyboot启动文件夹里有一些后缀为ini的文件。

1、引导BCDW菜单,先看两张图。(以V1.3为例,因为只有V1.3才有BCDW菜单)
3edd751ex781178c6ede4&690.gif
上面是V1.3主菜单,下面是BCDW菜单,引导的各种软盘镜像,当然,BCDW也可以单独用来引导XP合集。
3edd751ex78117b154a5a&690.gif
引导BCDW菜单,首先你会编辑BCDW菜单。如果要详细学习,比较费时间,用我提供简单的菜单,你马上就可以应用了。当然这只是初步。

假定你的XP合集所在文件夹叫XPCD,那么在XPCD里面建一个bcdw文件夹,将bcdw.bin(附件下)复制进来。再建一个bcdw.ini文件,记事本打开后,复制以下内容。红色部分是一些个人信息,你自己修改。蓝色部分你要重点编辑部分。蓝色部分的最后二行是我加上去,实际上,因为我们主菜单里就可以直接安装XP了,所以这里重复了,但是如果你只想BCDW(而不想用微软的XP启动文件)来做OEM合集菜单时,后面两行就是你参考的例子。如果是XP启动文件(主菜单)和BCDW(扩展菜单或二级菜单)一起用的,最后两行倒不必要。



[MenuItems]
c:\              ;Boot Hard drive                      ;
:reboot         ;Reboot PC                            ;
\BCDW\XPBOOT.IMG ;Load Win2K/XP                      ;
\BCDW\OEM.INI    ;DMI Editor(Auto)                     ;
\BCDW\CMOS.INI   ;Cmos Password Removal           ;
\BCDW\NTPASS.INI ;Win2K/XP Password Removal          ;
\BCDW\GHOST.IMG   ;Ghost 11.5 ;
\BCDW\GHOST.INI   ;Ghost 8.3 ;
\BCDW\DOS.INI    ;Dos Tools ;
\ACE1\SETUPLDR.BIN          ;Windows XP SP3 ACER OEM ;
\ASU1\SETUPLDR.BIN          ;Windows XP SP3 ASUS OEM ;

\BCDW\CD.BIN     ;Install Windows XP SP3 ;   (这个是返回主菜单。注,括号和括号内的是备注,要删除掉)


[MenuOptions]
BGColors= 0f, 0f, 0f, 0f
BGSymbol= 32
BottomText=  http://hi.baidu.com/zxkh

MenuPosition= 02, 03, 76, 19
MenuColors= 0f, 0f, 0f, 0f, 8f, 0f
MenuBorderStyle= 1
MenuShadowStyle= 0
MenuTitle= [MenuOptions]
MenuDefault= 0
MenuTimerLabel= Time
MenuTimer= 30
ScrollPosition= 00, 01, 85, 01
ScrollColors= 0f, 0f, 0f, 0f, 0f, 0f
ScrollMode= 0
ScrollText= WinXP SP3 OEM^VOL V1.3

IMG和IMA文件,bcdw可以直接引导(格式如上面示例),这些文件(包括INI文件)也放在bcdw目录下。如果要引导DOS工具包里的一个工具,则需要bcdw目录增加一个INI文件,比如,启动DOS工具包的CMOS密码清除工具,经编写一个CMOS.INI的文件,其内容如下:


[MenuItems]
/boot/dos.ima ; ; ; CMOS

如何在BCDW里设置返回主菜单?将编写好的XP启动文件,叫V1.6.BIN也好,叫V1.3.BIN也好,复制一份,改名为CD.BIN,用UltraEdit-32打开,找到510h这一行,将BOOTFIX.BIN改名,BOOTFIX.XXX,随便改,因为这时候我们不需要“Press any key to boot from CD”这样的字样。

关键的一步,将bcdw目录下的BCDW.BIN,改名为SETUPLDR.BIN。这就是前面我们讲“SETUPLDR.BINBOOTFIX.BINI386”字段的原因。

那么主菜单里又怎么引导?和引导某个XP安装一样,750h行及以后的某个位置,编写BCDW四个字符,以选择引导BCDW菜单。

2、引导软盘镜像

引导软盘镜像可以有两种办法,一是用EASYBOOT,一是用BCDW,先讲BCDW。前面讲的引导BCDW是有显示菜单的,而且菜单里显示可引导多个IMA\IMG文件。现在我们只想在主菜单里选择,直接引导。怎么做?这里我们以V1.6为例(本文开头的图)。

首先还是CD菜单里750h行及以后的某个位置,编写四个字符,比如DOS3,用于引导DOS工具包。

其次,在光盘根目录下,建立一个DOS3的文件夹,复制进DOS.IMA(DOS工具包软盘镜像)和BCDW.BIN,改名为SETUPLDR.BIN,用UltraEdit-32打开,搜索“bcdw\bcdw.ini”(引号内),改成“dos3\dos3.ini”(小写),修改后保存。在此目录建一个dos3.ini文件,里面的内容为(绿色):

[MenuItems]
\DOS3\DOS.IMA    ; ;

举一反三,假定是一个GHOSTA.IMG,同样的办法。

如果要在主菜单里直接引导DOS工具包里的某个工具,比如那个“清除系统密码”的工具。如上,同样的,要建立一个文件夹,假定叫XPP3(我是用3表示软盘镜像,重启,硬盘启动等,1和2主要是好区别自动安装,手动安装,以及有没有加载SATA等,反正用你自己命名法则),四个字符,大写。将BCDW.BIN复制进来,改名为SETUPLDR.BIN,用UltraEdit-32打开编辑,搜索“bcdw\bcdw.ini”(引号内),改成“xpp3\xpp3.ini”(小写),修改后保存。在此目录建一个dos3.ini文件,里面的内容为(绿色):

[MenuItems]
\dos3\dos.ima ; ; ; PW

PW,在DOS状态下是执行的命令是“PW”。

主菜单里要想直接调用,在750h处及以后要加入命令接口,四个大写字符(数字、字母能混用)。如,DOS3,如,XPP3等。

三、从硬盘启动、重启、关机、引导同样类型的菜单

方法与上面差不多,利用BCDW引导,分别建立文件夹并复制进BCDW.BIN,改名为SETUPLDR.BIN并修改编辑,编写相应的ini文件。

“从硬盘启动”的ini文件的内容:

[MenuItems]
C:\         ;;

“重新启动”ini文件的内容

[MenuItems]
:reboot          ;;

“关机”ini文件的内容

[MenuItems]
:PowerOff          ;;

 从硬盘启动也可以这样(不需要INI文件):从I386复制一份BOOTFIX.BIN文件,并进行编辑(用UltraEdit-32),改160h行的49为00,将BOOTFIX.BIN改名SETUPLDR.BIN,新建一个文件夹,命名为BOO3,将这个SETUPLDR.BIN复制进来。然后主菜单增加引导接口。

照这个思路,如果有一个类似V1.6.BIN(如V1.6A.BIN)的启动菜单(作为次级菜单)和V1.6相互引导,怎么办?也是新建一个文件夹,改名就行了,然后主菜单增加引导接口。

引导EASYBOOT菜单,如图所示(这个是我的OEM^VOL V1.6版的帮助菜单的文件夹内部结构图):
3edd751ex78117e4b5f58&690.gif
ini文件内容:

[MenuItems]
/hel3/help.ezb ; ;

四、其他

编辑的启动菜单是否可行,要进行多次测试,通常用ULTRAISO加载,生成ISO后,用虚拟机测,这里仅是测启动菜单,以及引导。测试时不一定所有XP安装源文件全部拖进ULTRAISO,这样容量太大,形成ISO时间太长。这些技巧,多实践几次,就知道怎么做效率高。

无约而来 2008.12.25

附件1:

多重启动.rar http://www.namipan.com/d/bb08e6080f97fe3c80d2a4a9f99579c2034b0268b10b0000

附件2:

bcdw.bin http://www.namipan.com/d/006b8134ae5881f9d8ff3b1607f6e2f7a40ba3c542500000

3edd751egdfb4e7f6884e&690.jpg

上面的图是利用WIN2K/XP启动文件做的启动界面,附件1解压后得到V1.6.bin和llm18in1.BIN,V1.6.bin最多可以支持29个菜单,后者是LLM 18in1提取的。利用WIN2K/XP启动文件做多合一菜单,是国外传进来的,最早见到的是WIN2000三合一。所谓WIN2K/XP启动引导文件,就是用ultraiso工具打开一个微软原版WIN2K/XP的ISO,“启动光盘”--“保存引导文件”,就会提取到后缀为.BIF的文件,2K大小,改后缀名为.BIN也没关系。

用这种引导方式引导安装XP,兼容性非常好,没见过失败的,而且占用空间非常小,只要2K的大小。不过不支持汉字。

将分成几个部分来讲。菜单编辑、菜单数量控制、引导多个XP、引导BCDW,引导软盘镜像、引导Easyboot菜单、控制键(如重新启动、从硬盘启动、按任意键启动CD/DVD、关机)、引导另一个同类型的启动菜单文件等。。。

一、菜单编辑、菜单数量控制、引导多个XP

以V1.6.bin(因为支持的菜单数量较多)为例。

使用工具:UltraEdit-32

用UltraEdit-32 打开V1.6.BIN,看到以下界面。大框框内的内容是我们编辑的重点。
3edd751ex78115a5152fe&690.gif

0D 0A好多地方都有,要注意,不然分段就乱了。
3edd751ex78115e476528&690.gif
上面的图是利用WIN2K/XP启动文件做的启动界面,附件1解压后得到V1.6.bin和llm18in1.BIN,V1.6.bin最多可以支持29个菜单,后者是LLM 18in1提取的。利用WIN2K/XP启动文件做多合一菜单,是国外传进来的,最早见到的是WIN2000三合一。所谓WIN2K/XP启动引导文件,就是用ultraiso工具打开一个微软原版WIN2K/XP的ISO,“启动光盘”--“保存引导文件”,就会提取到后缀为.BIF的文件,2K大小,改后缀名为.BIN也没关系。

用这种引导方式引导安装XP,兼容性非常好,没见过失败的,而且占用空间非常小,只要2K的大小。不过不支持汉字。

将分成几个部分来讲。菜单编辑、菜单数量控制、引导多个XP、引导BCDW,引导软盘镜像、引导Easyboot菜单、控制键(如重新启动、从硬盘启动、按任意键启动CD/DVD、关机)、引导另一个同类型的启动菜单文件等。。。

一、菜单编辑、菜单数量控制、引导多个XP

以V1.6.bin(因为支持的菜单数量较多)为例。

使用工具:UltraEdit-32

用UltraEdit-32 打开V1.6.BIN,看到以下界面。大框框内的内容是我们编辑的重点。

0D 0A好多地方都有,要注意,不然分段就乱了。

插入编辑时,注意比如图中右边[P]位置要写的字比较多,可以插入5个字符,而[S]后面有空的地方,相应地要删除除5个字符,这样720h的 C位置以及此后的所有字符都不会移动偏差。

按CTRL+H键查看编辑的整齐不整齐,不整齐返回重新编辑。记住,编辑ABC...菜单时一定要在上图的右侧栏编辑。
3edd751ex781162de0249&690.gif
3edd751ex781166298c26&690.gif

ONES是款体积小巧(仅一个主程序和语言库文件,总共1M多)刻录功能丰富的刻录软件,它除了体积小、免安装、便携外,还是一款免费的刻录软件,即使是在条件有限的WinPE下也能轻松完成刻录功能。
由于ONES的免安装和便携性,也造成了一些尴尬的场景。当我们在一台机子上首次运行此程序,便会在本地计算机的注册表增加自动播放的记录项,下次放入光盘便会自动弹出ONES刻录软件的选项,可是问题是如果你已经把ONES.exe程序放到了其他的目录下了,操作系统就会提示你无法打开应用程序,势必造成了一些没用的垃圾选项,严重影响了人们对于完美的追求。那么修改方法有两种:1、直接移除ONES.exe对注册表中自动播放选项的读写;2、让ONES.exe每次都能重新进行注册表的覆盖,以确保ONES.exe路径的完整性。
修改工具就用OD动态分析,我们通过搜索“AutoplayHandlers”来到

0045E189  |.  8B2D 14E04900 MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegCrea>;  ADVAPI32.RegCreateKeyA
0045E18F  |.  56            PUSH ESI
0045E190  |.  8D4424 0C    LEA EAX,DWORD PTR SS:[ESP+C]
0045E194  |.  50            PUSH EAX                                ; /pHandle
0045E195  |.  68 E8194A00   PUSH ONES.004A19E8                      ; |Subkey =     "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\HandleCDBurningOnArrival"
0045E19A  |.  68 02000080   PUSH 80000002                            ; |hKey = HKEY_LOCAL_MACHINE
0045E19F  |.  FFD5          CALL EBP                                ; \RegCreateKeyA
0045E1A1  |.  85C0          TEST EAX,EAX
0045E1A3  |.  8B1D 1CE04900 MOV EBX,DWORD PTR DS:[<&ADVAPI32.RegSetV>;  ADVAPI32.RegSetValueExA
0045E1A9  |.  75 22        JNZ SHORT ONES.0045E1CD
0045E1AB  |.  8B4C24 0C    MOV ECX,DWORD PTR SS:[ESP+C]
0045E1AF  |.  6A 00        PUSH 0                                  ; /BufSize = 0
0045E1B1  |.  68 E0E54900   PUSH ONES.0049E5E0                      ; |Buffer = ONES.0049E5E0
0045E1B6  |.  6A 01        PUSH 1                                  ; |ValueType = REG_SZ
0045E1B8  |.  6A 00        PUSH 0                                  ; |Reserved = 0
0045E1BA  |.  68 E0194A00   PUSH ONES.004A19E0                      ; |ValueName = "Zulu2"
0045E1BF  |.  51            PUSH ECX                                ; |hKey
0045E1C0  |.  FFD3          CALL EBX                                ; \RegSetValueExA
0045E1C2  |.  8B5424 0C    MOV EDX,DWORD PTR SS:[ESP+C]
0045E1C6  |.  52            PUSH EDX                                ; /hKey
0045E1C7  |.  FF15 20E04900 CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
0045E1CD  |>  8D4424 0C    LEA EAX,DWORD PTR SS:[ESP+C]
0045E1D1  |.  50            PUSH EAX

观察下结构发现这段代码刚好完成了一次 HandleCDBurningOnArrival 注册表的注册,路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\HandleCDBurningOnArrival、表名Zulu2、表值为空,现在只要破坏掉这些数据结构就可以使HandleCDBurningOnArrival失效,但是这种修改方法还是有些不足之处,我们难以预料堆栈的平衡,修改的地方偏多,还是找找入口地址,我们继续往上看


0045E150  /$  81EC 08010000 SUB ESP,108
0045E156  |.  A1 C0AC4B00   MOV EAX,DWORD PTR DS:[4BACC0]
0045E15B  |.  33C4          XOR EAX,ESP
0045E15D  |.  898424 040100>MOV DWORD PTR SS:[ESP+104],EAX
0045E164  |.  813D 28EC4D00>CMP DWORD PTR DS:[4DEC28],834
0045E16E  |.  7D 17        JGE SHORT ONES.0045E187
0045E170  |.  33C0          XOR EAX,EAX
0045E172  |.  8B8C24 040100>MOV ECX,DWORD PTR SS:[ESP+104]
0045E179  |.  33CC          XOR ECX,ESP
0045E17B  |.  E8 2B2F0200   CALL ONES.004810AB
0045E180  |.  81C4 08010000 ADD ESP,108
0045E186  |.  C3            RETN
0045E187  |>  53            PUSH EBX
0045E188  |.  55            PUSH EBP
0045E189  |.  8B2D 14E04900 MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegCrea>;  ADVAPI32.RegCreateKeyA
0045E18F  |.  56            PUSH ESI
0045E190  |.  8D4424 0C    LEA EAX,DWORD PTR SS:[ESP+C]
0045E194  |.  50            PUSH EAX                                ; /pHandle
0045E195  |.  68 E8194A00   PUSH ONES.004A19E8                      ; |Subkey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\HandleCDBurningOnArrival"
0045E19A  |.  68 02000080   PUSH 80000002                            ; |hKey = HKEY_LOCAL_MACHINE
0045E19F  |.  FFD5          CALL EBP                                ; \RegCreateKeyA
0045E1A1  |.  85C0          TEST EAX,EAX

刚好发现 0045E16E |. 7D 17 JGE SHORT ONES.0045E187,跳转到 0045E187 |> 53 PUSH EBX 刚好是入口地址,现在只要稍加修改就行了把“JGE 0045E187”改成“NOP”就移除了这个自动播放的注册功能,改成“JMP 0045E187”就可以每次运行都重新注册了。是不是感觉更加绿色了呢?

exFAT文件系统是FAT32的升级版,解决了FAT32单文件4G的限制。与NTFS格式相比具有简单性,因为FAT系统不具备NTFS的安全性和权限管理而更适合被用于外部存储设备,如优盘、闪盘、超棒、记忆棒等闪存设备。在这些闪存设备中都存在着芯片颗粒的读写次数限制,这时FAT的简单性也就发挥了作用,简单性意味着没了的安全性和权限管理表,虽说每次读写都仅仅少了安全性和权限管理表的几次访问和记录,但是的的确确减少了读写的次数,因而提高了设备的使用寿命。如果把exFAT文件系统作为我们BT、电驴等分享式下载工具的下载分区,不也能达到减少磁头的读写次数,提高硬盘的使用寿命吗?
XP系统只要打KB955704补丁就可以支持exFAT格式了。作为一个系统爱好者,自然也得把自己的系统维护工具PE来个升级,通过解压补丁包、替换文件、增加注册表以达到增加exFAT文件系统的支持。大多情况下,我们很容易从网络资源中找到我们想要的一些东西,但有时却是不能的,虽然找到了经过资源精简的SHELL32.DLL,但是有一个问题困扰着我,那就是不能移除右键菜单的“自动播放(&P)”功能。在搜索未果的情况下,只能祭出反汇编动态调试工具OLLYDBG,把SHELL32.DLL载入反汇编分析,
1、通过搜素关键字“自动播放”找到

7D65F413  |.  50            |PUSH EAX                                ; |Buffer
7D65F414  |.  68 38210000   |PUSH 2138                              ; |RsrcID = STRING "自动播放(&P)"
7D65F419  |.  FF35 A4E5797D |PUSH DWORD PTR DS:[7D79E5A4]            ; |hInst = NULL
7D65F41F  |.  FF15 541D597D |CALL DWORD PTR DS:[<&USER32.LoadStringW>; \LoadStringW

2、这个函数,接着往上分析条件跳转的地方

7D65F3DD  |.  FF90 94000000 |CALL DWORD PTR DS:[EAX+94]
7D65F3E3  |.  81BD 34F1FFFF>|CMP DWORD PTR SS:[EBP-ECC],1000
7D65F3ED  |.  74 41        |JE SHORT SHELL32.7D65F430
7D65F3EF  |.  83BD 34F1FFFF>|CMP DWORD PTR SS:[EBP-ECC],1
7D65F3F6  |.  74 38        |JE SHORT SHELL32.7D65F430

3、从这里看可知跳转到地方是7D65F430,转到7D65F430看下

7D65F430  |>  53            |PUSH EBX                                ; /Arg4
7D65F431  |.  68 ACF7657D   |PUSH SHELL32.7D65F7AC                  ; |Arg3 = 7D65F7AC
7D65F436  |.  57            |PUSH EDI                                ; |Arg2
7D65F437  |.  68 44E9597D   |PUSH SHELL32.7D59E944                  ; |Arg1 = 7D59E944
7D65F43C  |.  8BCE          |MOV ECX,ESI                            ; |
7D65F43E  |.  E8 7D3DF9FF   |CALL SHELL32.7D5F31C0                  ; \SHELL32.7D5F31C0
7D65F443  |.  53            |PUSH EBX
7D65F444  |.  68 1451597D   |PUSH SHELL32.7D595114
7D65F449  |.  68 E4E9597D   |PUSH SHELL32.7D59E9E4                  ;  UNICODE "Extended"
7D65F44E  |>  8BCE          |MOV ECX,ESI                            ; |
7D65F450  |.  68 54365B7D   |PUSH SHELL32.7D5B3654                  ; |Arg1 = 7D5B3654
7D65F455  |.  E8 663DF9FF   |CALL SHELL32.7D5F31C0                  ; \SHELL32.7D5F31C0
7D65F45A  |.  68 04010000   |PUSH 104                                ; /Arg2 = 00000104
7D65F45F  |.  8D85 F4FDFFFF |LEA EAX,DWORD PTR SS:[EBP-20C]          ; |
7D65F465  |.  50            |PUSH EAX                                ; |Arg1
7D65F466  |.  8BCE          |MOV ECX,ESI                            ; |
7D65F468  |.  E8 D4FBFFFF   |CALL SHELL32.7D65F041                  ; \SHELL32.7D65F041
7D65F46D  |.  53            |PUSH EBX
7D65F46E  |.  8D85 F4FDFFFF |LEA EAX,DWORD PTR SS:[EBP-20C]
7D65F474  |.  50            |PUSH EAX
7D65F475  |.  57            |PUSH EDI
7D65F476  |.  68 70365B7D   |PUSH SHELL32.7D5B3670                  ;  UNICODE "shell\AutoRun\command"
7D65F47B  |.  E9 49020000   |JMP SHELL32.7D65F6C9
7D65F480  |>  68 50E4597D   |PUSH SHELL32.7D59E450                  ; /String2 = "ShellExecute"
7D65F485  |.  FFB5 38F1FFFF |PUSH DWORD PTR SS:[EBP-EC8]            ; |String1
7D65F48B  |.  FF15 E415597D |CALL DWORD PTR DS:[<&KERNEL32.lstrcmpiW>; \lstrcmpiW

4、很明显还是在执行自动播放的ShellExecute。返回步骤2,继续往上分析条件跳转语句,来到

7D65F3BB  |.  FF90 DC000000 |CALL DWORD PTR DS:[EAX+DC]
7D65F3C1  |.  85C0          |TEST EAX,EAX
7D65F3C3  |.  0F84 07030000 |JE SHELL32.7D65F6D0

5、这次是跳转到7D65F6D0,转到7D65F6D0看下

7D65F671  |.  85C0          |TEST EAX,EAX
7D65F673  |.  74 5B        |JE SHORT SHELL32.7D65F6D0
7D65F675  |.  53            |PUSH EBX
7D65F676  |.  68 00365B7D   |PUSH SHELL32.7D5B3600                  ;  UNICODE "Autorun"
7D65F67B  |.  EB 45        |JMP SHORT SHELL32.7D65F6C2
7D65F67D  |>  8B06          |MOV EAX,DWORD PTR DS:[ESI]
7D65F67F  |.  8BCE          |MOV ECX,ESI
7D65F681  |.  FF90 DC000000 |CALL DWORD PTR DS:[EAX+DC]
7D65F687  |.  85C0          |TEST EAX,EAX
7D65F689  |.  74 45        |JE SHORT SHELL32.7D65F6D0
7D65F68B  |.  68 F0355B7D   |PUSH SHELL32.7D5B35F0                  ; /String2 = "command"
7D65F690  |.  FFB5 38F1FFFF |PUSH DWORD PTR SS:[EBP-EC8]            ; |/Path
7D65F696  |.  FF15 601C597D |CALL DWORD PTR DS:[<&SHLWAPI.PathFindFi>; |\PathFindFileNameW
7D65F69C  |.  50            |PUSH EAX                                ; |String1
7D65F69D  |.  FF15 E415597D |CALL DWORD PTR DS:[<&KERNEL32.lstrcmpiW>; \lstrcmpiW
7D65F6A3  |.  85C0          |TEST EAX,EAX
7D65F6A5  |.  75 13        |JNZ SHORT SHELL32.7D65F6BA
7D65F6A7  |.  68 04010000   |PUSH 104                                ; /Arg2 = 00000104
7D65F6AC  |.  8D85 F4FDFFFF |LEA EAX,DWORD PTR SS:[EBP-20C]          ; |
7D65F6B2  |.  50            |PUSH EAX                                ; |Arg1
7D65F6B3  |.  8BCE          |MOV ECX,ESI                            ; |
7D65F6B5  |.  E8 87F9FFFF   |CALL SHELL32.7D65F041                  ; \SHELL32.7D65F041
7D65F6BA  |>  53            |PUSH EBX
7D65F6BB  |.  8D85 F4FDFFFF |LEA EAX,DWORD PTR SS:[EBP-20C]
7D65F6C1  |.  50            |PUSH EAX
7D65F6C2  |>  57            |PUSH EDI
7D65F6C3  |.  FFB5 38F1FFFF |PUSH DWORD PTR SS:[EBP-EC8]
7D65F6C9  |>  8BCE          |MOV ECX,ESI                            ; |
7D65F6CB  |.  E8 F03AF9FF   |CALL SHELL32.7D5F31C0                  ; \SHELL32.7D5F31C0
7D65F6D0  |>  FFB5 38F1FFFF |PUSH DWORD PTR SS:[EBP-EC8]            ; /String
7D65F6D6  |.  FF15 3016597D |CALL DWORD PTR DS:[<&KERNEL32.lstrlenW>>; \lstrlenW

6、这下心里有底了,已经不在Autorun代码的语段里了,返回步骤4,把"JE 7D65F6D0"改成"jmp 7D65F6D0",完工,测试下,OK,搞定……