2012-04-02 4 views
0

Google 파트너 중 하나가 참으로 적합하다고 생각한 적이 있는데 우리 앱에서 크래시가 발생했습니다 끔찍한 'CodeMeter'를 암호화하려면 그들의 DLL. CodeMeter 라이센싱은 CodeMeter 암호화 된 DLL을 포함하는 응용 프로그램을 디버그하지 못하게하고 심지어 처리되지 않은 예외 필터에서 호출 된 MiniDumpWriteDump가 실패하는 것처럼 보입니다 (이 기술은이 DLL이로드되지 않은 채로 작동 함). 충돌은 암호화 된 DLL이 프로세스에로드 될 때만 발생합니다.안티 디버거 대책을 포함하는 프로세스에서 크래시를 디버깅하는 방법

나는 이것을 디버깅하려고 시도하고 충돌하는 암호화 된 DLL인지 여부를 확인하려고합니다. 그렇다면 어떻게 해결할 수있는 적절한 진단 정보를 제공 할 수 있습니까?

제안 사항 - 아마도 처리되지 않은 예외 필터에서 호출 할 수있는 수동 스택 및 모듈 워킹 코드 일 수 있습니까?

CodeMeter에는 파트너가 아직 암호화되어 있고 라이센스가 있지만 디버깅을 너무 적극적으로 방해하지 않는 빌드를 생성 할 수있는 빌드 설정이 있습니까?

의심의 여지가있을 경우를 대비하여 라이센스를 해킹하려는 것이 아니라 단지이 충돌을 진단하는 것입니다.

+0

CodeMeter는 다른 DbgHelp.dll 기능도 비활성화합니다. SymInitialize는이 CodeMeter 암호화 된 DLL이있는 경우에도 실패합니다. 이 코드는 __poisonous__ CodeMeter 소프트웨어가 비밀리에 방해 행위를하도록 선택한 핵심 운영체제의 다른 부분이 무엇인지 궁금합니다. – persiflage

+0

CaptureStackBacktrace를 사용하여 스택을 걸을 수있는 몇 가지 샘플 코드를 발견했습니다. 이것은 예외 필터의 호출 스택만을 표시하며 예외 자체는 표시하지 않습니다. – persiflage

+0

이제 __try __except를 사용하여 암호화 된 DLL에서 예외 세부 정보를 포착하고 로그에 기록했습니다. CaptureStackBacktrace를 사용해도 여전히 SEH 예외 필터에서 유효한 스택 추적을 가져올 수 없습니다. – persiflage

답변

0

예외 필터에 전달 된 CONTEXT 레코드를 전달하여 SEH 또는 처리되지 않은 예외 필터에서 호출 할 수있는 잘 작동하는 stack walking code을 사용했습니다.

처음 몇 개의 예외 매개 변수에있는 스택의 주소와 잠재적 주소는 모듈 핸들을 포함하여 SymFromAddr in DbgHelp을 사용하여 해석 할 수 있습니다. 스택 파일에 관련된 DLL을 해석하기 위해 모듈 파일 이름과 모듈 핸들을 log에 추가하십시오.

이 특정 충돌은 Visual C++ 예외입니다. 예외 유형은 SymFromAddr을 사용하여 예외 매개 변수 중 하나의 주소를 조회하여 나타납니다.

레이몬드 첸의 블로그에 예외 매개 변수에서 finding the type of a Visual C++ exception에 대한 코드가 있지만 어쩌면 내 자신의 오류로 인해 작동하지 않을 수 있습니다.