Diary/1~100(101)
-
71일차 파이썬 CDR GUI 개발 - 01
오늘부터는 파이썬의 PyQT를 이용해 GUI 개발에 들어간다. www.inflearn.com/course/pyqt-gui?gclid=Cj0KCQjwxNT8BRD9ARIsAJ8S5xbwvVJZZ5iBYXB2vUDevfb8yrJI63iiB0SbnHB5BCZ_nO14IABufC4aAhPgEALw_wcB 예제로 살펴보는 PyQt Tutorial - 인프런 PyQt를 이용하여 Python GUI 프로그래밍 세계에 빠져봅시다! Python으로 계산기와 같은 프로그램을 만들 수 있는 강좌입니다! Googletrans 라이브러리를 활용한 번역기, 계산기, AI 기술을 결합한 이미지 www.inflearn.com PyQt는 위의 강의를 통해 학습했다. 1. 모듈 선언 2. 인스턴스 선언
2020.11.12 -
70일차 파이썬 CDR 개발 - 30
오늘이 CDR 소스코드 마지막이다. 앞으로는 소스코드의 세부적인 사항을 수정 및 보완하여 앞으로 개발할 CDR 프로그램에 Olefile 모듈과 같이 사용할 예정이다. Modify BBAT & SBAT BBAT와 SBAT를 수정한다.
2020.11.11 -
69일차 파이썬 CDR 개발 - 29
Modify SBAT Chain Modify BBAT Chain의 기능과 동일하다.
2020.11.10 -
68일차 파이썬 CDR 개발 - 28
Modify BBAT Chain 원본 BBAT Chain을 수정한다.
2020.11.09 -
67일차 파이썬 CDR 개발 - 27
Add BBAT -- 2 BBAT를 주어진 개수만큼 추가한다.
2020.11.08 -
66일차 파이썬 CDR 개발 - 26
Add BBAT BBAT를 주어진 개수만큼 추가한다.
2020.11.07 -
65일차 파이썬 CDR 개발 - 25
1. Write BBAT & SBAT 임의의 데이터를 체인에 따라서 덮어쓴다. 2. Reduce SBAT Chain Reduce BBAT Chain의 기능과 동일하다.
2020.11.06 -
64일차 파이썬 CDR 개발 - 24
Reduce BBAT Chain BBAT 체인을 줄인다.
2020.11.05 -
63일차 파이썬 CDR 개발 - 23
Write 오늘을 기점으로 Write에 대한 기초적인 공부와 소스코드 작성이 끝이났다.
2020.11.05 -
62일차 파이썬 CDR 개발 - 22
Write
2020.11.05 -
61일차 파이썬 CDR 개발 - 21
오늘부터는 Write에 대한 연구와 소스코드이다. Write
2020.11.02 -
60일차 파이썬 CDR 개발 - 20
오늘은 OfficeFile 클래스의 Delete 메소드에 대한 소스코드이다. 1. Delete Class : OfficeFile
2020.11.01 -
59일차 파이썬 CDR 개발 - 19
오늘은 어제 작성했던 Delete함수에서 크기를 조정하는 Array_Header 함수의 소스코드이다. 1. Array_Header 2. Set_Block BBAT 덮어쓰기
2020.10.31 -
58일차 파이썬 CDR 개발 - 18
오늘은 Delete 함수에 대한 소스코드 작성을 했다. Delete
2020.10.30 -
57일차 파이썬 CDR 개발 - 17
이제는 CDR 구현을 위한 기본인 파싱은 끝이났다. 앞으로는 파싱한 스트림을 덮어쓰기 할 수 있는 소스코드를 구현해야한다. 1. WriteMode 새로운 클래스를 생성하고 메소드를 작성했다. 2. Node
2020.10.29 -
56일차 파이썬 CDR 개발 - 16
오늘은 전체 스토리지와 스트림의 목록과 속성을 가져오는 소스코드를 작성했다. 1. Full Array 'Name' 스토리지와 스트림의 속성 정보는 80Byte의 크기로 저장이 되어 있다. Root를 통해 프로퍼티를 만든 다음에, 프로퍼티를 통해 스토리지와 스트림의 속성들을 딕셔너리로 저장한다. 2. Full Array 'Type, Left, Right, Child, Start, Size' Root Storage ID Name : 0x600 ~ 0x63F Name Length : 16 00 ==> Name의 문자열 크기는 16+1 = 17Byte Type : 05 ※ 0–Empty, 1–Storage, 2–Stream, 3–Lock Bytes, 4–Property, 5–Root Storage Left No..
2020.10.28 -
55일차 파이썬 CDR 개발 - 15
오늘은 SBAT와 Base64 대한 소스코드를 작성했다. 1. SBAT Array SBAT도 BBAT처럼 Depot가 존재한다. 그래서 SBAT Depot를 통해 Chain을 만든다. 2. Base64 Base64Decode를 통해 UTF-16LE으로 변환하여 원하는 값을 수월하게 얻을 수 있다.
2020.10.27 -
54일차 파이썬 CDR 개발 - 14
오늘은 섹터의 체인을 만들고 찾아서 합칠 예정이다. 1. BBAT Chain 한글문서의 스트림은 ID를 가지고 있다. 그 ID를 통해 섹터 체인을 만들고 합쳐야한다. 2. BBAT Array BBAT Chain을 통해 얻은 값들을 BBAT Array에 딕셔너리 타입으로 저장한다.
2020.10.26 -
53일차 파이썬 CDR 개발 - 13
BBAT Depot 읽고 BBAT 찾아서 합치기 위에 적힌 소스코드의 역할 1. BBAT Depot 읽기 (0x03) 2. BBAT 찾아가기 (0x03) 3. BBAT 합치기
2020.10.25 -
52일차 파이썬 CDR 개발 - 12
※ 헤더 부분을 읽기 위한 함수 1. Rader_ID BBAT의 공식 : (n+1) * 512(BBAT Size) 2. BBAT_List BBAT Depot는 한글 문서의 0x4c ~ 0x1ff 까지이다. 이후에 BBAT Depot에 존재하는 섹터들을 찾아가서 합쳐야 한다.
2020.10.24 -
51일차 파이썬 CDR 개발 - 11
오늘은 CDR을 구현하기 위한 순서도를 작성해보았다. 1. 파일 입력 2. 헤더 읽기 3. Storage, Stream 프로퍼티 읽기 4. BBAT, SBAT Depot 읽기 5. BBAT, SBAT 찾아가서 합치기 6. Sector 찾고 합치기 7. SBAT Stream 찾기 .... 우선은 위의 순서에 맞게 차차 진행하면서 소스코드를 작성 및 수정하려고 한다. 1. 파일 입력 2. 헤더 읽기 Signature : D0 CF 11 E0 A1 B1 1A E1 ==> HWP문서의 고유 시그니처 Version : 3E 00 03 00 Byte Order : FE FF ==> FE(Little – Endian), FF(Big Endian) BBAT Size : 09 00 ==> 2^9 ==> BBAT 1 Se..
2020.10.23 -
50일차 파이썬 CDR 개발 - 10
파이썬으로 CDR 개발을 시작하면서 막히게 되는 부분이 많아졌는데, 다시 C언어를 하면서 생각이 전환될만한 것을 찾아볼까 한다. 문제 단일 연결 리스트의 길이 구하기 설명 노드의 길이를 int 형으로 반환하는 length 함수 만들기 단일 연결 리스트의 구조(노드 구조는 struct Node) § 연결 리스트 • 리스트의 연결 자료구조로 표현 • 연결하는 방식에 따라 단순 연결 리스트와 원형 연결 리스트, 이중 연결 리스트, 이중 원형 연결 리스트 § 연결 리스트의 노드 • 연결 자료구조에서 하나의 원소를 표현하기 위한 단위 구조 • 데이터 필드 (Data Field) − 원소의 값을 저장 − 저장할 원소의 형태에 따라서 하나 이상의 필드로 구성 • 링크 필드 (Link Field) − 다음 노드의 주소..
2020.10.22 -
49일차 파이썬 CDR 개발 - 10
CDR을 위해서는 hexdump 모듈이 아닌 직접 hexdump를 구현해야 한다는 사실을 알았다. 공개된 오픈소스들을 통해 HexDump의 원리를 이해하고 CDR에 필요한 HexDump를 구현이 필요하다고 느꼈다.
2020.10.21 -
48일차 파이썬 CDR 개발 - 9
마지막으로 데이터들을 리틀 엔디안 방식으로 정렬하게 하는 함수를 이용해서 OLE Parser가 구현이 된다. 이제 OLE Parser에 대한 흐름이 어떠한지 잡혔으니 CDR 구현을 위한 소스코드 작성에 돌입할 예정이다. OLE Parser를 구현하도록 도와준 많은 오픈소스 제공자분들에게 무한한 감사를 느끼고있다.
2020.10.20 -
47일차 파이썬 CDR 개발 - 8
오늘은 Property를 작성해봤다. Root Storage Chain Entry 2 -> Entry 21 -> Entry 483 -> Entry 484 - Property - [ 0 ] Root Entry [ 1 ] File Header [ 2 ] Doc Info [ 3 ] Hwp Summary Information [ 4 ] Body Text [ 5 ] BinData [ 6 ] Prv Image [ 7 ] Prv Text [ 8 ] Doc Oprions [ 9 ] Scripts [ 10 ] JScript Version [ 11 ] Default JScript [ 12 ] _Link Doc [ 13 ] BIN0001.jpg [ 14 ] Section 0 Python
2020.10.19 -
46일차 파이썬 CDR 개발 - 7
오늘은 SBAT 참조에 대해 알아봤다. SBAT Depot (0x1E5) ◈ _Link Doc Type : 02 – Stream Node Color : 0x01 Left Node : 0xFF 0xFF 0xFF 0xFF Right Node : 0xFF 0xFF 0xFF 0xFF Child Node : 0xFF 0xFF 0xFF 0xFF Start Sector ID : 0x49 ( Entry 73 ) SBAT 참조를 통해 Section 0를 찾기 위해서는 Root Entry를 통해 BBAT 참조를 먼저 해야한다. Root Entry : 0x1EF = Entry 495 Root Entry Chain Entry 495 -> Entry 496 -> Entry 497 -> Entry 4 -> Entry 6 -> E..
2020.10.18 -
45일차 파이썬 CDR 개발 - 6
오늘은 BBAT 참조하는 구조에 대해 알아봤다. ◈ Prv Image Type : 02 – Stream Node Color : 0x01 Left Node : 0xFF 0xFF 0xFF 0xFF Right Node : 0x08 Child Node : 0xFF 0xFF 0xFF 0xFF Start Sector ID : 0x16 Object Size : 0x284EA = 165,098Byte BBAT에서 0x16 Entry ~ End 까지 따라가면 Prv Image의 Chain이 완성된다. Python
2020.10.17 -
44일차 파이썬 CDR 개발 - 5
오늘은 테스트 파일의 Storage, Stream의 구조를 파악했다. [ Type : 1 - Storage ] ◈ Root Entry Type : 05 – Root Storage Node Color : 0x00 Left Node : 0xFF 0xFF 0xFF 0xFF Right Node : 0xFF 0xFF 0xFF 0xFF Child Node : 0x01 Start Sector ID : 0x1EF ◈ Body Text Type : 01 – Storage Node Color : 0x01 Left Node : 0x02 Right Node : 0x06 Child Node : 0x0E Start Sector ID : 0x00 ◈ Bin Data Type : 01 – Storage Node Color : 0x0..
2020.10.16 -
43일차 파이썬 CDR 개발 - 4
오늘은 BBAT Depot에 대한 구조를 알아보려고 한다. BBAT Depot : 0x03 0x81 0x101 0x05 0x21 0xA3 0x07 0x03 Block (0x03 + 1) * 0x200 = 0x800 Root Storage Mapping Root Storage Chain Entry 2 (0x15) -> Entry 21 (0x1E3) -> Entry 483 Entry 2 Entry 21 Entry 483 Entry 484 Python
2020.10.15 -
42일차 파이썬 CDR 개발 - 3
오늘 필요한 작업은 Root Storage에 접근하는 것이다. Root Storage는 항상 0x40위치에 고정적으로 존재한다. 하지만 값은 변동될 수 있으니 주의하자. Root Storage ID : 0x02 Root Storage를 찾아가기 위한 계산 (0x02 + 1) * 0x200 = 0x600 Root Storage ~ 512Byte Python 위의 공식을 기억한다면 보다 쉽게 이해할 수 있다. 예를들어, sectorID = 0x02라고 가정한다면 offset = (0x02 + 1) * 512 = 0x600 self.seek(offset)은 내 위치에서 0x600만큼 이동한다는 뜻이다. 즉, self.seek(offset) = 0x800 그리고 buf는 0x800 + 0x200의 값을 가지게 ..
2020.10.14