2009-10-23 1 views
0

설치된 소프트웨어 중 여러 곳에있는 DLL 중 SafeSEH로 컴파일 된 DLL을 확인하고 싶습니다. 저에게 그 정보를 줄 수있는 도구가 있습니까? 그렇지 않으면 그 검증을 수행하는 코드를 작성하는 최선의 해결책은 무엇입니까?SafeSEH로 컴파일되지 않은 Windows DLL 찾기

미리 감사드립니다.

+0

프로그래밍 방식으로 수행해야하는 경우 PE 형식을 구문 분석하고 디렉토리 항목을 살펴보고 예외 디렉토리의 RVA가 0인지 확인하십시오. 존재한다면 SafeSEH가 없습니다. – Polynomial

답변

1

이 도구를 사용하여 시작할 수 있습니다 (SafeSEH Dump). 출력을 검사하십시오. 모든 DLL 목록에 대해 일괄 적으로 실행하는 것이 너무 어렵지 않아야합니다. 다운로드하려면 로그인을 만들어야합니다. SafeSEH Dump를 참조하는 a blog post도 있지만 해당 페이지의 다운로드 링크가 작동하지 않는 것으로 보입니다.

0

나는 이것이 죽은 사람에게서 준설이지만, 거기에 는 프로그래밍 방식의 해결책이라는 고대의 질문이다.

먼저 PE 형식을 구문 분석하십시오. 이것에 대한 모든 종류의 해결책이 있으므로, 나는 그것에 들어가지 않을 것입니다. 그것이 내가 여기서 다룰 수있는 것보다 더 큰 주제라고 이야기하기에 충분합니다. 스스로 롤업하기로 결정했다면 32 비트와 64 비트 실행 파일의 차이점에주의하십시오.

PE 파일을 구문 분석 한 후에는 DOS 헤더, NT 서명, 파일 헤더 (a.k.a.COFF 헤더), 선택 사항 헤더를 건너 뛰고 마지막으로 데이터 디렉토리로 이동하십시오. 각 디렉토리에는 RVA와 크기가 있습니다. 구성 디렉토리 (목록의 10 번째 항목)의 RVA 및 크기를 찾습니다.

여기에서 탐지를 시작할 수 있습니다. RVA 또는 크기가 0이면 SafeSEH가 활성화되지 않습니다. 크기가 0x40이 아닌 경우 MS12-001 SafeSEH bypass bug에 취약한 (아마) 컴파일러로 빌드되었습니다. 그래도 크기 값을 신뢰하지 마십시오. 은 Windows XP의 몇 가지 단점으로 인해까지의 데이터 크기와 반드시 일치하지 않습니다. 자세한 내용은 이전 링크를 참조하십시오.

RVA 및 크기가 적절한 것으로 보이는 경우 RVA를 따라 Load Configuration structure으로 이동하십시오. 그것을 분석 한 다음 SEHandlerTableSEHandlerCount 값을 읽으십시오. 핸들러 테이블 포인터가 널 (즉, 0)이면 SafeSEH가 사용 가능하지 않습니다. 핸들러 수가 0이면 SafeSEH가 켜져 있어도 핸들러가 등록되지 않습니다.