Windows service

Тема в разделе "WASM.BEGINNERS", создана пользователем Orbit, 18 май 2017.

  1. Orbit

    Orbit Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    64
    Адрес:
    г. Москва
    Начал писать Windows service. Не могу понять почему не создаётся сервис. Может кто подскажет где я неправ?

    Код (ASM):
    1. format PE64 GUI 6.0
    2. entry start
    3.  
    4. include 'win64ax.inc'
    5.  
    6. section '.data' data writeable executable
    7.  
    8. SERVICE_NAME db "installAgent"
    9. SERVICE_DISP db "Эта пользовательская служба используется в сценариях платформы подключенных устройств"
    10.  
    11. SCH dq ?
    12. SVC dq ?
    13.  
    14. SC_MANAGER_ALL_ACCESS = 0xF003F
    15.  
    16. section '.code' code readable executable
    17.  
    18.   proc start
    19.  
    20.   invoke OpenSCManagerA,0,0,SC_MANAGER_ALL_ACCESS
    21.   mov [SCH],rax
    22.  
    23.   invoke GetCommandLineA
    24.  
    25.  invoke CreateServiceA,SCH,SERVICE_NAME,SERVICE_DISP,SC_MANAGER_ALL_ACCESS,0x00000010,0x00000002,0,rax,0,0,0,0,0
    26.   mov [SVC],rax
    27.  
    28.   invoke CloseServiceHandle,SCH
    29.   invoke CloseServiceHandle,SVC
    30.  
    31.   ret
    32.  
    33.   endp
    34.  
    35.   invoke  ExitProcess,rax
    36.  
    37. section '.idata' import data readable writeable
    38.  
    39.   library kernel,'KERNEL32.DLL',\
    40.   user32,'USER32.DLL',\
    41.   advapi32,'ADVAPI32.DLL'
    42.  
    43.   import kernel,\
    44.   ExitProcess,'ExitProcess',\
    45.   GetCommandLineA,'GetCommandLineA'
    46.  
    47.   import user32,\
    48.   MessageBoxA,'MessageBoxA'
    49.  
    50.   import advapi32,\
    51.   OpenSCManagerA,'OpenSCManagerA',\
    52.   CreateServiceA,'CreateServiceA',\
    53.   CloseServiceHandle,'CloseServiceHandle'
     
    Последнее редактирование: 18 май 2017
  2. Orbit

    Orbit Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    64
    Адрес:
    г. Москва
    _edge нравится это.
  3. Orbit

    Orbit Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    64
    Адрес:
    г. Москва
    Всё хорошо. CreateService возвращает хендл, и сразу заходит в ntdll
    Выполняется код:

    mov rcx,qword ptr ss:[rsp+C0]
    xor rcx,rsp
    call kernelbase.7FFE2FBB4E90

    после которого в rax 0
    Почему? Что он делает?

    [​IMG]

    Вот код который выполняю
    Код (ASM):
    1.  
    2. format PE64 GUI 6.0
    3. entry start
    4.  
    5. include 'win64ax.inc'
    6.  
    7. section '.data' data writeable executable
    8.  
    9. SERVICE_NAME db "installAgent"
    10. SERVICE_DISP db "Эта пользовательская служба используется в сценариях платформы подключенных устройств"
    11.  
    12. SCH dd ?
    13. SVC dd ?
    14.  
    15. SC_MANAGER_ALL_ACCESS = 0xF003F
    16. SERVICE_START = 16
    17. SERVICE_ALL_ACCESS = 0xF01FF
    18. SERVICE_INTERACTIVE_PROCESS = 0x00000100
    19. SERVICE_WIN32_OWN_PROCESS = 0x00000010
    20. SERVICE_AUTO_START = 0x00000002
    21.  
    22. section '.code' code readable executable
    23.  
    24.   proc start
    25.  
    26.   invoke OpenSCManagerA,0,0,SC_MANAGER_ALL_ACCESS
    27.   mov [SCH],eax
    28.  
    29.   invoke GetCommandLineA
    30.  
    31.   invoke CreateServiceA,SCH,SERVICE_NAME,SERVICE_DISP,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START,0,rax,0,0,0,0,0
    32.   mov [SVC],eax
    33.  
    34.   invoke CloseServiceHandle,SCH
    35.   invoke CloseServiceHandle,SVC
    36.  
    37.   ret
    38.  
    39.   endp
    40.  
    41.   invoke  ExitProcess,rax
    42.  
    43. section '.idata' import data readable writeable
    44.   library kernel,'KERNEL32.DLL',\
    45.   user32,'USER32.DLL',\
    46.   advapi32,'ADVAPI32.DLL'
    47.  
    48.   import kernel,\
    49.   ExitProcess,'ExitProcess',\
    50.   GetCommandLineA,'GetCommandLineA'
    51.  
    52.   import user32,\
    53.   MessageBoxA,'MessageBoxA'
    54.  
    55.   import advapi32,\
    56.   OpenSCManagerA,'OpenSCManagerA',\
    57.   CreateServiceA,'CreateServiceA',\
    58.   CloseServiceHandle,'CloseServiceHandle'
    59.  
    Причем mov [SCH],eax записывает хендл номально, а mov [SVC],eax не пишется :(
     
  4. Indy_

    Indy_ Active Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    940
  5. Orbit

    Orbit Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    64
    Адрес:
    г. Москва
    Код (ASM):
    1.  
    2. format PE64 GUI 6.0
    3.  
    4. entry GLE
    5. include 'win64ax.inc'
    6.  
    7. section '.data' data writeable executable
    8.  
    9. ERR dq ?
    10.  
    11. section '.code'  code readable executable
    12.  
    13. proc GLE
    14.   invoke GetLastError
    15.   mov ERR,rax
    16.   invoke MessageBoxA
    17.   invoke ExitProcess,rax
    18. endp
    19.  
    Вот так вот?
     
  6. Orbit

    Orbit Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    64
    Адрес:
    г. Москва
    он выдает обракажабру
     
  7. galenkane

    galenkane Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    53
    можно скрин?
     
  8. Indy_

    Indy_ Active Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    940
    galenkane,

    > invoke MessageBoxA без аргументов :crazy:
     
    galenkane нравится это.