2010-11-30 3 views
2

저는 다중 플랫폼 C++ 퍼징 응용 프로그램을 개발 중입니다. 앱이 하위 프로세스를 생성하고 예기치 않게 중지되었는지 확인합니다. 난 이미 리눅스 에서이 일을 관리했지만, 윈도우 예외 처리 메커니즘은 나를 위해 열심히하고있다.Windows에서 하위 프로세스 예외 잡기

내 코드는 지금 다음을 수행합니다. - CreateProcess를 호출하여 프로세스를 생성합니다. - WaitForSingleObject가 종료 될 때까지 기다리는 중입니다. - 그런 다음 GetExitCodeProcess를 호출하고 종료 코드가 예외에 해당하는지 확인하십시오.

모든 것이 정상적으로 작동하므로 테스트 응용 프로그램에서 dereferencing을 사용하여 테스트했습니다. 정상적으로 예외를 잡을 수 있습니다. 그러나, 내가 이것을 테스트 할 때마다 Windows 오류 메시지 상자에서 오류 보고서를 보내거나 보내지 말라고 알려줍니다. fuzzer는 자동 테스트 응용 프로그램으로 간주되기 때문에이 알림을 사용하지 않도록 설정해야합니다. 따라서 예외가 잡히더라도 fuzzer는 테스트를 계속할 수 있습니다.

SEH 처리기를 설치하려고했지만 이미 운이 없었습니다. (분명히 이러한 처리기는 하위 프로세스에 상속되지 않습니다.) vectored 예외 처리를 사용하는 것에 대해 뭔가 읽었지만 벡터 핸들러가 상속되지 않는다고 생각합니다.

누구든지이 문제를 해결해 줄 수 있습니까? 나는 무엇을 검색해야할지 모르겠다. 나는 이미 많이 봤는데 애니킹을 찾지 못했다.

감사합니다.

답변

2

Debug API이 하나의 옵션입니다. Here은 MSDN의 출발점입니다.

+0

답변 해 주셔서 감사합니다. 일부 디버깅 API를 사용하려고 생각했지만 크래킹 및/또는 revering을 방지하기 위해 일부 디버깅 방지 메커니즘을 사용하는 일부 응용 프로그램이 fuzzer에서 디버깅 중임을 감지하면 동작을 수정할 수 있다고 생각했습니다. 다른 옵션을 찾을 수 없다면이 디버깅 메커니즘을 사용해야 할 것입니다. – mfontanini

+0

리버스 엔지니어가 자신의 코드를 증명하려고하는 사람을 쏴 버릴 수있는 이유가 있습니다. –

+0

그것은 일했다! 감사합니다. D – mfontanini

1

는 자식 프로세스에 다음 코드를 삽입 해보십시오 : MSDN에서 SetErrorMode

SetErrorMode(SEM_NOGPFAULTERRORBOX); 

조회에게 세부 사항을. 여기 주입 기술에 대한

읽기 : frast의 대답에 따라 Injective Code inside Import Table

2

, 당신은 적절한 SetErrorMode와 프로세스의 아이과 프로세스를 생성 할 수 있습니다. 이 (상속 가능한) 설정에 따라 대화 상자가 튀어 나오는 오류가 결정됩니다. 자동화 된 테스트 응용 프로그램에서 똑같은 것을 얻으려고 할 때 질문을 찾았습니다.

는 오류 대화 상자를 피하기 과잉 아마

SetErrorMode(
    SEM_FAILCRITICALERRORS 
    | SEM_NOALIGNMENTFAULTEXCEPT 
    | SEM_NOGPFAULTERRORBOX 
    | SEM_NOOPENFILEERRORBOX); 

사출을 사용하려면 - 더 래퍼 프로세스를 사용 할 수 있습니다.

+0

이것을 처리 할 수있는 래퍼 프로세스는 무엇입니까? – Robin

+0

"래퍼"는 다른 프로세스/함수/메소드를 호출하고 나중에 정리하는 것이 목표 인 프로세스/함수/메소드의 일반적인 이름입니다. Windows에서 https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx – tucuxi

+0

을 사용하여 하위 프로세스를 만들 수 있습니다.자식 응용 프로그램이 SetErrorMode를 수행하면 우리는 여전히 주입이 필요합니다 – Robin