Исполняемый файл под пользовательской утрированной - DEBUG

Тема в разделе "WASM.BEGINNERS", создана пользователем assch, 31 июл 2022.

  1. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    192
    код утрирован,в нём обрабатывается только закрытие процесса
    потому что для темы это не главное
    синтаксис кода интуитивно должен быть понятен
    Код (ASM):
    1.  
    2. ;---------------------------------------------------------------------
    3. include 0.asm
    4. ;---------------------------------------------------------------------
    5. global ssi:STARTUPINFO
    6. global spi:PROCESS_INFORMATION
    7. global sde:DEBUG_EVENT
    8. global dwContinueStatus
    9. global bContinueDebugging
    10. global Path='tst.exe'
    11. ;---------------------------------------------------------------------
    12. fun FunTst
    13. ;---------------------------------------------------------------------
    14. Exit
    15. ;=====================================================================
    16. ;=====================================================================
    17. ;=====================================================================
    18. func FunTst
    19. ;---------------------------------------------------------------------
    20. fun memset,&ssi,0,68   ; sizeof STARTUPINFO
    21. mov ssi.cb,68          ; sizeof STARTUPINFO
    22. fun memset,&spi,0,16   ; sizeof PROCESS_INFORMATION
    23. ;------------------------------------------
    24. fun CreateProcess,&Path,0,0,0,0,DEBUG_ONLY_THIS_PROCESS,0,0,&ssi,&spi
    25. mov bContinueDebugging,1
    26. mov dwContinueStatus,DBG_CONTINUE
    27. ;------------------------------------------
    28. while bContinueDebugging
    29. fun WaitForDebugEvent,&sde,INFINITE
    30. ;-----------------------
    31. if eax == 0
    32. return
    33. endif
    34. ;-----------------------
    35. switch sde.dwDebugEventCode
    36. case EXIT_PROCESS_DEBUG_EVENT
    37. mov bContinueDebugging,0
    38. endsw
    39. ;-----------------------
    40. fun ContinueDebugEvent,spi.dwProcessId,spi.dwThreadId,dwContinueStatus
    41. mov dwContinueStatus,DBG_CONTINUE
    42. endw
    43. ;---------------------------------------------------------------------
    44. end
    45. ;=====================================================================
    46. ;=====================================================================
    47. ;=====================================================================
    48. end
    49.  
    используемые структуры в файле - 0.asm
    Код (ASM):
    1.  
    2. ;---------------------------------------
    3. EXCEPTION_RECORD STRUCT
    4. ExceptionCode         DWORD      ?
    5. ExceptionFlags        DWORD      ?
    6. ExceptionRecord       DWORD      ?
    7. ExceptionAddress      DWORD      ?
    8. NumberParameters      DWORD      ?
    9. ExceptionInformation  DWORD 15 dup(?)
    10. EXCEPTION_RECORD ENDS
    11. ;---------------------------------------
    12. EXCEPTION_DEBUG_INFO STRUCT
    13. ExceptionRecord  EXCEPTION_RECORD <?,?,?,?,?,15 dup(?)>
    14. dwFirstChance     DWORD      ?
    15. EXCEPTION_DEBUG_INFO ENDS
    16. ;---------------------------------------
    17. CREATE_THREAD_DEBUG_INFO STRUCT
    18. hThread               DWORD      ?
    19. lpThreadLocalBase     DWORD      ?
    20. lpStartAddress        DWORD      ?
    21. CREATE_THREAD_DEBUG_INFO ENDS
    22. ;---------------------------------------
    23. CREATE_PROCESS_DEBUG_INFO STRUCT
    24. hFile                 DWORD      ?
    25. hProcess              DWORD      ?
    26. hThread               DWORD      ?
    27. lpBaseOfImage         DWORD      ?
    28. dwDebugInfoFileOffset DWORD      ?
    29. nDebugInfoSize        DWORD      ?
    30. lpThreadLocalBase     DWORD      ?
    31. lpStartAddress        DWORD      ?
    32. lpImageName           DWORD      ?
    33. fUnicode              WORD      ?
    34. CREATE_PROCESS_DEBUG_INFO ENDS
    35. ;---------------------------------------
    36. EXIT_THREAD_DEBUG_INFO STRUCT
    37. dwExitCode  DWORD      ?
    38. EXIT_THREAD_DEBUG_INFO ENDS
    39. ;---------------------------------------
    40. EXIT_PROCESS_DEBUG_INFO STRUCT
    41. dwExitCode  DWORD      ?
    42. EXIT_PROCESS_DEBUG_INFO ENDS
    43. ;---------------------------------------
    44. LOAD_DLL_DEBUG_INFO STRUCT
    45. hFile                     DWORD      ?
    46. lpBaseOfDll               DWORD      ?
    47. dwDebugInfoFileOffset     DWORD      ?
    48. nDebugInfoSize            DWORD      ?
    49. lpImageName               DWORD      ?
    50. fUnicode                  WORD       ?
    51. LOAD_DLL_DEBUG_INFO ENDS
    52. ;---------------------------------------
    53. UNLOAD_DLL_DEBUG_INFO STRUCT
    54. lpBaseOfDll  DWORD      ?
    55. UNLOAD_DLL_DEBUG_INFO ENDS
    56. ;---------------------------------------
    57. OUTPUT_DEBUG_STRING_INFO STRUCT
    58. lpDebugStringData     DWORD      ?
    59. fUnicode              WORD      ?
    60. nDebugStringiLength   WORD      ?
    61. OUTPUT_DEBUG_STRING_INFO ENDS
    62. ;---------------------------------------
    63. RIP_INFO STRUCT
    64. dwError   DWORD      ?
    65. dwType    DWORD      ?
    66. RIP_INFO ENDS
    67. ;---------------------------------------
    68. DEBUGSTRUCT UNION
    69.   Exception         EXCEPTION_DEBUG_INFO <{?,?,?,?,?,15 dup(?)},?>
    70.   CreateThread      CREATE_THREAD_DEBUG_INFO <?,?,?>
    71.   CreateProcessInfo CREATE_PROCESS_DEBUG_INFO <?,?,?,?,?,?,?,?,?,?>
    72.   ExitThread        EXIT_THREAD_DEBUG_INFO <?>
    73.   ExitProcess       EXIT_PROCESS_DEBUG_INFO <?>
    74.   LoadDll           LOAD_DLL_DEBUG_INFO <?,?,?,?,?,?>
    75.   UnloadDll         UNLOAD_DLL_DEBUG_INFO <?>
    76.   DebugString       OUTPUT_DEBUG_STRING_INFO <?,?,?>
    77.   RipInfo           RIP_INFO <?,?>
    78. DEBUGSTRUCT ENDS
    79. ;---------------------------------------
    80. DEBUG_EVENT STRUCT
    81. dwDebugEventCode  DWORD       ?
    82. dwProcessId       DWORD       ?
    83. dwThreadId        DWORD       ?
    84. u                 DEBUGSTRUCT <>
    85. DEBUG_EVENT ENDS
    86. ;---------------------------------------
    87. STARTUPINFO STRUCT
    88. cb              DWORD ?
    89. lpReserved      DWORD ?
    90. lpDesktop       DWORD ?
    91. lpTitle         DWORD ?
    92. dwX             DWORD ?
    93. dwY             DWORD ?
    94. dwXSize         DWORD ?
    95. dwYSize         DWORD ?
    96. dwXCountChars   DWORD ?
    97. dwYCountChars   DWORD ?
    98. dwFillAttribute DWORD ?
    99. dwFlags         DWORD ?
    100. wShowWindow     WORD ?
    101. cbReserved2     WORD ?
    102. lpReserved2     DWORD ?
    103. hStdInput       DWORD ?
    104. hStdOutput      DWORD ?
    105. hStdError       DWORD ?
    106. STARTUPINFO ENDS
    107. ;---------------------------------------
    108. PROCESS_INFORMATION STRUCT
    109. hProcess      DWORD      ?
    110. hThread       DWORD      ?
    111. dwProcessId   DWORD      ?
    112. dwThreadId    DWORD      ?
    113. PROCESS_INFORMATION ENDS
    114. ;---------------------------------------
    115.  
    если к примеру сделать исполняемый файл - tst.exe
    просто с месаджбоксом
    то есть утрированно прописать в коде
    Код (ASM):
    1.  
    2. fun MessageBoxA,0,'Test',0,0
    3. Exit
    4.  
    то этот исполняемый файл без лишних проблем
    откроется под - DEBUG
    то есть как и положено покажется месаджбокс

    но если сделать другой исполняемый файл
    а именно месаджбокс запихнуть в другую нить процесса
    утрированно но синтаксис - masm32
    Код (ASM):
    1.  
    2. CreateThread PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    3. MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    4. ExitProcess PROTO :DWORD
    5. Sleep PROTO :DWORD
    6. FunThread PROTO
    7. ;---------------------------------------------------------------------
    8. .data
    9. pText db 'Test',0
    10. .code
    11. ;---------------------------------------------------------------------
    12. invoke CreateThread,0,0,FunThread,0,0,0
    13. invoke Sleep,3000
    14. invoke ExitProcess,0
    15. ;---------------------------------------------------------------------
    16. FunThread proc
    17. invoke MessageBoxA,0,addr pText,addr pText,0
    18. ret
    19. FunThread endp
    20.  
    получившейся исполняемый файл спокойно работает при обычном запуске
    на три секунды показывается месаджбокс и программа закрывается
    но вот только этот исполняемый файл не хочет работать под - DEBUG
    точнее в диспетчере задач открыт процесс исполняемого файла - tst.exe
    но сам месаджбокс почему то не показывается
    понятно что это из за того что месаджбокс находится в другой нитке
    вопрос в том как это обойти
    Кто в теме не подскажите
     
  2. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    192
    Сейчас всё работает
    Код (ASM):
    1.  
    2. ;--------------------------------------------------------------------
    3. .686
    4. .model flat, stdcall
    5. option casemap :none
    6. ;--------------------------------------------------------------------
    7. include \masm32\include\user32.inc
    8. include \masm32\include\kernel32.inc
    9. ;--------------------------------------------------------------------
    10. includelib \masm32\lib\user32.lib
    11. includelib \masm32\lib\kernel32.lib
    12. ;--------------------------------------------------------------------
    13. include 0.asm
    14. ;--------------------------------------------------------------------
    15. DBG_CONTINUE EQU 00010002h
    16. DEBUG_PROCESS EQU 1h
    17. DEBUG_ONLY_THIS_PROCESS EQU 2h
    18. INFINITE EQU -1
    19. ;--------------------------------------------------------------------
    20. .data?
    21. sde DEBUG_EVENT <>
    22. startInfo STARTUPINFO <>
    23. processInfo PROCESS_INFORMATION <>
    24. dwContinueStatus dd ?
    25. bContinueDebugging dd ?
    26. asd dd ?
    27. .data
    28. Path db '#4.exe',0
    29. ;--------------------------------------------------------------------
    30. .code
    31. start:
    32. call main
    33. invoke ExitProcess,0
    34. ;--------------------------------------------------------------------
    35. ;--------------------------------------------------------------------
    36. ;--------------------------------------------------------------------
    37. main proc
    38. ;----------------------------------
    39. invoke RtlZeroMemory,addr startInfo,sizeof startInfo
    40. mov startInfo.cb,sizeof startInfo
    41. invoke RtlZeroMemory,addr processInfo,sizeof processInfo
    42. mov dwContinueStatus,DBG_CONTINUE
    43. mov bContinueDebugging,1
    44. ;----------------------------------
    45. invoke CreateProcessA,addr Path,0,0,0,0,DEBUG_ONLY_THIS_PROCESS,0,0,addr startInfo,addr processInfo
    46. ;----------------------------------
    47. .while bContinueDebugging
    48. invoke WaitForDebugEvent,addr sde,INFINITE
    49. invoke ContinueDebugEvent,sde.dwProcessId,sde.dwThreadId,dwContinueStatus
    50. mov dwContinueStatus,DBG_CONTINUE
    51. .endw
    52. ;----------------------------------
    53. ret
    54. main endp
    55. ;--------------------------------------------------------------------
    56. ;--------------------------------------------------------------------
    57. ;--------------------------------------------------------------------
    58. end start
    59.  
     
  3. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    192
    Моя ошибка была в том что в первом коде на сороковой строчке перепутал идентификатор структуры
    в первых двух параметрах функции - ContinueDebugEvent

    там было:
    Код (ASM):
    1.  
    2. fun ContinueDebugEvent,spi.dwProcessId,spi.dwThreadId,dwContinueStatus
    3.  
    а нужно:
    Код (ASM):
    1.  
    2. fun ContinueDebugEvent,sde.dwProcessId,sde.dwThreadId,dwContinueStatus
    3.  
    Остаётся только догадываться почему одни всё таки открывались а другие нет
    но сейчас открываются все

    Тему можно считать закрытой
     
    Последнее редактирование: 1 авг 2022
    M0rg0t нравится это.
  4. maestroant

    maestroant New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2019
    Сообщения:
    14
    Помню когда то тоже замечал аномалию похожую после отработки CreateProcess