[16.06.25] 한글 배포용 문서의 모든 것

30
한 / 한 한한한 한한한 한 한한한 1 한 한한한 한한한한한한한 한 / 한 한한 한한 (.HWP) 한한 한한한 한한한한 한한한한한한한 . 2016-06-25

Upload: kenny-park

Post on 14-Apr-2017

256 views

Category:

Education


3 download

TRANSCRIPT

Page 1: [16.06.25] 한글 배포용 문서의 모든 것

한/ 글

배포

용 문

서의

모든

박현

1본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 .2016-06-25

Page 2: [16.06.25] 한글 배포용 문서의 모든 것

목차

배포용 문서란 ?배포용 문서의 해제

미래

참고 문헌

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 2

2016-06-25

Page 3: [16.06.25] 한글 배포용 문서의 모든 것

배포

용 문

서란

?

C H A P T E R 1

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 3

2016-06-25

Page 4: [16.06.25] 한글 배포용 문서의 모든 것

배포용 문서

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 4

2016-06-25

Page 5: [16.06.25] 한글 배포용 문서의 모든 것

배포용 문서 (Cont’d)

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 5

[ 배포용 문서로 저장 ] 는 고쳐선 안 될 문서에

대하여

내용을 변경하지 못하도록 만들어 줍니다 .

http://help.hancom.com/hoffice/webhelp/9.0/ko_kr/hwp/file/send_to_mail/publish(save).htm

2016-06-25

Page 6: [16.06.25] 한글 배포용 문서의 모든 것

배포용 문서 (Cont’d)

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 6

[ 배포용 문서로 저장 ] 는 고쳐선 안 될 문서에

대하여

내용을 변경하지 못하도록 만들어 줍니다 .

http://help.hancom.com/hoffice/webhelp/9.0/ko_kr/hwp/file/send_to_mail/publish(save).htm

2016-06-25

Page 7: [16.06.25] 한글 배포용 문서의 모든 것

내용 변경하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 7

한 / 글 자체의 버그를 사용하기

파일을 직접 변경하기

2016-06-25

Page 8: [16.06.25] 한글 배포용 문서의 모든 것

한 / 글 자체의 버그 사용하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 8

http://850530.tistory.com/185

2016-06-25

Page 9: [16.06.25] 한글 배포용 문서의 모든 것

한 / 글 자체의 버그 사용하기 (Cont’d)

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 9

http://850530.tistory.com/185

2016-06-25

Page 10: [16.06.25] 한글 배포용 문서의 모든 것

배포

용 문

서의

해제

C H A P T E R 2

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 10

2016-06-25

Page 11: [16.06.25] 한글 배포용 문서의 모든 것

기초 지식

Seed 찾기

난수 배열 만들기

해시코드 추출하기

해시코드로 복호화하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 11

2016-06-25

Page 12: [16.06.25] 한글 배포용 문서의 모든 것

기초 지식

Seed 찾기

난수 배열 만들기

해시코드 추출하기

해시코드로 복호화하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 12

2016-06-25

Page 13: [16.06.25] 한글 배포용 문서의 모든 것

기초 지식

Compound File Binary Format objidl.h 의 IStorage, IStream 사용

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 13

IStorage *storage,*substorage;IStream *header,*info;StgOpenStorageEx(path,STGM_READWRITE|STGM_SHARE_EXCLUSIVE,STGFMT_STORAGE,0,NULL,0,IID_IStorage,(void**)&storage);storage->OpenStream(L"FileHeader",NULL,STGM_READWRITE|STGM_SHARE_EXCLUSIVE,NULL,&header);header->Seek(li(36),STREAM_SEEK_SET,NULL);header->Read(buffer,1,NULL);header->Seek(li(36),STREAM_SEEK_SET,NULL);header->Write(buffer,1,NULL);storage->OpenStream(L"DocInfo",NULL,STGM_READWRITE|STGM_SHARE_EXCLUSIVE,NULL,&info);storage->DestroyElement(L"BodyText");storage->RenameElement(L"ViewText",L"BodyText");storage->OpenStorage(L"BodyText",NULL,STGM_READWRITE|STGM_SHARE_EXCLUSIVE,NULL,0,&substorage);substorage->EnumElements(0,NULL,0,&enumstat);storage->OpenStorage(L"Scripts",NULL,STGM_READWRITE|STGM_SHARE_EXCLUSIVE,NULL,0,&substorage);storage->OpenStorage(L"DocHistory",NULL,STGM_READWRITE|STGM_SHARE_EXCLUSIVE,NULL,0,&substorage);

li : int → LARGE_INTEGER / uli : int → ULARGE_INTEGER

2016-06-25

Page 14: [16.06.25] 한글 배포용 문서의 모든 것

기초 지식

Seed 찾기

난수 배열 만들기

해시코드 추출하기

해시코드로 복호화하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 14

2016-06-25

Page 15: [16.06.25] 한글 배포용 문서의 모든 것

SEED 찾기

HWPTAG_DISTRIBUTE_DOC_DATA 의 첫 4 바이트

SectionN 스트림에서의 구조

0~3 바이트 : 레코드 헤더

4~7 바이트 : SEED

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 15

