2014-12-02 1 views

답변

1

리버스 엔지니어로서 해체에서 찾을 수있는 "빌드 날짜"유형의 리터럴 문자열을 신뢰하지 않습니다.

원하는 것은 TimeDateStamp from EXE header (PE Header)입니다. http://msdn.microsoft.com/en-us/library/ms809762.aspx으로 가면이 헤더에 어떤 정보가 있는지에 대한 좋은 안내서를 볼 수 있습니다. 에서 (I 만 TimeDateStamp를 얻을 필요가 있었다

DWORD TimeDateStamp 
The time that the linker (or compiler for an OBJ file) produced this file. This field holds the number of seconds since December 31st, 1969, at 4:00 P.M. 

몇 년 전, 그래서 내가 온라인 어딘가에서 본이 빠른 (아주 hackish) C++ 용도 변경 : 당신에게 관심을 표 2에서이 행은 최소한, 나는 그것을 빌려 왔다고 생각한다. 나는 처음부터 그것을 쓸 수 있었다. .. 너무 길다!) 물론이 함수는 실행 파일 안에서 호출되도록 고안되었다 ... 그러나, 당신은 아이디어 :

unsigned int GetExecutableTimestamp() 
{ 
    unsigned int BaseAddress = (unsigned int)GetModuleHandle(0); 
    unsigned int dwPos = *(unsigned int*)(BaseAddress+0x3C); 
    unsigned int Timestamp = *(unsigned int*)(BaseAddress+dwPos+0x8); 
    return Timestamp; 
} 
+0

'TimeDateStamp'조차 스푸핑/수정 될 수 있다고 생각하십니까? – HamZa

+1

글쎄, 그렇지 않으면 정말로 그렇게하고 싶다면 아무 것도 수정할 수 있습니다. 그러나 적어도 TimeDateStamp를 사용하면 "활성"해킹/스푸핑/수정이됩니다. 일반적으로 컴파일러는 활성 해킹/스푸핑없이 수정 된 값을 생성 할 가능성이 가장 적습니다. 다른 라이브러리/소프트웨어에는 특별한 날짜/시간 등을 생성하는 데 사용할 수있는 설정 및/또는 기타 UI 값이있을 수 있습니다. 또한 실제 링커 이전 또는 이후 몇 시간 동안 디스 어셈블리의 문자열 리터럴이 생성 될 수 있습니다/컴파일러가 파일을 생성했습니다. 유효한 포인트를 올립니다. 그러나 TDS가 최선의 선택이라고 생각합니다. – Amadeus

+1

나는 또한 "TimeDateStamp"를 사용하는 것이 다른 곳에서는 항상 같은 위치에 있다는 이점을 상속 받았다고 언급해야합니다. :) – Amadeus

0

.exe을 만든 날짜입니다.

+0

고마워요,하지만이 같은 시간 스탬프를 가지고 서로 다른 크기로 3 exe가, 그럼 어떻게 3 exe는 컴파일의 동일한 시간을 가질 수 있습니까? – rebel87

+0

프로젝트 맵인 경우 동시에 빌드되었을 수 있습니다. – deW1