설치된 소프트웨어 중 여러 곳에있는 DLL 중 SafeSEH로 컴파일 된 DLL을 확인하고 싶습니다. 저에게 그 정보를 줄 수있는 도구가 있습니까? 그렇지 않으면 그 검증을 수행하는 코드를 작성하는 최선의 해결책은 무엇입니까?SafeSEH로 컴파일되지 않은 Windows DLL 찾기
미리 감사드립니다.
설치된 소프트웨어 중 여러 곳에있는 DLL 중 SafeSEH로 컴파일 된 DLL을 확인하고 싶습니다. 저에게 그 정보를 줄 수있는 도구가 있습니까? 그렇지 않으면 그 검증을 수행하는 코드를 작성하는 최선의 해결책은 무엇입니까?SafeSEH로 컴파일되지 않은 Windows DLL 찾기
미리 감사드립니다.
이 도구를 사용하여 시작할 수 있습니다 (SafeSEH Dump). 출력을 검사하십시오. 모든 DLL 목록에 대해 일괄 적으로 실행하는 것이 너무 어렵지 않아야합니다. 다운로드하려면 로그인을 만들어야합니다. SafeSEH Dump를 참조하는 a blog post도 있지만 해당 페이지의 다운로드 링크가 작동하지 않는 것으로 보입니다.
또한 dumpbin.exe/loadconfig를 사용하여 안전 예외 핸들러 테이블이 있는지 확인할 수 있습니다. 더 많은 정보는 여기에있다 : http://www.jwsecure.com/dan/2007/07/06/the-safe-exception-handler-table/
나는 이것이 죽은 사람에게서 준설이지만, 거기에 는 프로그래밍 방식의 해결책이라는 고대의 질문이다.
먼저 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으로 이동하십시오. 그것을 분석 한 다음 SEHandlerTable
과 SEHandlerCount
값을 읽으십시오. 핸들러 테이블 포인터가 널 (즉, 0)이면 SafeSEH가 사용 가능하지 않습니다. 핸들러 수가 0이면 SafeSEH가 켜져 있어도 핸들러가 등록되지 않습니다.
프로그래밍 방식으로 수행해야하는 경우 PE 형식을 구문 분석하고 디렉토리 항목을 살펴보고 예외 디렉토리의 RVA가 0인지 확인하십시오. 존재한다면 SafeSEH가 없습니다. – Polynomial