помогите начинающему...

Тема в разделе "WASM.ASSEMBLER", создана пользователем sometime, 15 май 2009.

  1. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    суть такова - решил поизучать работу функций CreateProcess, VirtualAllocEx, WriteProcessMemory....думаю понятно что я там писать собрался,да с статьи на любимом форуме wasm.ru/article.php?article=apihook_3
    Но и тут появились веселухи:
    после вызова GetThreadContext идет еррор "3Е6" - ERROR_NOACCESS. Делаю все как написано только на масме...в чем трабла?? подозреваю(после многих чтений мсдн) что нужно при создании процесса настроить права(ща на месте том стоит NULL) как и описано по ссылке.
    Жду ответов и надеюсь на результат.....

    П.С. код пока не выкладываю,т.к. все и так должно быть понятным,но если надо - только свисни и он тут:)
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    1. Подробное описание задачи.
    2. Подробное описание решения.
    Гадалки в отпуске.)
     
  3. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    Код (Text):
    1. .CODE
    2.  
    3. Exec Proc
    4.  
    5. invoke MessageBox, NULL, addr ErrMes2, NULL, MB_OK
    6. invoke ExitProcess, 0
    7.  
    8. Exec endp
    9.  
    10. START:
    11.  
    12. mov eax, SIZE StInfo
    13. mov StInfo.cb, eax
    14.  
    15. xor eax,eax
    16. mov ax, SW_SHOW
    17. mov StInfo.wShowWindow, ax
    18.  
    19. mov eax, SIZE SecAttrib
    20. mov SecAttrib.nLength, eax
    21. mov eax, offset SecDescriptor
    22. mov SecAttrib.lpSecurityDescriptor, eax
    23. mov eax, 0                                                  ;?????
    24. mov SecAttrib.bInheritHandle, eax
    25.  
    26. ;invoke Get
    27.  
    28. invoke CreateProcess, NULL, addr procname, NULL, NULL, 0, CREATE_SUSPENDED, NULL, NULL, offset StInfo, offset PrInfo
    29.  
    30. .IF eax == 0
    31.     invoke MessageBox, NULL, addr ErrMes, NULL, MB_OK
    32.     jmp Exit
    33. .ENDIF
    34.  
    35. invoke GetModuleHandle, NULL
    36. .IF eax == 0
    37.     invoke MessageBox, NULL, addr ErrMes1, NULL, MB_OK
    38.     jmp Exit
    39.    
    40. .ELSE
    41.     mov hcode, eax
    42. .ENDIF
    43.  
    44. mov esi, hcode
    45. assume esi: ptr IMAGE_DOS_HEADER
    46.     add esi, [esi].e_lfanew
    47. assume esi: ptr IMAGE_NT_HEADERS
    48.     mov eax, [esi].OptionalHeader.SizeOfImage
    49. assume esi: nothing
    50. push eax
    51.  
    52. invoke VirtualAllocEx, PrInfo.hProcess, hcode, eax, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
    53. pop ebx
    54. invoke WriteProcessMemory, PrInfo.hProcess, eax, hcode, ebx, addr BytesWritten
    55.  
    56. mov eax, CONTEXT_FULL
    57. mov mContext.ContextFlags, eax
    58. invoke GetThreadContext, PrInfo.hThread, offset mContext
    59. mov eax, offset Exec
    60. mov mContext.regEip, eax
    61. invoke SetThreadContext, PrInfo.hThread, offset mContext
    62.  
    63. invoke ResumeThread, PrInfo.hThread
    ну вот,и тогда очаровательная олля говорит что error после GetThreadContext....теперь как?)
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Непонятно, может туда ноль поставить ?
    Ну или на крайний случай Tcb привилегии получить. Тока для родителя это совсем не нужно.
     
  5. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    куда?? мож поподробней.....
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    На место прав доступа, где у вас там в коде не видно.)
    Это ерунда, собственно по захвату кода какие вопросы ?
     
  7. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    хмм,вроде все видно)
    а по захвату вопрос такой:
    GetThreadContext - не могу получить контекст ранее запущеного процесса,возвращает - нету прав доступа....
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Копируйте токен, либо заполняйте как положено.
     
  9. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    к ста - темя про новичка была:) ....а как его заполнить по правильному,я вообще пока на мсдн копурсался то нарыл что то типа SECURITY_DESCRIPTOR,но так и не понял ничего - по этому поводу какой то круговорот на то мсдн получился,или то у меня уже круговороты в голове)) Просьба - пару слов о токенах самых конкретно описывающих что и к чему...сори что так,но эти двухметровые статьи мне уже просто на голову давят....
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В этом случае достаточно вместо SECURITY_DESCRIPTOR ноль поставить.
     
  11. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    CreateProcess, NULL, addr procname, NULL, offset SecAttrib, 0, CREATE_SUSPENDED, NULL, NULL, offset StInfo, offset PrInfo

    а в структуре
    SecAttrib SECURITY_ATTRIBUTES <>

    SecAttrib.lpSecurityDescriptor установил в NULL
    ....скомпалил и все тоже на
    call <jmp.&kernel32.GetThreadContext>
    - ERROR_NOACCESS (000003E6)

    ....видать я плохо понимаю как атрибуты назначать - ХЕЛП) ,если мона две строчки
    1. создать процес
    2. получить атрибуты
    может я много прошу, но еще много чему надо научится....
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1. $ProcessName    CHAR "d:\windows\notepad.exe",0
    2.  
    3. Local Context:CONTEXT
    4. Local ProcessInfo32:PROCESS_INFORMATION
    5. Local StartupInfo32:STARTUPINFO
    6.     invoke GetStartupInfo, addr StartupInfo32
    7.     invoke CreateProcess, addr $ProcessName, NULL, 0, 0, 0, CREATE_SUSPENDED, 0, 0, addr StartupInfo32, addr ProcessInfo32
    8. ...
     
  13. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    Спасибо! Есть чему у тебя поучится(предложил на "ты" перейти,но по желанию можем и на "вы" обращатся)

    ....сделал все буковка в буковку(не считая аллокмем) - ничего не изменилось...тот же ошибка(
    "нет доступа",что за...
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Залей модуль потестить, может следует проактивку вырубить..
     
  15. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    да я вообще каспера вырубил,сабака кричит на меня изза CreateProcess (фильтрация активности)

    прикрепляю файлик...да и спасибо тебе огромное - приятно что есть люди хорошие, готовы помочь. Несмотря на то что я и в винде не бум(но это временно,надеюсь))....и прыгать не научусь никак стреляя под себя .)
     
  16. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    глюк
     
  17. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    панятна...."нас**л")
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Оо я не совсем понял, какой ник у тебя второй ??
    На обменник залей файл.
     
  19. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Теперь всё ясно. Высокоуровневые апи имеют плохую реализацию, следует отказаться по возможности от них используя только нэйтив. Функция GetThreadContext() сводится к сервису NtGetContextThread. Послений возвращает в отличие от той апи конкретную и достаточную информацию об ошибке - видим 0x80000002(STATUS_DATATYPE_MISALIGNMENT). Не выровнен стек на 4. Эта частая ошибка и её нельзя обнаружить использую только винапи. Функция которая ядерные коды ошибок в пользовательские переводит недостаточно хорошо реализована.
    Причина - имя процесса. Следует определить его в самом конце списка переменных.
    [Офтоп: у тебя брат случаем не AntiB ?]