Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 | 2 |

 

  Вопрос: Самоудаляющееся приложение. Добавлено: 02.10.05 08:02  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 
Искал вчера в POFFS реализацию проецирования файлов на PB и наткнулся вот.
#Compile Exe
#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-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 02.10.05 10:36
Забавный способ.
Но это не так страшно по сравнению с тем, что я нашел в дизассемблерированном листинге своей программы на C++, скомпилированной с #define UNICODE на MS VS 2002 в конфигурации Release:
.text:00402078 ; --------------- S U B R O U T I N E ---------------------------------------
.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


.rdata:00406374 aMscoree_dll    db 'mscoree.dll',0      ; DATA XREF: sub_402078o


.rdata:00406364 aCorexitprocess db 'CorExitProcess',0   ; DATA XREF: sub_402078+Fo

Ахтунг, дотнет наступает! Всем срочно закрыть окна и завести пингвинов или чертей! ОС: Windows XP SP2

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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-сайт: sharpc.livejournal.com
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 03.10.05 00:42
2Sharp, вижу... добавили на всяк случай :)))

Ответить

Номер ответа: 7
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 03.10.05 07:35
Хоть это и серьёзная тема, содержащая код для ПБ программистов(намёк на злостных флудеров), позволю себе тоже лирическое отступление.
 Как известно, Си++ - это си с добавкой знака инкремента(увеличение на 1). Си# - это Си с добавлением знака метаоператора, только поставленного с ног на голову. Получается что Си# - это одна большая директива компилятору наизнанку :)

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 03.10.05 13:59
Малацца :)
Но если Си - компилируемый язык, то C# указывает на то, что нужно делать наоборот и еще в директиве препроцессора, т.е., если
Си = compile();
то
C# = #define COMPILE false

Ответить

Номер ответа: 9
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #9 Добавлено: 04.10.05 04:41
2Sharp, вижу... добавили на всяк случай :)))


a ya ne vizhu pr oche vy govorite :/ mozhet podskazhite?

Ответить

Номер ответа: 10
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 04.10.05 05:31
Не, всё намного проще. Если знак # стоит слева, значит это директива туда (если ты не араб конечно), а у нас наоборот получается. C# - директива виртуальной машины прораммисту что и как он должен программировать. :)

Ответить

Номер ответа: 11
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #11
Добавлено: 04.10.05 08:11
a ya ne vizhu pr oche vy govorite :/ mozhet podskazhite?
Об ассемблерном коде, который представим в виде:
if(hModule = GetModuleHandleA("mscoree.dll";)){
    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-сайт: basicproduction.nm.ru
 Профиль | | #14
Добавлено: 05.10.05 05:17
Да, в XP-ке похоже файл не проецируется на память.
extern "C" void CALLBACK CleanupA(HWND, HINSTANCE, PSTR, int)
{
    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    ;DeleteFile
        push    FreeLibrary
        ret
    }
}

Ответить

Номер ответа: 15
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #15
Добавлено: 05.10.05 18:53
Можно удалять свою прогу запуская .js скрипт. Потом скрипт самоудаляется.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам