[WinAPI] DLL Injection – 2. 코드 예제(VirtualAllocEx)

DLL 인젝션을 하기 전에 아래 사항을 확인해 주세요 주절 주절 썼는데, 제가 이때까지 실무에서 파악한 내용입니다. 부정확하거나, 놓친 내용이 있을 수 있습니다. 자, DLL 인젝션 코드를 알아보겠습니다.우선 인젝션 작업을 할 MFCApplication1는 관리자 권한이 있어야합니다.아래와 같이 UAC 실행수준을 requireAdministrator로 맞춰주세요  MFCApplication1의 대화상자를 아래와 같이 만들어주세요. 인젝션 할 PID를 입력하는 부분입니다. Injection 버튼을 더블 클릭 하셔서 아래와 같이 입력합니다. 그리고 DLLInject … Read more

[WinAPI] DLL Injection – 1. 개념

이번 글에서는 DLL 인젝션의 간단한 개념에 대해 알아보겠습니다. DLL 인젝션은 기본적으로 다른 프로세스의 주소 공간 내에서 DLL을 강제로 로드시키는 기술로써, 의도치 않은 코드를 실행시키는 기술입니다.보통 DLL 인젝션은 다른 프로세스가 어떤 프로그램을 의도하지않거나 예상하지 않은 기능을 수행하게 만듭니다.일반적인 프로그램은, 아래와 같이 여러 DLL 들을 로드합니다. 위 그림에서 MFCApplication1.exe는 시스템 DLL(kernel32.dll, user32.dll, gdi32.dll 등등)뿐만 아니라 사용자가 만든 DLL(MATHFUNCTION.DLL)도 로하고 있습니다.어찌 … Read more

[WinAPI] CreateProcess, WaitForInputIdle 함수 사용 예제

이번 글에서는 CreateProcess와 WaitForInputIdle 함수를 사용하는 방법을 알아보겠습니다. 외부 프로그램을 실행하다 보면 컴퓨터가 느리거나 해서 실행이 늦게 될 수 있습니다.그럴때 WaitForInputIdle을 사용하셔서 코딩을 하시면 편합니다.저같은 경우 카카오톡이 느리게 실행됩니다. 아래 코드는 카톡 실행 후 메시지를 표시하는 코드입니다. 함수가 직관적이라 CreateProcess는 언급하지 않겠습니다. 조심하셔야 할 것은 WaitForInputIdle 2번째 인자에 INFINITE를 입력했는데 만약 실행하는 프로세스가 실행이 안되고 … Read more

[WinAPI] FindWindow 사용법

이번 글에서는 FindWindow에 대해 알아보겠습니다. FindWindow를 사용하시기 전 아래 헤더파일을 선언하셔야합니다. FindWindow의 함수 원형은 아래와 같습니다. FindWindow의 첫번째 인자는 클래스네임, 두번째 이름은 캡션을 입력해야합니다.하지만 꼭 두개의 인자를 입력해야 하는건 아닙니다. 둘 다 NULL로 입력해도 되고, 둘 중 하나만 입력해도 됩니다. 다만 클래스네임과 캡션은 대소문자를 구별하지 않지만 부분 검색은 하지않으므로 정확하게 입력하시는걸 추천합니다. 정상적으로 작동하면 찾은 윈도우의 HWND를 … Read more

[WinAPI] IP Address 읽어오기

이번 글에서는 IP를 읽어오는 방법에 대해 알아보겠습니다. 자신의 PC에서 IP를 확인하는 방법은 명령 프롬프트에서 확인할 수 있습니다. 윈도우+R을 눌러서 cmd를 입력하시면 명령 프롬프트가 실행됩니다. 위와 같은 화면에서 ipconfig를 입력하시면 아래와 같이 PC에 설정된 IP 리스트가 표시됩니다. 이 IP 리스트들을 WinAPI 함수를 사용하여 출력해보겠습니다. 아래와 같이 코딩을 해주세요. 위 코드를 빌드 실행하면 아래와 같이 출력 됩니다. 해당 코드는 IPv4에서만 … Read more

