Глюки в голове или в винде? (или OpenProcess failed)

Тема в разделе "WASM.WIN32", создана пользователем Bill_Prisoner, 6 июл 2005.

  1. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    При каких обстоятельствах следующий код может возвратить NULL?:


    Код (Text):
    1.  
    2. ;Открываем процесс куда будем внедрять DLL
    3. invoke OpenProcess,\
    4.   PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,0,PID




    PID правильный. Процесс, PID которого передается создан мной. У меня привилегии админа.

    GetLastError возвращает ERROR_NOACCESS.

    Может это фишки XP SP2?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Попробуй добавить SeDebugPrivilege:
    Код (Text):
    1. ;=====================================================================
    2. TOKEN_QUERY = 8
    3. TOKEN_ADJUST_PRIVILEGES = 20h
    4. SE_PRIVILEGE_ENABLED            = 2
    5. ;=====================================================================
    6. struct      LUID
    7.             .LowPart            dd ?
    8.             .HighPart           dd ?
    9. ends
    10. struct      LUID_AND_ATTRIBUTES
    11.             .Luid               LUID
    12.             .Attributes         dd ?
    13. ends
    14. struct      TOKEN_PRIVILEGES
    15.             .PrivilegeCount     dd ?
    16.             .Privileges         LUID_AND_ATTRIBUTES
    17. ends
    18. ;=====================================================================
    19. tp          TOKEN_PRIVILEGES
    20. ht          dd      0
    21. priv        db      'SeDebugPrivilege',0
    22. ;=====================================================================
    23. entry       $
    24.             call    [GetCurrentProcess]
    25.             invoke  OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES+\
    26.                     TOKEN_QUERY,ht
    27.             test    eax,eax
    28.             jz      exit
    29.             invoke  LookupPrivilegeValue,0,priv,tp.Privileges.Luid
    30.             test    eax,eax
    31.             jz      exit
    32.             mov     [tp.PrivilegeCount], 1
    33.             mov     [tp.Privileges.Attributes],SE_PRIVILEGE_ENABLED
    34.             invoke  AdjustTokenPrivileges,[ht],FALSE,tp,0,0,0
    35.             test    eax,eax
    36.             jz      exit
    37.             invoke  CloseHandle,[ht]
    38. ;=====================================================================
     
  3. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Bill_Prisoner

    Попробуй комбинацию флажков PROCESS_ALL_ACCESS или хотябы те же, но без PROCESS_VM_WRITE.

    [edited]

    Хотя у меня в XP-SP2 все нормально открывается и с этими флагами. Ты точно уверен что это id процесса, не потока?
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Bill_Prisoner



    А еще проверь, не защищена ли программа ринг0 протектором типа xprot'а. Они часто перехватывают ZwOpenProcess в ядре. Еще это может мешать руткит установленный в системе.
     
  5. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    alpet

    Точно уверен, что ID процесса.

    Комбинация флажков PROCESS_ALL_ACCESS пробовал. Результат такой же.

    Ms Rem

    Про Root kit идея хорошая, но если я просто пишу программу и в самом начале вызываю OpenProcess, то все нормально. А если у меня OpenProcess вызывается в WinMain, то функция возвращает NULL.



    bogrus

    Debug привилегии включаю, но результат такой же. В WinMain OpenProcess возвращает NULL.



    Я тут хочу новую тему сейчас начать. Она сходиться с этой но более глобальна и думаю все на этом спотыкались.
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Перед OpenProcess обнули SetLastError(ERROR_SUCCESS) и проверь топик ERROR_NOACCESS (000003E6), больно похож
     
  7. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Bill_Prisoner

    1. Можешь выложить бинарник запускаемой программы, если она безопасна (не вирь) ?

    2. Из WinMain другие процессы открываются (например калькулятор) или сбой на всех ?
     
  8. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    alpet

    Сбой на всех. Вот сейчас начитался тут, попробую если не получиться вышлю бинарник. Это не вирь, а просто тестовый пример :)
     
  9. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Это Баг Метафизического порядка :))
     
  10. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Ms Rem

    Извините не в WinMain, а в WndProc. Регистры esi,edi,ebx,ebp восстанавливаю. Но все равно OpenProcess возвращает NULL :dntknw:
     
  11. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Bill_Prisoner

    Из оконной процедуры и с ошибкой? Весьма и весьма странно, однако. По идее 99% HLL кода обычно выполняется как обработчики вызываемые из оконной процедуры, так что проблем с вызовом быть не должно. Может лучше исходный код процедуры представишь целиком?
     
  12. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Ну вот наконец дошло и все разрешилось. Не без помощи васмовцев :)

    Оказывается, что у меня не было выровнено значение esp. А оно должно быть выровнено на 4!!!!!