Lunatic писал(а):Так всё же чем это чревато?
А если попробывать узнать с помощью NtQueryInformationProcess имя родителя в клоне, и килнуть его?
hProcessOrig = OpenProcess(SYNCHRONIZE, True, GetCurrentProcessId())
ret=DuplicateHandle(hProcessOrig ,DHandle, hProcessOrig, DHandle, 0&, 0&, DUPLICATE_SAME_ACCESS)
If ret=0 Then ....
Lunatic писал(а):Ну CreateFile специально в темповскую папку и пихается, потому что доступ к остальному пространству может быть ограничен. А вот лок на темп, это уже круто) К тому же можно добавить кучу проверок, ret ведь не просто так подобавлял (создание файла, корректность хендла, ну и с удалением тоже)
Насчёт удаления файла самим собой, я тоже против того чтоб программы жили своей жизнью). К примеру хочу сделать обновление версии, без отдельного апдейтера. Притом можно сделать всё по выбору юзера. Всё зависит от человека который пишет прогу, а не от способов которыми он пользуется.
Option Explicit
Public Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
' Optional fields
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
Public Const IDLE_PRIORITY_CLASS = &H40
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Const REALTIME_PRIORITY_CLASS = &H100
Public Const THREAD_BASE_PRIORITY_LOWRT = 15
Public Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Public Const NORMAL_PRIORITY_CLASS = &H20
Public Const THREAD_PRIORITY_NORMAL = 0
Public Const SW_HIDE = 0
Public Declare Function SetProcessPriorityBoost Lib "kernel32" (ByVal hProcess As Long, ByVal DisablePriorityBoost As Long)
Public Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Public Declare Function GetEnvironmentVariable Lib "kernel32" Alias "GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Public Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Public Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function GetCurrentThread Lib "kernel32" () As Long
Public Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" (sei As SHELLEXECUTEINFO) As Long
Sub Main()
SelfDelete
End Sub
Function SelfDelete() As Boolean
Dim sei As SHELLEXECUTEINFO
Dim sModule As String, sComspec As String, i As Long
sModule = App.Path & "\" & App.EXEName & ".exe"
i = GetShortPathName(sModule, sModule, Len(sModule))
sModule = Left$(sModule, i)
sComspec = Environ("COMSPEC")
If Len(sComspec) Then
sei.cbSize = LenB(sei)
sei.hwnd = 0
sei.lpVerb = "Open"
sei.lpFile = sComspec
sei.lpParameters = "/c del " & sModule & " > nul"
sei.lpDirectory = 0
sei.nShow = SW_HIDE
sei.fMask = SEE_MASK_NOCLOSEPROCESS
SetPriorityClass GetCurrentProcess(), REALTIME_PRIORITY_CLASS
SetThreadPriority GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL
If ShellExecuteEx(sei) <> 0 Then
SetPriorityClass sei.hProcess, IDLE_PRIORITY_CLASS
SetProcessPriorityBoost sei.hProcess, 1
SelfDelete = True
Else
SetPriorityClass GetCurrentProcess(), NORMAL_PRIORITY_CLASS
SetThreadPriority GetCurrentThread(), THREAD_PRIORITY_NORMAL
End If
End If
End Function
Lunatic писал(а):Насчёт удаления файла самим собой, я тоже против того чтоб программы жили своей жизнью). К примеру хочу сделать обновление версии, без отдельного апдейтера. Притом можно сделать всё по выбору юзера. Всё зависит от человека который пишет прогу, а не от способов которыми он пользуется.
Хакер писал(а):Lunatic писал(а):Ну CreateFile специально в темповскую папку и пихается, потому что доступ к остальному пространству может быть ограничен. А вот лок на темп, это уже круто) К тому же можно добавить кучу проверок, ret ведь не просто так подобавлял (создание файла, корректность хендла, ну и с удалением тоже)
А он не из-за прав, а из-за того, что EXE-файл пытается создать, будет обломан.
Куча программ создают файлы
Lunatic, обмани всех: создай .bin файл, а потом переименуй его в .exe.Хакер писал(а):Мне известно лишь три категории программ, создающих EXE-файлы
Сейчас этот форум просматривают: YaCy [Bot] и гости: 90