|
我最近在学pecmd的命令,在研究“月光森林”的PE的时候有几句代码不是很理解,希望大家能和我解释一下。
首先先把代码抛上来。
/////////月光森林///////////
/配置文件开始(注意,文件的开始和结束必须是空行或注释,行首注释可以用"/"或"`",但行后的注释必须是"`")
`开始日志记录
_SUB Open_LOGS
LOGS %SystemRoot%\PECMD.LOG
_END
`判断外置程序
_SUB Set_SOFTLOAD
EXEC =!%SystemRoot%\SYSTEM32\ShowDrive.EXE
FORX !\PESOFT\PESOFT.INI,MyInI2,1,TEAM LOAD %MyInI2%|ENVI LOADINI2=YES
FIND $%LOADINI2%=YES,!LINK %Desktop%\启用外部软件,PECMD.EXE,LOAD \PESOFT\PESOFT.INI,shell32.dll#180
_END
`设定系统
_SUB Fix_System
TEXT 正在设定系统……#0xFFFFFF
ENVI V0=HKLM\Software\Microsoft\Windows\CurrentVersion
ENVI V1=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace
REGI %V0%\ShellServiceObjectDelayLoad\PostBootReminder=
REGI %V1%\{7007ACC7-3202-11D1-AAD2-00805FC1270E}\!
REGI %V1%\{D20EA4E1-3957-11d2-A40B-0C5020524153}\!
TEAM REGI HKCR\lnkfile\IsShortcut|ENVI V0=|ENVI V1=
REGI HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\!
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoNetConnectDisconnect=#0x1
//不显示我的文档。
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu\{450D8FBA-AD25-11D0-98A8-0800361B1103}=#1
`添加ImDisk的快捷方式
REGI HKCR\Drive\shell\ImDiskSaveImage\=保存ImDisk虚拟磁盘
REGI HKCR\Drive\shell\ImDiskSaveImage\command\=rundll32.exe imdisk.cpl,RunDLL_SaveImageFile %L
REGI HKCR\Drive\shell\ImDiskUnmount\=卸载ImDisk虚拟磁盘
REGI HKCR\Drive\shell\ImDiskUnmount\command\=rundll32.exe imdisk.cpl,RunDLL_RemoveDevice %L
REGI HKLM\SOFTWARE\Classes\Ultraiso\shell\ImDiskMountFile\=加载ImDisk虚拟磁盘
REGI HKLM\SOFTWARE\Classes\Ultraiso\shell\ImDiskMountFile\command\=rundll32.exe imdisk.cpl,RunDLL_MountFile %L
REGI HKLM\SOFTWARE\Classes\Winimage\shell\ImDiskMountFile\=加载ImDisk虚拟磁盘
REGI HKLM\SOFTWARE\Classes\Winimage\shell\ImDiskMountFile\command\=rundll32.exe imdisk.cpl,RunDLL_MountFile %L
`在设备管理器中显示中文
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}\=DVD/CD-ROM 驱动器
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}\=磁盘驱动器
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\=显示卡
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E969-E325-11CE-BFC1-08002BE10318}\=软盘控制器
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\=IDE ATA/ATAPI 控制器
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}\=键盘
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\=声音、视频和游戏控制器
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}\=鼠标和其它指针设备
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\=网络适配器
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E97D-E325-11CE-BFC1-08002BE10318}\=系统设备
REGI HKLM\SYSTEM\CurrentControlSet\Control\Class\{71A27CDD-812A-11D0-BEC7-08002BE2092F}\=存储卷
`修改注册表和相关文件名以支持 Vista 安装
REGI HKLM\SYSTEM\CurrentControlSet\Control\MiniNT\!
EXEC !CMD.EXE /C "REN %SystemRoot%\SYSTEM32\HALACPI.DLL HAL.DLL"
_END
`列表框选择结果检测
_SUB CheckMod
KILL \%Windows1%
TEXT 正在设定虚拟内存……#0xFFFFFF
FIND $%List1%=%P1%,TEAM FILE C:\PAGEFILE.SYS|PAGE C:\PAGEFILE.SYS 256 384
FIND $%List1%=%P2%,TEAM FILE D:\PAGEFILE.SYS|PAGE D:\PAGEFILE.SYS 256 384
FIND $%List1%=%P3%,TEAM FILE E:\PAGEFILE.SYS|PAGE E:\PAGEFILE.SYS 256 384
FIND $%List1%=%P4%,TEAM FILE F:\PAGEFILE.SYS|PAGE F:\PAGEFILE.SYS 256 384
FIND $%List1%=%P5%,TEAM FILE G:\PAGEFILE.SYS|PAGE G:\PAGEFILE.SYS 256 384
FIND $%List1%=%P6%,TEAM FILE H:\PAGEFILE.SYS|PAGE H:\PAGEFILE.SYS 256 384
FIND $%List1%=%P7%
_END
`配置选择窗口
_SUB Windows1,W305H185,设置虚拟内存,,,1
ENVI P1=C 盘 (C:\PAGEFILE.SYS)
ENVI P2=D 盘 (D:\PAGEFILE.SYS)
ENVI P3=E 盘 (E:\PAGEFILE.SYS)
ENVI P4=F 盘 (F:\PAGEFILE.SYS)
ENVI P5=G 盘 (G:\PAGEFILE.SYS)
ENVI P6=H 盘 (H:\PAGEFILE.SYS)
ENVI P7=不设置虚拟内存(不推荐)
LABE Label1,L48T10W282H20,温馨提示:检测到系统的物理内存较小
LABE Label2,L48T30W282H20,强烈建议设置虚拟内存提高系统稳定性
GROU Group1,L8T50W282H115,请选择虚拟内存位置
LIST List1,L28T80W172H20,%P1%|%P2%|%P3%|%P4%|%P5%|%P6%|%P7%,,%P2%
ITEM Button1,L213T79W56H24,确定,CALL CheckMod
LABE Label3,L20T118W258H20,注意:设置虚拟内存所在的驱动器不能被格式化!
LABE Label4,L18T138W258H20,设置虚拟内存所在的驱动器也不能用于数据恢复!
_END
`用户登录界面设置子过程
_SUB Start_LOGO
FIND MEM>159,TEAM LOGO %SystemRoot%\SYSTEM32\WINLOGON.JPG|TEXT 初始化系统……#0xFFFFFF L438 T250 R680 B272!TEXT 初始化系统……#0xFFFFFF L438 T250 R680 B272
TEAM EXEC =!%SystemRoot%\SYSTEM32\ShowDrive.EXE|EXEC =!%SystemRoot%\SYSTEM32\regorderdrv.cmd
TEAM FILE %SystemRoot%\*.??_|FILE *.??_|FILE %SystemRoot%\SYSTEM32\DRIVERS\*.SY_
TEAM FILE %SystemRoot%\SYSTEM32\MbrFix.exe|FILE %SystemRoot%\SYSTEM32\mountvol.exe|FILE %SystemRoot%\SYSTEM32\regorderdrv.cmd
TEAM PATH %TEMP%|FBWF P40 H96|INIT I
FIND MEM>159,!CALL @Windows1
_END
`用户设置
_SUB User_Setting
USER 月光森林,雨季太阳
_END
`创建系统菜单子过程
_SUB Created_SYS_Menu
TEXT 正在创建系统附件菜单……#0xFFFFFF
EXEC @PECMD.EXE CALL $SHELL32.DLL,DllInstall,#1,U `建立快速启动栏中的显示桌面
LINK %Programs%\附件\记事本,NOTEPAD.EXE
LINK %Programs%\附件\命令提示符,CMD.EXE
LINK %Programs%\附件\注册表编辑器,REGEDIT.EXE
LINK %Programs%\附件\资源管理器,EXPLORER.EXE,,EXPLORER.EXE,1
_END
` 注册热键
_SUB Set_HotKey
TEXT 注册系统热键……#0xFFFFFF
HOTK #95,PECMD.EXE SHUT R ` 休眠键重启
HOTK #255,PECMD.EXE SHUT ` 电源键关机
HOTK #112,PECMD.EXE ` F1呼出帮助
_END
`创建工具菜单子过程
_SUB Created_Tools_Menu
FORX !\PESOFT\PESOFT.INI,MyInI,1,TEAM LOAD %MyInI%|ENVI LOADINI=YES
_END
`设置 Windows 启动项子过程
_SUB Set_Windiws_Run
RUNS %SystemRoot%\SYSTEM32\internat.exe,输入法指示器
_END
`加载SHELL子过程及清理无用文件
_SUB Start_Shell
TEAM TEXT 正在载入桌面!……#0xFFFFFF|LOGO|SHEL %SystemRoot%\EXPLORER.EXE|WAIT 6000
_END
_SUB Last_Clear
TEAM KILL SMSS|KILL WINLOGON|KILL REG|WAIT 2000
TEAM FILE %SystemRoot%\SYSTEM32\SMSS.EXE|FILE %SystemRoot%\SYSTEM32\WINLOGON.EXE|FILE %SystemRoot%\SYSTEM32\WINLOGON.JPG|WAIT 1000
FIND $%LOADINI%=YES,!CALL Set_SOFTLOAD
_END
`保存日志记录
_SUB Save_LOGS
LOGS
_END
`主体执行流程
/CALL Open_LOGS `开始日志记录
DISP B32
CALL Start_LOGO `用户登录界面设置
/CALL User_Setting `用户设置
CALL Fix_System `设定系统
CALL Created_SYS_Menu `创建系统菜单
CALL Created_Tools_Menu `创建工具菜单
CALL Set_Windiws_Run `设置Windows启动项
/CALL Set_HotKey `注册热键
CALL Start_Shell `启动 SHELL
CALL Last_Clear `最后的清理及判断外置的情况
/CALL Save_LOGS `执行完毕,并保存日志
//////////
其中最后“主体执行流程的那几句我看不太明白
不理解代码:
/CALL Open_LOGS `开始日志记录
DISP B32
CALL Start_LOGO `用户登录界面设置
/CALL User_Setting `用户设置
CALL Fix_System `设定系统
CALL Created_SYS_Menu `创建系统菜单
CALL Created_Tools_Menu `创建工具菜单
CALL Set_Windiws_Run `设置Windows启动项
/CALL Set_HotKey `注册热键
CALL Start_Shell `启动 SHELL
CALL Last_Clear `最后的清理及判断外置的情况
/CALL Save_LOGS `执行完毕,并保存日志
那几行代码用的是Call语句,PECMD里看了一下,是用来调用子过程的,但它调用的都是上面已经执行过了的,这有什么用?为什么我把他们注释了PE启动完就不加载桌面了? |
|