权限维持-注册表
Run/RunOnce Keys
用户级
1 | HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run |
管理员
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run |
HKEY_CURRENT_USER
代表当前用户,当前用户登录后才执行的操作。HKEY_LOCAL_MACHINE
代表当前机器,所有操作在用户登录后就执行了。Run
键值代表着开机启动项,也就是说在这个项下的键值会随着开机启动(这里的开机是指用户登录,也就是说只要有登录操作就会执行,注销然后登录,也会执行这个键值)。RunOnce
键值类似于 Run 键值,唯一的区别在于,RunOnce
键值只执行一次,操作执行后会被自动删除。
BootExecute Key
smss.exe进程是微软®公司为其发布的基于Windows NT系统(200/XP/Vista以及Win7等)定义的一个重要系统核心程序,官方描述为:Windows会话管理器。
smss.exe这是一个Windows后台进程,会随着系统一起启动。
由于smss.exe在Windows子系统加载之前启动,因此会调用配置子系统来加载当前的配置单元,具体注册表键值为:
1 | HKLM\SYSTEM\CurrentControlSet\Control\hivelist |
autocheck autochk *
。如果电脑出现蓝屏,将会在电脑重启后自动运行自检程序,试图对系统中存在的错误进行修复。- Autochk.exe 是Windows NT架构的系统中的一个文件,用于确定卷检测(或磁盘检查)任务是手动安排的,还是由于文件系统发现卷处于“dirty”状态而自动安排的,然后判断是否在计算机启动时自动执行chkdsk命令强制检测卷(磁盘),并将相应的消息写入应用程序事件日志中。
Userinit Key
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit这个注册表键的作用是在用户进行登陆时,winlogon运行指定的程序。根据官方文档,可以更改它的值来添加与删除程序。
WinLogon进程加载的login scripts,具体键值:
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon |
Startup Keys
1 | HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders |
Common Administrative Tools
自定义管理工具目录Common AppData
自定义系统文件目录Common Desktop
自定义桌面目录Common Documents
自定义文档目录Common Programs
自定义程序目录Common Start Menu
自定义开始菜单目录Common Startup
自定义开机启动项目录
Browser Helper Objects
本质上是Internet Explorer启动时加载的DLL模块
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects |
这个注册表项的每个子项都保存了一个浏览器助手的信息,所有浏览器助手在用户登录后以dll的方式加载,没有独立的进程,因此很难发现。并且必须在安全模式下才能删除。
生成DLL
设置项目MFC的使用
和ATL的使用
。
注册DLL
需要管理员权限,命令如下:
1 | regsvr32 helloworld.dll /s |
/s
参数用来去掉注册成功的提示框
卸载dll:
1 | regsve32 helloworld.dll /s /u |
在IE页面注入js
可参考以下开源工程做进一步修改:
https://github.com/xiyiaoo/BHO
AppInit_DLLs
加载User32.dll会加载的DLL
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs |
- AppInit_DLLs
键的值可以是一个dll的文件名或一组dll的文件名(通过逗号或空格来分隔),由于空格是用来分隔文件名的,因此dll文件名不能含有空格。第一个dll的文件名可以包含路径,但其他的dll包含的路径将被忽略。
- LoadAppInit_DLLs
键的值表示AppInit_DLLs
键是否有效,为了让AppInit_DLLs
键的值有效,需要将LoadAppInit_DLLs
的值设置为1。