суть такова - решил поизучать работу функций CreateProcess, VirtualAllocEx, WriteProcessMemory....думаю понятно что я там писать собрался,да с статьи на любимом форуме wasm.ru/article.php?article=apihook_3 Но и тут появились веселухи: после вызова GetThreadContext идет еррор "3Е6" - ERROR_NOACCESS. Делаю все как написано только на масме...в чем трабла?? подозреваю(после многих чтений мсдн) что нужно при создании процесса настроить права(ща на месте том стоит NULL) как и описано по ссылке. Жду ответов и надеюсь на результат..... П.С. код пока не выкладываю,т.к. все и так должно быть понятным,но если надо - только свисни и он тут
Код (Text): .CODE Exec Proc invoke MessageBox, NULL, addr ErrMes2, NULL, MB_OK invoke ExitProcess, 0 Exec endp START: mov eax, SIZE StInfo mov StInfo.cb, eax xor eax,eax mov ax, SW_SHOW mov StInfo.wShowWindow, ax mov eax, SIZE SecAttrib mov SecAttrib.nLength, eax mov eax, offset SecDescriptor mov SecAttrib.lpSecurityDescriptor, eax mov eax, 0 ;????? mov SecAttrib.bInheritHandle, eax ;invoke Get invoke CreateProcess, NULL, addr procname, NULL, NULL, 0, CREATE_SUSPENDED, NULL, NULL, offset StInfo, offset PrInfo .IF eax == 0 invoke MessageBox, NULL, addr ErrMes, NULL, MB_OK jmp Exit .ENDIF invoke GetModuleHandle, NULL .IF eax == 0 invoke MessageBox, NULL, addr ErrMes1, NULL, MB_OK jmp Exit .ELSE mov hcode, eax .ENDIF mov esi, hcode assume esi: ptr IMAGE_DOS_HEADER add esi, [esi].e_lfanew assume esi: ptr IMAGE_NT_HEADERS mov eax, [esi].OptionalHeader.SizeOfImage assume esi: nothing push eax invoke VirtualAllocEx, PrInfo.hProcess, hcode, eax, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE pop ebx invoke WriteProcessMemory, PrInfo.hProcess, eax, hcode, ebx, addr BytesWritten mov eax, CONTEXT_FULL mov mContext.ContextFlags, eax invoke GetThreadContext, PrInfo.hThread, offset mContext mov eax, offset Exec mov mContext.regEip, eax invoke SetThreadContext, PrInfo.hThread, offset mContext invoke ResumeThread, PrInfo.hThread ну вот,и тогда очаровательная олля говорит что error после GetThreadContext....теперь как?)
Непонятно, может туда ноль поставить ? Ну или на крайний случай Tcb привилегии получить. Тока для родителя это совсем не нужно.
На место прав доступа, где у вас там в коде не видно.) Это ерунда, собственно по захвату кода какие вопросы ?
хмм,вроде все видно) а по захвату вопрос такой: GetThreadContext - не могу получить контекст ранее запущеного процесса,возвращает - нету прав доступа....
к ста - темя про новичка была ....а как его заполнить по правильному,я вообще пока на мсдн копурсался то нарыл что то типа SECURITY_DESCRIPTOR,но так и не понял ничего - по этому поводу какой то круговорот на то мсдн получился,или то у меня уже круговороты в голове)) Просьба - пару слов о токенах самых конкретно описывающих что и к чему...сори что так,но эти двухметровые статьи мне уже просто на голову давят....
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. получить атрибуты может я много прошу, но еще много чему надо научится....
Код (Text): $ProcessName CHAR "d:\windows\notepad.exe",0 Local Context:CONTEXT Local ProcessInfo32:PROCESS_INFORMATION Local StartupInfo32:STARTUPINFO invoke GetStartupInfo, addr StartupInfo32 invoke CreateProcess, addr $ProcessName, NULL, 0, 0, 0, CREATE_SUSPENDED, 0, 0, addr StartupInfo32, addr ProcessInfo32 ...
Спасибо! Есть чему у тебя поучится(предложил на "ты" перейти,но по желанию можем и на "вы" обращатся) ....сделал все буковка в буковку(не считая аллокмем) - ничего не изменилось...тот же ошибка( "нет доступа",что за...
да я вообще каспера вырубил,сабака кричит на меня изза CreateProcess (фильтрация активности) прикрепляю файлик...да и спасибо тебе огромное - приятно что есть люди хорошие, готовы помочь. Несмотря на то что я и в винде не бум(но это временно,надеюсь))....и прыгать не научусь никак стреляя под себя .)
Теперь всё ясно. Высокоуровневые апи имеют плохую реализацию, следует отказаться по возможности от них используя только нэйтив. Функция GetThreadContext() сводится к сервису NtGetContextThread. Послений возвращает в отличие от той апи конкретную и достаточную информацию об ошибке - видим 0x80000002(STATUS_DATATYPE_MISALIGNMENT). Не выровнен стек на 4. Эта частая ошибка и её нельзя обнаружить использую только винапи. Функция которая ядерные коды ошибок в пользовательские переводит недостаточно хорошо реализована. Причина - имя процесса. Следует определить его в самом конце списка переменных. [Офтоп: у тебя брат случаем не AntiB ?]