개발 일지

2019. 7. 2. 03:550x0A Develop/WINDOW APPLICATION

728x90

======================================================================

시작 일 : 2019/07/08

종료 일 :

------------------------------------------------------------------------------------------------------------------------

Socket 비동기 프로그램 제작 

 

Environment : WINDOWS SERVER 2016

 

======================================================================

시작 일 : 2019/07/01 

종료 일 : 

------------------------------------------------------------------------------------------------------------------------

HTTP Client를 이용한 Windows Installer를 개발중이다. (WIN32 GUI Project) 

Windows Installer는 '마법사 도구'라고도 한다. 

마법사 도구를 커스터마이징하고 있다. 

 

시행착오 후 알게 된 정보

[ 2019/07/01 ]

1. WinMain에서 무조건 Window를 먼저 호출할 필요는 없다.

   - 그러나 Window를 실행시키고 싶을 때는 MainWindow Procedure 내에서 WM_CREATE(VALUE)를 사용해야한다. 

      메인 Proc 이외의 Proc는 WM_CREATE를 사용하지 않아도 된다. 

2. 리소스파일 전체를 소스코드로 작성할 수 있다. (*.RC) 

    - Visual Studio 2019에서 자꾸 에러가 나서 직접 RC코드를 작성했다. 

     (MSDN을 보다 더 효율적으로 사용하는 방법을 터득했다.)

3. 마법사 도구는 'Dialog'로 되어 있다

4. Dialog Proc는 기본적으로 WM_INITDIALOG가 필요하다.

5.  Dialog에는 모달 / 모달리스가 있다. 

   - 전형적으로 마법사 도구에서는 모달을 사용한다. 

 

[+] HTTP Content-Type 속이는 방법이 있을까? 있다면 어떻게 구현하면 될까.. 

 

[+] 현재 미해결 : HTTPS에서 받아오는 것은 하지 못하고 있다. -> SSL 레이어 계층 공부 필요 

 

느낀 점.

[ 2019/07/01 ]

윈도우 프로시저를 어떻게 사용해야 하는지 알게 되었다. 

WIN API를 매크로화 해서 코딩하면 훨씬 이쁘다.

HWND과 lParam, wParam 아주 중요하다.

------------------------------------------------------------------------------------------------------------------------

 

======================================================================

시작 일 : 2019/07/01

종료 일 : 

------------------------------------------------------------------------------------------------------------------------

Visual Basic Macro 프로그램 제작 

 

시행착오 후 알게 된 정보 

1. HTTP 접속 혹은 Socket을 통한 데이터 전달 시 매크로 참조에서 라이브러리를 다운로드 받아야한다.

   (ChilKat , 나머진 기억이 지금 안남) 

   - 라이브러리를 자동화 다운로드 하는 법 연구 해볼 필요가 있음 

   이유 : 귀찮음. 

     => 일단 conceal 하는 방법으로 진행해보기로 함 

2.  VBA 코드의 경우 return되는 방식이 조금 다르다. 

  ex. result를 변수로 가지고 있는 ABC Function의 경우 

    ////// 함수 동작 /////

    return result (x) 

 

    /////// 함수 동작 //////

    ABC = result;

 3. Macro 폼 내부에 바이너리를 심을 수 있다. 

 4. VBA에는 Function과 Sub가 존재한다. 

 

[2019/07/02]

오늘의 목표

1. UserForm에 사진을 넣고, 그 사진을 클릭시 메시지가 뜰 수 있게 하라 (성공)

2. UserForm에 사진을 넣고, 그 사진을 클릭시 EXE가 몰래 로드되게 하라. (성공)

 

Excel base64 형식을 공부하다가 알게 된점 

1. 예시로 참고한 것에는 Microsoft XML v2.6이었지만 현재 매크로에서 참조 가능한 버전은 6버전대 

2. MSXML2의 참조 변수 DOMDocument는 DOMDocument60으로 바뀜 

 

[2019/07/03]

오늘의 목표 

1. EditBox와 Path 경로 연동하기 (성공)

2. UserForm과 Module 관계 파악하기 (끝)

3.. 경로를 드래그 앤 드롭으로 처리하기  -> 다른 방법으로 처리 함 (엑셀 모듈에서 Text를 강제 조작할 수 있음)

4.  참조하는 데이터를 프로세스 단에서 숨기기 -> 끝 

 

[2019/07/04]

오늘의 목표 

1. 코드 난독화 

  - 아이디어 구상 중 

 

[2019/07/05 ~ 07/07] : CodeEngn 발표 자료 만들기 위해 잠시 개발 휴식 

 

[2019/07/08]

생각한 시나리오에 맞게 UI 구성 

- 시나리오는 SECRET 

 

------------------------------------------------------------------------------------------------------------------------

======================================================================

시작 일 : 2019/06/25 

종료 일 : 2019/06/26

------------------------------------------------------------------------------------------------------------------------

Window Socket 동기화 프로그램 제작

 

시행착오 후 알게 된 정보

1. 소켓의 숨겨진 과정 이해 

   - 소켓은 데이터를 완벽하게 똑같은 바이트 단위로 가지고 오지 못한다. 그렇기 때문에 SOCK_STREAM 플래그를 사용해줘야 한다.

2. 동기화 프로그램을 만들고 systeminfo 내 데이터들을 전달할 수 있는 모듈을 제작하였다. 

  - 이 와중, CMD와 systeminfo 바이너리를 리버싱 하게 되었고, 이로인해 해당 바이너리들의 특징을 이해할 수 있게 되었다. 

3. TEB와 PEB를 이용해서 원하는 함수를 가지고 놀 수 있다. 

   - 시간이 없어서 아직 어셈으로 구현해보진 못했다.

[+] Python으로도 Socket 작성을 공부해봤다. 

    - AWS EC2 인스턴스를 연결하기 위해서 gethostbyaddr 함수를 이용해야한다. 

 

[+] 진행할 내용 : Windows Tree 구조 파싱 (system 함수 사용하지 않고) 

 

느낀 점

콘솔 프로그래밍 시, Visual Studio로 작업하는 것 보다 Visual Studio Code로 작업하고 배치파일로 묶어서 파일을 관리하는 것이 더 편하다는 것을 알게 되었다. 

Git에 올라가는 파일 양도 줄어 듬. 

스레드 없이 동기화 구현이 가능하다

라이브러리를 만들어두는 것은 시간은 오래걸리지만, 좋은 공부가 된다. 

구조체 전달할 시 패딩되는 값이 있는지 한번 더 고려하자.

윈도우즈 서버 끊기면 '0'

리눅스 서버 끊기면 '-1'  

리눅스랑 윈도우즈 동시에 코딩중이니 까먹지 말기 

서버와 클라이언트에서 주고 받는 데이터 크기를 동일하게 해야한다. (안그럼 꼬여버림)

------------------------------------------------------------------------------------------------------------------------