2013-07-17 1 views
4

바이너리 'helper.dll'을 사용하는 바이너리 'api.dll'이 있습니다. 디지털 서명을 사용하여 각 DLL의 진위 여부를 확인하고 싶지만 올바른 방법은 확실하지 않습니다. 컨텍스트의 경우 DLL은 Visual Studio 2010을 사용하여 빌드되며 종속성 탭을 통해 연결됩니다. 연결은 스텁 helper.lib를 통해 발생하므로 api.dll 코드에서 LoadLibrary을 명시 적으로 호출하지 않습니다. 이 문제의 한 부분은 정확히 을 모르는데, helper.dll이로드 된 곳입니다.로드 된 DLL에 유효한 인증서가 있는지 확인하는 가장 안전한 방법은 무엇입니까?

  1. 이 정보가 열거 모듈을 통해 사용할 수있는 경우
  2. 'helper.dll'(라는 이름의 한 (들)을 찾기로드 된 모든 모듈을 현재 프로세스
  3. 열거로 처리하기 : 내 초기 생각하다 API)를, 그리고 검증은 서명이 뭔가 사용하고 like this

이 이것에 대해 갈 수있는 가장 좋은 방법이 있나요?

둘째, 디지털 서명/인증서에 대한 다소 흐린 이해를 바탕으로 유효성 검사에 인증 기관에 대한 연결이 필요하거나 인증서가 이미 컴퓨터에 신뢰할 수있는 것으로 나열되어야합니다. 외부 연결이 눈살을 찌푸 리거나 명시 적으로 허용되지 않는 경우이 방법은 일반적으로 어떻게 처리됩니까? 응용 프로그램과 함께 '설치'되어 있을까요? 또는 그러한 덜 위험한 검증 방법이 필요할 것인가?

답변

6

DLL을로드 한 후에 전에을 확인하려고합니다. 로드가 완료되면 이미 프로세스에서 임의의 코드를 실행할 시간을 가졌으므로 (DllMain 참조) 잃어 버렸습니다.

delay-load DLL이 필요할 수 있습니다. 이렇게하면 모든 기능에 대해 수동으로 LoadLibrary/GetProcAddress을 수행 할 필요가 없지만 DLL이로드되기 전에 일부 코드를 실행할 기회가 생기고 확인이 실패하면 구제 될 수 있습니다.

아니요, WinVerifyTrust에는 인터넷에 연결되어 있지 않아도됩니다. 모든 Windows 시스템에는 신뢰할 수있는 루트 인증서 목록이 있습니다. 검증은 바이너리에 첨부 된 서명과 인증서를 추출하고 서명이 유효한지 (파일 내용이 실제로 서명 된 내용과 일치하는지) 확인하고 인증서가 신뢰할 수있는 루트 중 하나로 연결되는 유효한 체인을 형성하는지 확인합니다. 그것이 알려져있는 CA 중 하나에서 인증서를 구입 한 사람에 의해 서명 단지, 그리고 이후 변조되지 않았 - WinVerifyTrust 파일이 당신의 회사에 의해 서명되어 있는지 확인하지 않습니다

참고. 파일이 실제로 파일인지 확인하려면 추가 단계를 수행해야합니다.

관련 문제