1、古老的 BAT 和 SYS
从 Win16 和 Win9X 时代遗留下来的,%BOOTDRV%/Autoexec.bat、%windir%/WinStart.bat、%windir%/DosStart.bat,没见过不稀奇,什么意思可以体会出来,不解释了。
%BOOTDRV%/Config.sys 装载 16 位设备驱动用的,最常见的是 DOS 下要用光驱,都是在这个文件配制的。
2、古老的 INI
从 Win16 时代遗留下来的,%windir%/Win.ini(load/run)、%windir%/System.ini(shell)。
3、常规的“启动”
开始菜单-程序里那个,注意隐藏、系统属性的文件不会显示在菜单里。而且这个项是多用户的,也就是说这里显示的是“All Users”和当前用户的“启动”目录。一般系统装在 C 盘的话就是“C:/Documents and Settings/All Users/「开始」菜单/程序/启动”。检查这个启动项的时候,应该把所有用户都查看一下,包括 Default User 的。
不过这些启动文件夹,是可以改位置的,它们都是由注册表决定的。HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders 下的 Common Startup,HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders 和 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/User Shell Folders 下的 Startup。
4、注册表中专门的“启动”
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run,对当前用户有效;
HKEY_USERS/.DEFAULT/Software/Microsoft/Windows/CurrentVersion/Run,对默认用户有效,比如匿名用户、SYSTEM;
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run,对本机所有用户有效。
5、注册表中专门用来安装程序的“启动”
把上面的 Run 换成 RunOnce、RunOnceEx,也就是只运行一次,运行后系统就把这个值删除。这是给安装、更新程序用的,只需要运行一次。WinNT 系统可以用 gpedit.msc 把这个项设置为忽略,在“计算机配制-管理模板-系统-登录”。
6、注册表中用来运行系统服务的“启动”
把3的 Run 换成 RunServices。这个在 Win98 下据说是把一般的程序当系统服务来运行,可以不出现在任务列表里,我试过把屏保程序放这里启动,结果出现的是屏保程序的设置界面,在 WinNT 下我就没用过这个项了。同理,还有 RunServicesOnce。
7、注册表中册组策略用的“启动”
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/policies/Explorer/Run,这个项比较少人知道。
8、注册表中对 Win.ini 和 System.ini 的替代
Win.ini 的 load 和 run 对应 HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Windows 下的 load 和 run。System.ini 的 shell 对应 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon 下的 Shell,另外这个下面还有 UIHost、Userinit、VmApplet 也都可以启动程序。
NT 有用到一个映射,可以研究一下 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/IniFileMapping 下的 system.ini 和 win.ini 两个子键。
9、注册表中全局 DLL “启动”
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows 下的 AppInit_DLLs。
10、Windows NT 开关机脚本
%windir%/system32/GroupPolicy/Machine/Scripts 下有两个目录,Startup 存放开机脚本,Shutdown 存放关机脚本。这个要配合注册表的 HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/windows/System/Scripts,下面有 Startup、Shutdown 两个子键,再下面会有数字命名的键,对着研究就知道了。
11、Windows NT 系统服务
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 下。
12、文件关联
HKEY_CLASSES_ROOT 下,以前的冰河关联了 .txt 文件,如果没注意,杀了一个后,双击 .txt 文件,又中了。
13、CMD AutoRun(很少人知道)
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor 下的 AutoRun,在运行 cmd.exe 的时候,这里的命令会被执行。如果我们在这里写上 exit,则 cmd 一出现马上又关闭,应该用 cmd /d 来避免。建议如果是通过快捷方式运行的应该加上 /d 的参数,如果是通过“运行”运行的应该多打一下“ /d”,这样可以减少危险。
14、根目录下的 AutoRun.inf
在这个文件里可以定义驱动器的图标和右键菜单,还有双击默认执行的命令。
15、其他软件自定义的启动项
比如 OFFICE 的宏就可以在启动 Word 的时候执行,宏代码可以调用外部程序;QQ 装皮肤用的是一个 .VBS 脚本程序……
16、驱动
和 Win32 系统服务一样是在 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 下,不过 Type = 1(服务一般是 20)。而且文件一般都放在 C:/WINDOWS/system32/drivers。驱动运行在 Ring0 的,服务虽然是 SYSTEM 身份运行,不过是在 Ring3,所以还是不可以直接访问硬件。
17、GINA DLL
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon 下的 GinaDLL,这个如果存在,一般是 Gina 木马,或者是一些指纹、虹膜验证的程序,比如是 IBM 笔记本有见过带指纹验证的,省去输入登录密码的麻烦。我自己也写过 Gina 木马,之前倒是给忘记写这个项了!
18、镜像调试器
NT 型系统,除了允许设置系统公共的调试器外,还可以给每个命名的可执行程序指定一个独立的调试器,而且是在镜像运行前就调用调试器,注册表:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options 下,以程序名字为子键,然后一个字符串值,名字 Debugger,具体可以参考:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/Your Image File Name Here without a path。例如:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/cmd.exe
Debugger = "Notepad.exe"
设置后以后运行 cmd.exe 会调用 Notepad.exe 来调试 cmd.exe,但由于 Notepad.exe 不是设计为调试器,所以它直接打开了 cmd.exe,当成文本显示。如果设置为自己,则会递归调用自己,最后命令行超过最大长度,系统提示出错,程序无法被运行。
那么病毒怎么利用这个呢?最简单的就是把自己设置为 explorer.exe 的调试器,然后做点调试相关的事,把 explorer.exe 运行起来,这样就不会被发现了。
18、Winlogon Notify DLL
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon/Notify 下有很多子键,子键下有叫 DLLName 的字符串值,指定了 DLL 的名字,当然这要放在 System32 文件夹下。下面还有 Logoff/Logon/ScreenSaver/Shutdown/StartShell/Startup 等字符串值,指定 Winlogon 事件发生的时候要调用的导出函数。
使用这个方式加载的例子:杀毒软件的部分组件,例如:金山毒霸、Kaspersky(卡巴斯基)。