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,搞定……

标签: none

添加新评论