윈도우에서 돌아가는 프로그램을 만들어보고 싶습니다.

ykw1101의 이미지

안녕하세요. 현재 고등학교 재학 중인 학생인데요, 학교에서 프로젝트를 진행하게 되어 좀 더 심화적으로 프로그래밍을 공부하고 싶어 win32 api와 c언어를 사용해서 윈도우 프로그램을 만들고 싶습니다.
만들고 싶은 프로그램은 대충 설명드리자면 특정 프로그램이 실행될 때 실행을 하면 키보드 방향키로 특정 키를 입력해야 프로그램을 실행되게 하는 것 입니다. 이것을 약 4달 간 하루에 1~2시간 정도, 꾸준히 투자해 진행을 해나가고 싶은데요, c도 부족하고 win32 api는 아는 것 조차 없어서 막막합니다. 저런 프로그램을 만들기 위해 공부해야 할 것들을 말해주실 수 있으신가요? 쉽게 판단하실 수 없으시겠지만 제작 기간도 말씀 해주시면 감사하겠습니다.
그리고 키 패턴을 암호화해서 파일로 저장하는 방식을 생각 중인데 암호화를 하기 위해서는 또 어떤 것들을 공부해야 할까요? 정말 초보라서 아는게 별로 없습니다. 부디 자세한 답변 부탁드려요.

 의 이미지

자세히 답변을 드리기 위해서는 귀하에 관하여 자세히 알아야 합니다.

특히 (1)귀하의 C언어 능력 및 경험이 어느 정도인지(스스로 "부족하다"고 말하는 사람들 사이에서도 상당히 편차가 있지요), (2)만들고자 하는 프로그램이 요구하는 배경 지식을 얼마나 미리 갖추고 있는지, (3)새로운 지식이나 기술을 습득하는 능력이 어느 정도인지 파악할 수 있어야 제작 기간을 가늠할 수 있겠지요.

물론 인터넷상에 그런 내용을 공개하기는 어려우실 것이고, 경우에 따라서는 본인 스스로도 제대로 파악하지 못하는 경우가 있기 때문에 간단한 상담이 필요할 수도 있겠습니다. 오프라인에서 조언자를 찾아보시는 편이 좋겠습니다.

다만 몇 가지 분명히 해 주시면 다른 분들이 귀하의 목적을 이해하는 데 도움이 될 것 같군요.

Quote:
(a)만들고 싶은 프로그램은 대충 설명드리자면 (b)특정 프로그램이 실행될 때 실행을 하면 키보드 방향키로 특정 키를 입력해야 (c)프로그램을 실행되게 하는 것 입니다.

Q1. (b)=(c)인 것 같은데, (b)는 (a)와 다른 프로그램인 것인가요? 다시 말해서, 비밀 키 패턴을 거쳐서 실행되는 프로그램이 귀하의 프로그램인가요, 아니면 임의의 다른 프로그램인가요?

Q2. Q1의 답이 "다른 프로그램"이라면, 해당 프로그램의 바이나리를 직접 수정(패치)하는 것이 가능한가요, 아니면 바이나리를 건드릴 수 없고 다른 메커니즘으로 구현해야 하나요?

ykw1101의 이미지

(1) 많이 모자랍니다. 아직 포인터의 사용하는 이유도 파악을 못하겠고, 배열과 포인터가 섞여있으면 프로그램을 제대로 다루지 못하는 정도라서 많은 연습과 공부가 필요합니다

(2) 배경지식이 전무하다고 생각합니다. 아직 그냥 알아보는 단계라서 배경지식이 없고, 알아가야 합니다.

(3)새로운 지식을 받아들이기가 힘듭니다. 할게 너무 많은 상황이라 여기에 쏟아부을 순 없습니다.

Q1. b와 a는 다르며, a에서 제가 b(임의의 프로그램)를 보호하고 싶다고 설정을 하면 b가 실행될때 키 패턴을 입력하는 것입니다.

Q2.질문을 정확히 이해하지는 못했지만, "다른 프로그램"을 조작하지는 않으려고 합니다. 어떻게 하는지도 모르구요..
이상 답변이었습니다. 정말 너무나 초보인 상황에서 상상으로만 목표를 잡아본 것이라 허무맹랑하다고 느끼실 것 같습니다.

