CharSyam
Tag | Location | Media | Guestbook | Admin

'프로그래밍/Windows'에 해당하는 글(1)
2009/08/23   PE 파일 안에서 인증 정보 찾아내기


2010/03/18 15:38 2010/03/18 15:38
VS2005 ATL Security Update 용 Reditribution Package

 http://www.microsoft.com/downloads/details.aspx?familyid=766a6af7-ec73-40ff-b072-9112bab119c2&displaylang=en

 

혹시나 VS2005 에서 위의 패치가 된 경우 해당 Redistribution 패키지가 없으면 -_-

 

Side By Side 에러로 인해서 프로그램이 동작하지 않는 걸 볼 수 있다 ㅋㅋ 



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의 인증상태를 찾는 방법에 대해서 알아보도록 하자.



BLOG main image
CharSyam
 Notice
 Category
전체 (90)
(19)
(3)
프로그래밍 (61)
게임 (1)
Server Setting (5)
대학원 (1)
 TAGS
공짜경제학 정치 구본형 고수 세월이 젊음에게 MACOSX TearUp CeRegSetValueEx Head First Software Development DQ4 Window Mobile 6 문제 프로젝트 다국어바로가기 촘스키 드래곤퀘스트4 TDD 더블버퍼링 Simple Factory 일일 빌드 일일빌드 일자리 창출 미디어법 Design Pattern 모듈 사용 뷰 정제 ERROR_ACCESS_DENIED Atomic C# googletest WindowMobile
 Calendar
«   2010/07   »
        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 31
 Recent Entries
YES24 총알 배송 광고
CMake &ndash; CMakeLis...
Autotools 관련 좋은 링...
고수와 전문가의 차이
Zookeeper 설치 방법
 Recent Comments
오~ 이 책도 땡기는군요...
ohyecloudy - 05/25
항상 정리해야 되는데,...
CharSyam - 05/13
잘 정리하셨네요. ^^
고감자 - 05/12
네, 저도 동감합니다....
CharSyam - 2009
http://www.thisisgame....
ParkPD - 2009
 Recent Trackbacks
Discount patio furniture.
Discount furniture.
Furniture competition.
Furniture design compe...
Acomplia ribona.
Acomplia.
Premarin.
Premarin vaginal cream.
스크럼과 XP
The note of Legendre
 Archive
2010/07
2010/06
2010/05
2010/04
2010/03
 Link Site
 Visitor Statistics
Total : 38342
Today : 44
Yesterday : 73
rss
Powered by Tistory & Designed by webnoon.net