2011-08-27 25 views
1

내가 수행하려고 시도하는 것을 설명하겠습니다. 내장 된 후 Windows 조작 파일이 변경된 경우 내부 Windows 실행 파일을 알고 싶습니다. 이를 위해 내부에서 자체 파일에 대한 CRC 값을 계산하고 미리 정의 된 값과 비교하기로 결정했습니다. 그러나 내가 마주 치게되는 것은 일단 실행 파일이 만들어지면 CRC는 그대로 유지되지만 소스 코드에 아무런 변경을 가하지 않고 다시 빌드 할 때까지만 남아 있다는 것입니다. CRC가 바뀌 었습니다. 여기에 어떤 마법이 있습니까? 컴파일러는 임의의 바이트를 exe 파일에 추가합니까?Windows PE 실행 파일 CRC 계산 문제

추신. Microsoft Visual Studio C++ 2008을 사용하고 Windows 7 Ultimate에서 테스트를 실행합니다.

+2

컴파일러/링커에 의해 자동으로 임베드 된 타임 스탬프 또는 버전 번호 일 수 있습니다. – Yahia

+0

흠. 좋은 지적. 어떻게 우회해야합니까? 그들은 미리 정의 된 오프셋에 있습니까? – ahmd0

+0

네이티브 EXE/DLL 파일을 생성하고 있습니까? – Yahia

답변

2
그것은 자동으로 컴파일러/링커에 의해 포함 된 일부 타임 스탬프 또는 버전 번호가 될 수

...

나는 (이 네이티브 EXE/DLL을 사실에 근거) 뭔가 다른 제안이 차지하려면

그냥 생성 된 파일을 후 처리 -가 생성되기 전에

윈도우가 EXE/DLL을로드 정말 "좋은"기능이 있습니다 ... 결과 파일의 CRC32에 대해 아무것도 생각하지 않습니다 그냥 아무것도 무시 거기에 속하지 않는 파일의 끝에.

이 기능을 활용하면 바이트 블록 (예 : 256 바이트)을 파일에 추가 할 수 있습니다. 이 블록에는 원하는 파일 (파일 해시, 파일 길이 등)을 포함 할 수 있으며 암호화 할 수도 있습니다 ... 필요한 정보를 계산할 때 (예 : CRC ...) 파일 블록 ...

다른 해시를 포함하고 임의로 선택하면 ... 블록에 임의의 바이트를 뿌릴 수도 있습니다 ... 또한 체크를 넣습니다 그 블록이 하나만 존재하는지 확인합니다 ... 그래서 그러한 블록이 없거나, 하나 이상의 블록 또는 수표와 그 블록에서 저장된 정보가 일치하지 않으면 원하는 것을 중단 할 수 있습니다.

+0

예, 이것이 제가하는 일입니다.나는 몇 가지 수표를 찍었고 당신이 타임 스탬프에 관해 뭔가있을 것 같았다. 누구든지 정확한 위치를 알 수 있습니까? 이렇게하면 CRC 계산에서 해당 위치를 건너 뛸 수 있습니다. – ahmd0

+0

코멘트 중 하나에 제공된 링크를 참조하십시오. - http://msdn.microsoft.com/en-us/library/ms680313%28v=VS.85%29.aspx 그러나 건너 뛸 때 "해결"하지 않는 것이 좋습니다. 아무것도 ... 내 대답에 설명 된 방법을 건너 뛰지 않고 일하고, 더 나은 codesigning (위의 jgv999 대답을 참조하십시오) – Yahia

+0

굉장. 고맙습니다! – ahmd0

1

디지털 서명을 사용해 보셨습니까? 서명은 컴파일 후 적용 할 수 있으며 EXE가 편집되지 않았는지 확인할 수 있습니다. 이것은 하나의 완벽한 사례입니다.

"SignTool.EXE"을 사용하여 EXE에 서명 할 수 있습니다.
Verify whether an executable is signed or not (signtool used to sign that exe)

(당신이 완전히 검증하려는 경우) 나는 당신이 서명 인증서 강령을 구입해야합니다 생각 :

당신이에서 발견 된 코드를 사용할 수 있는지 확인합니다. 나는 GoDaddy가 가장 비싼 것을 제공한다고 생각한다 (지금 당장). 또한 오픈 소스 프로젝트가 있으면 무료 서명 Cert를 얻을 수 있다고 들었습니다. 일부 당국에서.

+0

감사합니다. 실행 파일에 서명하는 것을 고려했지만 아직 구입할 시점이 아닙니다. 개발자가 서명 된 실행 파일 수에 대해 1 년에 99 달러를 지불 할 때 애플이 AppStore로하는 일을 생각해 내기 전까지는 "막 다른 골목"기술에 투자하지 않을 것이다. – ahmd0

+0

내가 CRC를 계산 한 이유는 실제로 셰어웨어 제품의 "Hacked"또는 "patched"가 얼마나 많이 있는지를 보는 것입니다. 그것은 단지 내부 통계 일뿐입니다 ... – ahmd0

+0

당신이 어떻게 알게 될지 궁금합니다. 사람들이 EXE를 해킹하려고한다고 가정한다면, 그들이 집에있는 것을 허용하지 않을 것 같습니다. – jgv999