PowerShell添加或修改注册表开机启动项脚本

我的测试代码:

直接使用命令行操作,添加注册表:

REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v xxxxKey /t REG_SZ /d "powershell -file helloword.ps1"

 

使用ps添加开机启动:

$name = "test_date"
$value = "powershell -file D:\out_test\test2.ps1"
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name $name -PropertyType String -Value $value -ErrorAction Stop

  

运行方法:

powershell -file add2startup.ps1

 

再看我的test2.ps1

Write-Host 'Hello, World!'
Get-Process | Out-File -FilePath D:\out_test\processes.txt
Get-Date | Out-File -FilePath D:\out_test\date.txtt 

 

然后每次开机启动都会生成2个日期和进程的文件!!!

 

类似的恶意文件案例:

https://any.run/report/765b38e1840a1d06361268647372dfc164062ceb5b081dfd9ac1f623a5fa2dfa/aaa62403-7ecb-4327-bf47-7edc78d7d4e5#registry

实现开机启动连接C2服务器:

3660
powershell.exe
write
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
SoftwareUpdater
C:\Users\admin\AppData\Roaming\CTkld85U\presentationhost.exe
 
 
https://any.run/report/f5a763e43cf2258a3add2a1769f9cc9aed3da84f108f4f87831bed16dd6a409b/6bbd7ddf-bd22-4684-b343-3e306214b87a
直接通过powershell进程设置:
Powershell Set-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run -Value 'C:\Users\admin\AppData\Local\Microsoft\s.vbs
3888
Powershell.exe
write
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
C:\Users\admin\AppData\Local\Microsoft\s.vbs
 
类似的,通过mshta创建开机启动项的:
https://any.run/report/a0c31e0b30559e9ec0bb20242226e569e3979a6b536cb0c96fb2450593890e05/c6d527f7-a532-4aa7-a591-c20b1aa68fc9

------------------------------

 

PowerShell添加或修改注册表开机启动项脚本

简介: 代码如下: $name = Read-Host "请输入开机启动项的名字(随便起)" $value = Read-Host "请输入开机启动项的值" try{ New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name $name -PropertyType String -Value $value -ErrorAction Stop $tip = "成功添加开机启动项"+$name+"。

代码如下:

$name = Read-Host "请输入开机启动项的名字(随便起)"
$value = Read-Host "请输入开机启动项的值"
try{
    New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name $name -PropertyType String -Value $value -ErrorAction Stop
    $tip = "成功添加开机启动项"+$name+"。"
    Write-Host $tip -ForegroundColor Green
}catch [System.Exception]{
    Write-Host "开机启动项已经存在,无需添加。修改开机启动项值,请按1:" -ForegroundColor Green
    $value = Read-Host
    if($value -eq "1"){
        $new_value = Read-Host "请为启动项赋予新值"
        Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name $name -Value $new_value
        $tip = "开机启动项"+$name+"的值已经修改,新的值为‘"+$new_value+"’。"
        Write-Host $tip -ForegroundColor Green
    }
}finally{
    Read-Host "按任意键退出"
}

脚本保存到本地xx.ps1文件并设置打开方式为用PowerShell运行,双击运行脚本文件。添加开机启动项(启动项的值为在cmd里可以执行的内容):

目标启动项存在,修改开机启动项:

对应实现的注册表效果如下:

 

 

 

 

 

 

 

PowerShell脚本开机自启动

 

家里有两台台式机,性能还不错,尤其是其中一台机器插了64GB内存,适用于某些内存消耗量大的工作。因此,我打算做内网穿透,以便在外工作时随时连回家里机器。

配置好frp之后,测试OK,可以从外网访问内网机器。但是问题来了,我下载的frp windows客户端没有开机自启动的选项,它的启动方式是在CMD或PowerShell中输入命令./frpc -c frpc.ini。

如何在系统开机后(而非登录后)自动运行这段PowerShell脚本呢? 方法很简单,写一个PowerShell脚本文件,通过PowerShell命令将其设置为开机自启动即可。

  1. PowerShell脚本文件
    打开记事本,输入启动新frpc进程的命令:
    start-process -FilePath C:\frp\frpc.exe -ArgumentList "-c C:\frp\frpc.ini" -WindowStyle Hidden
    将此文件存为frpc.ps1脚本文件。
  2. 开机时自动运行PowerShell脚本
    由于Windows系统默认策略不允许随意运行脚本文件,所以要更改一下:
    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
    定义触发器,设置定时任务:
    $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
    Register-ScheduledJob -Trigger $trigger -FilePath C:\frp\frpc.ps1 -Name StartFrpc

参考资料:

  1. Use PowerShell to Create Job that Runs at Startup
  2. About Execution Policies
 
 
 
 
 
posted @ 2022-03-21 10:58  bonelee  阅读(2072)  评论(0编辑  收藏  举报