task manager - task list

Тема в разделе "WASM.BEGINNERS", создана пользователем OFFSIDE, 30 окт 2008.

  1. OFFSIDE

    OFFSIDE New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    106
    Как спрятать открытое видимое окно в таск менеджере(на вкладке приложения)? Какие zw - nt функции перехватывать? Я написал приложение, скрывающее в процесс листе строку чето-там.exe. Ее там не видно. Но - если это приложение имеет видимое окно, то все напрасно...
     
  2. luckysundog

    luckysundog New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2008
    Сообщения:
    106
    что-нибудь типа EnumWindows может?
     
  3. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Достаточно вызова ShowWindow(),

    Код (Text):
    1. push           SW_HIDE
    2. push           hWnd
    3. call           ShowWindow
    если скрыть процесс,
    то http://www.wasm.ru/article.php?article=apihook_1 там как раз описано
     
  4. OFFSIDE

    OFFSIDE New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    106
    Процесс скрыть как раз не является проблемой. Вопрос в том, чтобы заставить диспечер задач на вкладке "Приложения" не отображать ВИДИМОЕ окно, отображаемое на панели задач. Можно скрыть приложение с панели задач - как вариант, но каким то образом происходит энумерация окон на панели задач? Используется какая то апишка, вот ее я и хочу перехватить.
     
  5. luckysundog

    luckysundog New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2008
    Сообщения:
    106
    еще раз повторю - мне кажется, это хитрое использование EnumWindows
     
  6. luckysundog

    luckysundog New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2008
    Сообщения:
    106
    Ну да, как я и думал, EnumWindows используется. Хукай её или EnumProc. Можешь также поставить окну пустой заголовок, и диспетчер задач не будет видеть окно.

    Подробнее написал здесь - http://luckysundog.livejournal.com/3353.html
     
  7. OFFSIDE

    OFFSIDE New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    106
    Получилось следующее:
    Код (Text):
    1. .486
    2. .model flat,stdcall
    3. option casemap:none
    4.     include windows.inc
    5.     include masm32.inc
    6.     include user32.inc
    7.     include kernel32.inc
    8.     include e:/masm32/macros/macros.asm
    9.     include advapi32.inc
    10.  
    11.     includelib masm32.lib
    12.     includelib user32.lib
    13.     includelib kernel32.lib
    14.     includelib advapi32.lib
    15.    
    16. SetGlobalHookProc PROTO
    17. MessageProc PROTO :DWORD,:DWORD,:DWORD
    18. SetGlobalHook proto
    19. SetHook proto
    20. Unhook proto
    21. ConvertUnicode  proto :dword,:dword
    22. OldCode struct
    23.   One  db ?
    24.   Two  db ?
    25.   Tre  db ?
    26. OldCode ends
    27.  
    28. far_jmp struct
    29.   PuhsOp  db ?;
    30.   PushArg  dd ?;
    31.   RetOp  db ?
    32. far_jmp ends
    33.  
    34. .const
    35. .data
    36. Finded              db 'блокнот',0
    37.  
    38. .data?
    39.  
    40.     hInstance           dd ?    ;Dll's module handle
    41.     Jmpfwq      far_jmp <?>
    42.     Oldfwq      OldCode <?>
    43.     ptrFwd  dd  ?
    44.     locbub      byte 1024   dup(?)
    45. .code
    46.  
    47. DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    48.     .if reason == DLL_PROCESS_ATTACH
    49.  
    50.       push hInst
    51.       pop hInstance
    52.         call      SetGlobalHook
    53.         call      SetHook
    54.     .elseif reason == DLL_PROCESS_DETACH
    55.         call       Unhook                  
    56.     .elseif reason == DLL_THREAD_ATTACH
    57.     .elseif reason == DLL_THREAD_DETACH
    58.     .endif
    59.         mov eax, TRUE
    60.     ret
    61. DllEntry Endp
    62.  
    63. SetGlobalHookProc proc
    64.     invoke SetWindowsHookEx,WH_GETMESSAGE,addr MessageProc, hInstance, 0
    65.     invoke Sleep,INFINITE
    66.     ret
    67. SetGlobalHookProc endp
    68.  
    69. MessageProc proc code:dword,wParam:dword,lParam:dword
    70.     invoke CallNextHookEx,0, code, wParam, lParam  
    71.     ret
    72. MessageProc endp
    73.  
    74. SetGlobalHook proc
    75. LOCAL hMutex: dword
    76. LOCAL TrId: dword
    77.     invoke CreateMutex,NULL,FALSE,CTXT('ProcHideHook')
    78.     mov hMutex,eax
    79.     invoke GetLastError
    80.     .if eax == 0
    81.         invoke CreateThread,NULL, 0, addr SetGlobalHookProc, NULL, 0, addr TrId
    82.     .else
    83.         invoke CloseHandle,hMutex
    84.     .endif
    85.     ret
    86. SetGlobalHook endp
    87.  
    88. SetHook proc
    89. LOCAL Bytes: dword;
    90.     invoke GetModuleHandle,CTXT('user32.dll')
    91.     invoke GetProcAddress,eax,CTXT('IsWindowVisible')
    92.     mov ptrFwd,eax
    93.     cmp eax ,0
    94.     jle ex
    95.     invoke ReadProcessMemory,INVALID_HANDLE_VALUE, ptrFwd,offset Oldfwq,sizeof Oldfwq,addr Bytes
    96.     push esi
    97.     mov esi,offset Jmpfwq
    98.     assume esi:ptr far_jmp
    99.     mov [esi].PuhsOp,68h
    100.     mov [esi].PushArg,offset IsVisibleN
    101.     mov [esi].RetOp,0C3h
    102.     assume esi:nothing
    103.     pop esi
    104.     invoke WriteProcessMemory,INVALID_HANDLE_VALUE, ptrFwd, offset Jmpfwq, sizeof Jmpfwq,addr Bytes
    105. ex:
    106.     ret
    107. SetHook endp
    108.  
    109. Unhook proc
    110. LOCAL Bytes: dword
    111.     invoke WriteProcessMemory,INVALID_HANDLE_VALUE, ptrFwd,offset Oldfwq,sizeof Oldfwq,addr Bytes
    112.     ret
    113. Unhook endp
    114.  
    115. IsVisibleN proc hWnd:dword
    116. LOCAL string [1024]:byte
    117. LOCAL rwbytes:dword,res:dword
    118. invoke WriteProcessMemory,INVALID_HANDLE_VALUE,ptrFwd,offset Oldfwq,sizeof Oldfwq,addr rwbytes
    119. invoke IsWindowVisible,hWnd
    120. mov res,eax
    121. invoke WriteProcessMemory,INVALID_HANDLE_VALUE,ptrFwd,offset Jmpfwq,sizeof Jmpfwq,addr rwbytes
    122.     invoke InternalGetWindowText,hWnd,addr locbub,1024
    123.     invoke ConvertUnicode,addr locbub,addr string
    124.     invoke CharLower,addr string
    125.     invoke InString,1,addr string,addr Finded
    126.     cmp eax,0
    127.     jg m1
    128.     mov eax,res
    129.     ret
    130. m1:
    131.     mov eax,FALSE
    132.     ret
    133.  
    134. IsVisibleN endp
    135.  
    136. ConvertUnicode proc uses esi edi ubuf:DWORD,mansi:DWORD
    137.    
    138.     .if ubuf==0
    139.         jmp short ex
    140.     .endif
    141.     mov esi,ubuf
    142.     mov edi,mansi
    143. cu1:
    144.     .if word ptr [esi]!=0
    145.         mov ax,word ptr [esi]
    146.         mov byte ptr [edi],al
    147.         add esi,2
    148.         inc edi
    149.         jmp short cu1
    150.     .endif
    151.     mov byte ptr [edi],0
    152. ex:
    153.     ret
    154.  
    155. ConvertUnicode endp
    156.  
    157. End DllEntry
    Но - функция InternalGetWindowText не работает с русскими буквами, либо я что то не так делаю.
    ЗЫ. Это код длл.
    ЗЫЫ. Если поставить в качестве искомой строки англицкие буквы все работает.
    ЗЫЫЫ. Тоже дизассемблил таскменеджер. EnumWindows показалось гиблым делом.
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    OFFSIDE
    Ерундой занимаетесь. Послушали бы JCronuz. Просто создаёте невидимое окно и назначаете его родительским к тому окну, которое хотите спрятать.
     
  9. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Типы не дано заюзать)
    > lodsw
    > stosb
     
  10. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    OFFSIDE не проще заюзать:?

    Код (Text):
    1. int GetClassName(          HWND hWnd,
    2.     LPTSTR lpClassName,
    3.     int nMaxCount
    4. );