Microsoft Visual C++ 2012로 작성된 파일을 분석 중이 었습니다. 문자열은 "Created by MIDL version 7.00.0555 at Sat Sep 20 23 : 13:16 2014 ", MIDL 컴파일러가 사용 되었기 때문에 이것이 있음을 이해합니다. 이해하는 버전 번호입니다. 제 질문은 : 날짜가 무엇을 의미합니까?C++ exe (MIDL을 사용하는 IDL에서 TLB 파일)의 타임 스탬프는 무엇입니까
답변
리버스 엔지니어로서 해체에서 찾을 수있는 "빌드 날짜"유형의 리터럴 문자열을 신뢰하지 않습니다.
원하는 것은 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;
}
'TimeDateStamp'조차 스푸핑/수정 될 수 있다고 생각하십니까? – HamZa
글쎄, 그렇지 않으면 정말로 그렇게하고 싶다면 아무 것도 수정할 수 있습니다. 그러나 적어도 TimeDateStamp를 사용하면 "활성"해킹/스푸핑/수정이됩니다. 일반적으로 컴파일러는 활성 해킹/스푸핑없이 수정 된 값을 생성 할 가능성이 가장 적습니다. 다른 라이브러리/소프트웨어에는 특별한 날짜/시간 등을 생성하는 데 사용할 수있는 설정 및/또는 기타 UI 값이있을 수 있습니다. 또한 실제 링커 이전 또는 이후 몇 시간 동안 디스 어셈블리의 문자열 리터럴이 생성 될 수 있습니다/컴파일러가 파일을 생성했습니다. 유효한 포인트를 올립니다. 그러나 TDS가 최선의 선택이라고 생각합니다. – Amadeus
나는 또한 "TimeDateStamp"를 사용하는 것이 다른 곳에서는 항상 같은 위치에 있다는 이점을 상속 받았다고 언급해야합니다. :) – Amadeus
파일을 만들었습니까? – SHR