Страница: 1 | 2 |
Вопрос: Самоудаляющееся приложение.
Добавлено: 02.10.05 08:02
Автор вопроса: CyRax | Web-сайт:
Искал вчера в POFFS реализацию проецирования файлов на PB и наткнулся вот.
#Include "win32api.inc"
'These constants enumerate the different possible Windows OS platforms
%WinUnknown = 0
%Win95 = 1
%Win98 = 2
%WinME = 3
%WinNT = 4
%Win2K = 5
%WinXP = 6
%WinDotNetServer = 7
Function GetWindowsVersion() As Long
'Original function by Scott Turchin. Modified by Bernard Ertl.
'Original posting can be found here:
'http://www.powerbasic.com/support/forums/Forum4/HTML/002310.html
Local osinfo As OSVERSIONINFO
osinfo.dwOsVersionInfoSize = SizeOf(osinfo)
If IsFalse GetVersionEx( osinfo) Then Exit Function ' Function = %WinUnknown
If osinfo.dwPlatformId = %VER_PLATFORM_WIN32_NT Then
Select Case As Long osinfo.dwMajorVersion
Case < 5
Function = %WinNT
Case 5
Select Case As Long osinfo.dwMinorVersion
Case 0
Function = %Win2K
Case 1
Function = %WinXP
Case 2
Function = %WinDotNetServer
End Select
End Select
ElseIf osinfo.dwPlatformId = %VER_PLATFORM_WIN32_WINDOWS Then
Select Case As Long osinfo.dwMinorVersion
Case < 10
Function = %Win95
Case 10
Function = %Win98
Case 90
Function = %WinME
End Select
End If
End Function
Function PBMain() As Long
Dim szModuleName As Asciiz * %MAX_PATH, hKrnl32 As Dword
Dim pExitProcess As Dword, hModule As Dword, pDeleteFile As Dword, pUnmapViewOfFile As Dword, pFreeLibrary As Dword
hModule = GetModuleHandle(ByVal 0)
GetModuleFileName hModule, szModuleName, SizeOf(szModuleName)
hKrnl32 = GetModuleHandle("kernel32.dll")
pExitProcess = GetProcAddress(hKrnl32, "ExitProcess")
pDeleteFile = GetProcAddress(hKrnl32, "DeleteFileA")
pFreeLibrary = GetProcAddress(hKrnl32, "FreeLibrary")
pUnmapViewOfFile = GetProcAddress(hKrnl32, "UnmapViewOfFile")
'%Win9x = 0 '// ill let you add OS-detection code
Dim Win9x As Long
Win9x=GetWindowsVersion
If Win9x <> 0 Then
'// Win95/98/ME
! lea eax, szModuleName
! push 0
! push 0
! push eax
! push pExitProcess
! push hModule
! push pDeleteFile
! push pFreeLibrary
! ret
Else
'// NT4/2K/XP/.NET
CloseHandle 4
! lea eax, szModuleName
! push 0
! push 0
! push eax
! push pExitProcess
! push hModule
! push pDeleteFile
! push pUnmapViewOfFile
! ret
End If
End Function
Ответы
Всего ответов: 20
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 02.10.05 10:36
Забавный способ.
Но это не так страшно по сравнению с тем, что я нашел в дизассемблерированном листинге своей программы на C++, скомпилированной с #define UNICODE на MS VS 2002 в конфигурации Release:
.text:00402078
.text:00402078
.text:00402078 sub_402078 proc near ; CODE XREF: start+EAp
.text:00402078 ; sub_40210D+BAp
.text:00402078
.text:00402078 arg_0 = dword ptr 4
.text:00402078
.text:00402078 push offset aMscoree_dll ; lpModuleName
.text:0040207D call ds:GetModuleHandleA
.text:00402083 test eax, eax
.text:00402085 jz short loc_40209D
.text:00402087 push offset aCorexitprocess ; lpProcName
.text:0040208C push eax ; hModule
.text:0040208D call ds:GetProcAddress
.text:00402093 test eax, eax
.text:00402095 jz short loc_40209D
.text:00402097 push [esp+arg_0]
.text:0040209B call eax
.text:0040209D
.text:0040209D loc_40209D: ; CODE XREF: sub_402078+Dj
.text:0040209D ; sub_402078+1Dj
.text:0040209D push dword ptr [esp+4] ; uExitCode
.text:004020A1 call ds:ExitProcess
.text:004020A7 int 3 ; Trap to Debugger
.text:004020A7 sub_402078 endp
Ахтунг, дотнет наступает! Всем срочно закрыть окна и завести пингвинов или чертей! ОС: Windows XP SP2
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 02.10.05 12:27
1. прикольно... как раз в текущем проекте заюзаю )
ЗЫ
для 9х способ был в пинче.
2. Вай, вай... а если нету библиотеки!?!?!?
Номер ответа: 3
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #3
Добавлено: 02.10.05 14:50
Изобретение велосипедов рулит!
http://www.catch22.net/tuts/selfdel.asp
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 02.10.05 22:09
sne, посмотри мой листинг повнимательнее
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 02.10.05 22:58
На VBSTREET где-то статью видел, там кажись длл на асме внедряют в explorer, длл удаляет нашу прогу и выгружается.
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 03.10.05 00:42
2Sharp, вижу... добавили на всяк случай ))
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 03.10.05 07:35
Хоть это и серьёзная тема, содержащая код для ПБ программистов(намёк на злостных флудеров), позволю себе тоже лирическое отступление.
Как известно, Си++ - это си с добавкой знака инкремента(увеличение на 1). Си# - это Си с добавлением знака метаоператора, только поставленного с ног на голову. Получается что Си# - это одна большая директива компилятору наизнанку
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 03.10.05 13:59
Малацца
Но если Си - компилируемый язык, то C# указывает на то, что нужно делать наоборот и еще в директиве препроцессора, т.е., если
Си = compile();
то
C# = #define COMPILE false
Номер ответа: 9
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #9
Добавлено: 04.10.05 04:41
a ya ne vizhu pr oche vy govorite :/ mozhet podskazhite?
Номер ответа: 10
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #10
Добавлено: 04.10.05 05:31
Не, всё намного проще. Если знак # стоит слева, значит это директива туда (если ты не араб конечно), а у нас наоборот получается. C# - директива виртуальной машины прораммисту что и как он должен программировать.
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 04.10.05 08:11
address = GetProcAddress(hModule, "CorExitProcess"
 address)(uExitCode1);
} else{
ExitProcess(uExitCode);
}
Номер ответа: 12
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #12
Добавлено: 04.10.05 11:12
У меня программа не самоудаляется. WinXP SP2.
Номер ответа: 13
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #13
Добавлено: 04.10.05 21:49
Правильно.
http://www.catch22.net/tuts/selfdel.asp
Номер ответа: 14
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #14
Добавлено: 05.10.05 05:17
Да, в XP-ке похоже файл не проецируется на память.
{
static MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(&mbi, &mbi, sizeof mbi);
PVOID module = mbi.AllocationBase;
CHAR buf[MAX_PATH];
GetModuleFileName(HMODULE(module), buf, sizeof buf);
__asm
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push  eleteFile
push FreeLibrary
ret
}
}
Номер ответа: 15
Автор ответа:
ISpy
Разработчик Offline Client
Вопросов: 47
Ответов: 621
Web-сайт:
Профиль | | #15
Добавлено: 05.10.05 18:53
Можно удалять свою прогу запуская .js скрипт. Потом скрипт самоудаляется.