CharSyam
Tag | Location | Media | Guestbook | Admin

2009/08/23 13:23 2009/08/23 13:23
PE 파일 안에서 인증 정보 찾아내기

빌드 자동화를 하다보면, Validation 검증이라는 부분에서 문제가 생길 수 가 있다.

예를 들어, 프로그램에 VeriSign 의 코드 인증을 한다고 할 때, 결과물을 보고 인증이 성공했는지

등에 대해서 자동으로 판단하게 해야 한다.(사실은 어렵지 않다.)

결론부터 말하자면, PE 파일 구조 안에 그 해답이 있다.

IMAGE_DOS_HEADER
IMAGE_FILE_HEADER
IMAGE_OPTIONAL_HEADER (32/64)

위와 같은 형태로 PE 파일의 헤더가 구성되는데

IMAGE_OPTIONAL_HEADER 안에 16개의 DataDirectory 라는 부분이 있다.

그리고 그 안에 5번째 index 는 0x04인 CERTIFICATE_TABLE 을 보면 파일에서의

인증서 시작위치와 사이즈를 바로 알 수 있다.

코드도 매우 간단하다.

// PEViewer.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"
#include <windows.h>
#include <winnt.h>

const int CERTIFICATE_TABLE_INDEX    =4;

bool Analyze( FILE *fp, bool &certInfo )
{
    certInfo = false;
    if( NULL == fp )
        return false;

    IMAGE_DOS_HEADER dosHeader;
    fread( &dosHeader, sizeof(IMAGE_DOS_HEADER), 1, fp );

    if( 0x5A4D != dosHeader.e_magic )
        return false;

    fseek( fp, dosHeader.e_lfanew, SEEK_SET );

    IMAGE_NT_HEADERS ntHeader;
    fread( &ntHeader, sizeof(IMAGE_NT_HEADERS), 1, fp );

    if( 0x00004550 != ntHeader.Signature )
        return false;

    if( ntHeader.OptionalHeader.DataDirectory[CERTIFICATE_TABLE_INDEX].Size == 0 )
    {
        certInfo = false;
        return true;
    }

    return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
    if( argc < 1 )
        return 0;

    FILE *fp = fopen( argv[1], "rb" );

    bool bCert;
    Analyze(fp, bCert);
    fclose(fp);

    return 0;
}

다음에는 CAB 파일안에서 CAB의 인증상태를 찾는 방법에 대해서 알아보도록 하자.

Track this back : http://liso.or.kr/~charsyam/charsyam/tc/CharSyam/trackback/45

[로그인][오픈아이디란?]
name    password    homepage
 hidden


BLOG main image
CharSyam
 Notice
 Category
전체 (92)
(19)
(3)
프로그래밍 (62)
게임 (1)
Server Setting (6)
대학원 (1)
 TAGS
Free TearUp 일일빌드 이미지로드 고수 미디어법 삽질운하 googletest 모듈 분할 뷰 도전 임베디드 OS 만들기 윈도우즈 모바일 XML 세월이 젊음에게 SetUp 디자인패턴 리눅스 커널 모듈 사용 뷰 Simple Factory 포팅 촘스키 한글바로가기 식스픽셀 Head First Software Development Interface 더블버퍼링 qsort Atomic C&C 뷰타입 스타일 MACOSX 정치
 Calendar
«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
 Recent Entries
ubuntu network setting
Head First OOD/A - 요... (2)
YES24 총알 배송 광고
CMake &ndash; CMakeLis...
Autotools 관련 좋은 링...
 Recent Comments
그렇게 되어가는거죠 ㅋ...
CharSyam - 08/02
우리 스터디 공식 템플...
ParkPD - 08/02
오~ 이 책도 땡기는군요...
ohyecloudy - 05/25
항상 정리해야 되는데,...
CharSyam - 05/13
잘 정리하셨네요. ^^
고감자 - 05/12
 Recent Trackbacks
스크럼과 XP
The note of Legendre
플래닝 포커 카드
Pell's seer Blog
 Archive
2010/08
2010/07
2010/06
2010/05
2010/04
 Link Site
 Visitor Statistics
Total : 41828
Today : 21
Yesterday : 61
rss
Powered by Tistory & Designed by webnoon.net