[WinAPI] Dump 파일 생성하기 – SetUnhandledExceptionFilter

프로그래밍을 하다 보면 여러 에러가 나타납니다. 문법을 틀리거나 잘못된 인자를 사용하는 등의 컴파일 에러, 링크 단계에서 나타나는 링크 에러, 프로그램 실행중 나타나는 런타임 에러가 있을 수 있습니다. 컴파일, 링크에러의 경우 보통 개발도구에서 에러 메시지를 표시하기 때문에 프로그래머가 확인하기 용이하지만(그렇다고 바로 고칠수 있는건 아니지만) 런타임 에러같은 경우는 프로그래머 의도와 다른 값으로, 프로그램 실행 중에 발생하므로, 프로그래머가 확인하기 어렵습니다. 예를들어 아래와 같은 … Read more

[WinAPI] GetNativeSystemInfo, 윈도우 OS 몇 bit인지 확인하기

오늘은 윈도우 OS가 몇 비트인지 확인하는 함수를 알아보겠습니다.우선 내 컴퓨터 우클릭 -> 속성에 들어가면 아래와 같이 몇비트 인지 확인 할 수 있습니다. GetNativeSystemInfo함수를 사용하면 손쉽게 알아낼 수 있습니다. 함수 원형은 아래와 같습니다. 해당 함수는 최소 Windows XP, Windows Server2003부터 지원합니다. 또한 아래 헤더와 라이브러리를 포함해야합니다. Header sysinfoapi.h(include Windows.h) Library Kernel32.lib 사용 방법은 아래와 같습니다. 만약 위 사양으로 … Read more

[WinAPI] CScrollBar 사용법 – 2-2. 횡스크롤 만들기

안녕하세요. 저번 글까지는 스크롤을 만드는 것까지 했는데, 이번 글에서는 약간의 설명과 코드를 바로 첨부해 드리겠습니다. 코드를 하기 앞서 dc와 dcTemp, 그리고 스크롤로 표현 하는 방법을 설명해드리겠습니다.최종적으로 사용자가 보는 dc화면이 있습니다. 이 dc에서 CRect rect를 이용하여 크기를 구합니다.그리고 가로 크기는 10000, 세로는 dc 와 같은 dcTemp를 생성해줍니다. 그리고 dcTemp에 0, 100, 200, … , 9900 같이, 100 위치마다 … Read more

[WinAPI] CScrollBar 사용법 – 2-1. 횡스크롤 만들기

안녕하세요, 저번 글에 이어서 CScrollBar을 이용하여 특정 화면을 만들어 보도록 하겠습니다. 이번 글에서는 아래와 같이, 횡으로 화면이 전환되는 예제를 만들어 보겠습니다. MFC 프로젝트를 하나 생성하신 뒤, Static Control을 추가하시고 아래와 같이 속성들을 설정합니다.빨간색 부분은 무조건 설정 해주셔야하고, 파란색 부분은 꼭 하실 필요 없습니다.(그냥 보기 좋으라고 한겁니다.) 그리고 Static Control을 우클릭 하여 변수 추가를 합니다. 그리고 난 후 아래와 같이 변수 … Read more

[WinAPI] CScrollBar 사용법 – 1. 기초

안녕하세요, CScrollBar의 사용법에 대해 알아보겠습니다.이번 글에서는 CScrollBar를 생성하는 코드만 알아보고 다음 글에서부터 이를 활용하여 화면을 만들어 보도록 하겠습니다. 가로 스크롤을 만든다는 가정하에 아래와 같이 헤더파일에 CScrollBar를 선언합니다. CScrollBar를 생성하는 방법은 아래와 같습니다. CScrollBar의 범위와, 위치, 정보를 설정하는 방법은 SCROLLINFO 구조체를 사용합니다. 그 방법은 아래와 같습니다. CScrollBar의 정보를 얻는 방법은 아래와 같습니다. 위 코드는 CScrollBar 사용하는 방법입니다. 다음 글에서는 이 방법들을 이용하여 사용자가 원하는 화면을 만들어 보도록 하겠습니다.