2014-11-10 6 views
0

C를 사용하여 간단한 응용 프로그램을 개발 중이며 응용 프로그램이 변조되었을 때 감지 할 수있는 방법이 있는지 알고 싶습니다. 내 지식을 기반으로 해시는 데이터의 무결성을 보장하는 한 가지 방법이지만 컴파일 할 때 코드의 내부에서 프로세스의 해시를 하드 코딩하는 방법을 모르거나 그 방법을 알지 못합니다. 해야 할 것. 도움/힌트를 보내 주시면 감사하겠습니다.하위 프로세스에서 변조 감지

+1

해쉬 용 임의의 해쉬 알고리즘을 사용하여 var를 정의해야합니다. 해시 바이너리 AFTER 컴파일, 그리고 그 해시를 예약 된 공간에 삽입. 사실 해시를 추가하면 전체 파일의 해시도 변경되기 때문에 해시 계산에서 예약 공간을 제외해야한다는 것을 의미합니다. –

+0

더하기, 바이너리의 디스크상의 표현은 메모리에로드되는 것과 같지 않을 것입니다. 바이너리의 코드 블록 만 해시하고 링크/컴파일러 정보와 같은 메타 데이터는 생략해야합니다. –

+0

코드 실행 위치와 방어 대상에 대해 좀 더 구체적으로 설명해야합니다. –

답변

1

앱이 디스크에있는 동안 정적 수정에서 해시를 보호해야합니다. 예를 들어 변조 (tampering) 감지 코드의 어딘가에 숨겨진 개인 키를 사용하여 서명 할 수 있습니다. 나는 그것이 당신의 비밀이되어야하기 때문에 어떻게 숨길 수 있는지 말할 수 없습니다.

자기 확인 실행 파일을 만들려면 소스에 해시를 할당 할 수 있지만 컴파일러에게 명명 된 PE/ELF 섹션에 저장하도록 지시하십시오. 바이너리에 서명 할 때 이름 붙여진 섹션을 해시 계산에서 제외하고 내부에서 계산 된 해시를 저장하십시오.

const unsigned char hash[32] __attribute__ ((section ("tdhash"))) = {0}; 

참고 :

당신이 GCC 컴파일러에 대한

#pragma section("tdhash", read) 
__declspec(allocate("tdhash")) const unsigned char hash[32] = {0}; 

사용할 수있는 마이크로 소프트 컴파일러라는 이름의 섹션으로 해시를 넣으려면 PE를 변경 한 후에는 헤더에 체크섬을 업데이트하는 내 희망도 제외 해시 계산에서 체크섬 필드. 그 중 하나에 대한 샘플은 "무결성 검사"로드 실패 "에 있습니다. Microsoft KB 문서 : https://technet.microsoft.com/ru-ru/library/ee829684

+0

인텔 SW 제품 중 하나가 유사한 기능을 제공합니다. 그곳에서 임의 변경 방지를 찾으십시오. – Andrey