세벌의 이미지

moogi.new21.org 에 들러 보셔요. 윈도 프로그램 잘하는 분 홈페이지입니다.

라스코니의 이미지

무엇을 만들던 처음 하시는 분이 win32 api를 사용해서 개발하는 것은 비추입니다.
C/C++로 개발하시고 싶으시면 Embarcadero C++ builder, Qt, GTK+ 등을 찾아보시기 바랍니다.
상용 제품의 경우 Evaluation을 찾아보면 되고요 오픈 소스에도 좋은 툴이 많아요.

먼저 구현 리스트를 만드시고 그 각각의 기능 구현에 관한 자료를 찾아보세요. 그리고 그것들을 어떻게 연결할 지 고민해 보셔야 겟죠.

shint의 이미지

//
- 키보드와 마우스 후킹'을 하거나. 다른 프로세스의 핸들을 얻어서. 메모리에 접근하는 방식은 정상적인 방법이 아닐 수 있습니다. 되도록. 허가 받은 후에 하시거나. 윈도우에서 제공하는 방법이 안전합니다.

- 키 다운 메시지는 SendMessage() PostMessage() 로 전달 가능
- 키 입력 확인은 WndProc() PreTranslate() 등에서 확인 가능
- GetAsyncKeyState() 등으로도 입력 확인 가능
- Direct Input 등을 활용해도 입력 확인 가능
- mouse_event() SendInput() 등에 함수로 이벤트 전송 가능
- accessibility 접근성 호환 방식에 대한 내용도 있는거 같습니다.

- 윈도우에 BitLocker 서비스가 있습니다.
암호화 프로그램이 하드 드라이브에 자동으로 적용됩니다.

GetAsyncKeyState function
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx

[Tip] SendMessage 와 PostMessage 함수에 대하여...
http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=692

메모장을 예제로
http://tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=7984

SendMessage()로 메시지를 보내서 'a' 라는 문자를 노트패드에 ?
https://kldp.org/node/42613

mouse_event function
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms646260(v=vs.85).aspx

SendInput function
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms646310(v=vs.85).aspx

Using Mouse Input
https://msdn.microsoft.com/en-us/library/windows/desktop/ms645602(v=vs.85).aspx

Virtual Keyboard 도 참고해보세요.
https://www.codeproject.com/search.aspx?q=virtual+keyboard&x=0&y=0&sbo=kw

//
ARIA 블록암호 알고리즘 - KISA
https://seed.kisa.or.kr/iwt/ko/sup/EgovAriaInfo.do

도대체 한국형 암호화 기술인 ARIA라는 건 뭔가요?
https://kldp.org/node/107453

JAVA 자바 ARIA 아리아 암호화 복호화 방법 알고리즘
http://aljjabaegi.tistory.com/203

[시큐어코딩] 암호화 알고리즘 및 소스
http://openeg.co.kr/464

ARIA 블럭 암호 알고리즘
http://tmdgus.tistory.com/149

ARIA 128 보안 알고리즘
https://open.egovframe.go.kr/cop/bbs/selectBoardArticle.do?bbsId=BBSMSTR_000000000013&nttId=14275

대칭키 암호화 알고리즘, AES
http://blog.securekim.com/2015/06/aes.html

//
직업 학교에서 무료로 교육 해줘요.
프로그래밍 학원도 있구요.

Win API http://soen.kr/
데브피아 VC++ http://www.devpia.com/VC++.MAEUL
코드 프로젝트 http://www.codeproject.com/
코드 구루 https://www.codeguru.com/
GPUGStudy http://gpgstudy.com/
가마수트라 https://www.gamasutra.com/
게임 데브 https://www.gamedev.net/
네히 OpenGL http://nehe.gamedev.net/
OLC Center (C 언어) http://olc.kr/main/index.jsp
Qt SDK https://www.qt.io/download
Flash Developer SDK http://www.flashdevelop.org/wikidocs/index.php?title=Main_Page
Flex SDK https://www.adobe.com/devnet/flex/flex-sdk-download.html

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.