stream->Seek(li(4),STREAM_SEEK_SET,NULL);stream->Read(data,256,NULL);seed=(data[3]<<24)+(data[2]<<16)+(data[1]<<8)+data[0];

2016-06-25

Page 16: [16.06.25] 한글 배포용 문서의 모든 것

기초 지식

Seed 찾기

난수 배열 만들기

해시코드 추출하기

해시코드로 복호화하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 16

2016-06-25

Page 17: [16.06.25] 한글 배포용 문서의 모든 것

난수 배열 만들기

srand(seed) a = rand() & 0xFF, b = rand() & 0x0F + 1 → 배열에 a 값을 b 번 횟수만큼 삽입

배열크기가 256 이 될 때까지 반복

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 17

for(i=0;i<256;++i){ if(b==0) { a=rand()&0xff; b=(rand()&0x0f)+1; } random[i]=a; b--;}

2016-06-25

Page 18: [16.06.25] 한글 배포용 문서의 모든 것

기초 지식

Seed 찾기

난수 배열 만들기

해시코드 추출하기

해시코드로 복호화하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 18

2016-06-25

Page 19: [16.06.25] 한글 배포용 문서의 모든 것

해시코드 추출하기

offset = (Seed & 0x0f) + sizeof(UINT) 난수배열과 배포용 문서 데이터를 XOR 연산

offset 부터 80 바이트가 해시코드 , 2 바이트가 옵션플래그

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 19

for(i=0;i<256;++i)data[i]=data[i]^random[i];offset=(seed&0x0f)+sizeof(unsigned int);for(i=0;i<80;++i)hash[i]=data[offset+i];for(i=0;i<2;++i)flag[i]=data[offset+80+i];

* 해시코드는 비밀번호의 SHA-1 값을 문자열 (UTF-16LE) 으로 변환한 것

2016-06-25

Page 20: [16.06.25] 한글 배포용 문서의 모든 것

기초 지식

Seed 찾기

난수 배열 만들기

해시코드 추출하기

해시코드로 복호화하기

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 20

2016-06-25

Page 21: [16.06.25] 한글 배포용 문서의 모든 것

해시코드로 복호화하기

복호화할 스트림

ViewText/SectionN → BodyText/SectionN Scripts/JScriptVersion Scripts/DefaultScript DocHistory/HistoryLastDoc DocHistory/VersionLogN

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 21

2016-06-25

Page 22: [16.06.25] 한글 배포용 문서의 모든 것

해시코드로 복호화하기 (Cont’d)

해시코드의 처음 16 바이트로 AES-128 ECB 알고리즘을 사용해 본문 레코드를

복호화할 수 있음

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 22

#include<openssl/ssl.h>for(i=0;i<16;++i)key[i]=hash[i];stream->Stat(&stat,STATFLAG_NONAME);inp=(unsigned char*)malloc(stat.cbSize.QuadPart-260);outp=(unsigned char*)malloc(stat.cbSize.QuadPart-260);stream->Read(inp,stat.cbSize.QuadPart-260,NULL);EVP_CIPHER_CTX ctx;EVP_CIPHER_CTX_init(&ctx);EVP_DecryptInit(&ctx,EVP_aes_128_ecb(),key,NULL);EVP_DecryptUpdate(&ctx,outp,&outlen,inp,stat.cbSize.QuadPart-260);EVP_DecryptFinal(&ctx,outp+outlen,&tmp);outlen=outlen+tmp;stream->Seek(li(0),STREAM_SEEK_SET,NULL);stream->SetSize(uli(outlen));stream->Write(outp,outlen,NULL);storage->Commit(STGC_OVERWRITE);

2016-06-25

Page 23: [16.06.25] 한글 배포용 문서의 모든 것

결과

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 23

2016-06-25

Page 24: [16.06.25] 한글 배포용 문서의 모든 것

미래

C H A P T E R 3

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 24

2016-06-25

Page 25: [16.06.25] 한글 배포용 문서의 모든 것

사용 목적에 따른 문서 처리 방법 차별화

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 25

문서 내용 변경 방지

문서 내용 복사 방지

2016-06-25

Page 26: [16.06.25] 한글 배포용 문서의 모든 것

문서 내용 변경 방지

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 26

2016-06-25

Page 27: [16.06.25] 한글 배포용 문서의 모든 것

문서 내용 복사 방지

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 27

2016-06-25

Page 28: [16.06.25] 한글 배포용 문서의 모든 것

참고

문헌

A P P E N D I X

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 28

2016-06-25

Page 29: [16.06.25] 한글 배포용 문서의 모든 것

참고 문헌

https://groups.google.com/forum/#!topic/hwp-foss/d2KL2ypR89Q

https://en.wikipedia.org/wiki/Compound_File_Binary_Format

https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 29

2016-06-25

Page 30: [16.06.25] 한글 배포용 문서의 모든 것

감사

합니

이 프레젠테이션은

http://slidesha

re.net/525hm

/?

에서 다시 보

실 수 있

습니다

본 제 품 은 한 글 과 컴 퓨 터 의 한 / 글 문 서 파 일 ( . H W P ) 공 개 문 서 를 참 고 하 여 개 발 하 였 습 니 다 . 30

2016-06-25