[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

[MFC] 대화상자 ClassName 변경

이번 글에서는 MFC 대화상자 ClassName을 변경하는 방법을 알아보겠습니다.Win32프로그래밍에서는 생성할때 ClassName을 설정해줘서 쉬운데, MFC는 손을 여기저기에 대야합니다. 우선 MFC 프로젝트 생성 해주신 뒤, 아래와 같이 리소스뷰에서 .rc를 클릭하면 우측에 RC노드라 하여 속성이 나타납니다. 여기서 MFC Mode를 False로 변경하셔야합니다. 그 다음으로 대화상자 속성에서 Class Name을 원하는 이름으로 변경해줍니다. 그리고 난후 대화상자 클래스의 생성자에 아래와 같이 코딩합니다. 실행해서 Spy++로 확인해봅니다. 이렇게 ClassName을 지정해서 … 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

[C++] _tcstol, strtol, wcstol 문자열 진수 변환

오늘은 문자열을 쉽게 2진수, 10진수, 16진수로 변경할 수 있는 _tcstol 함수에 대해 알아보겠습니다. 함수 원형은 아래와 같습니다. 오버플로우가 되면 LONG_MAX또는 LONG_MIN이 반환됩니다.3번째 인자(진수)가 2보다 작거나 32보다 크면 ERANGE , EINVAL을 반환합니다.해당 함수는 변환이 불가능하면 0을 반환합니다.  사용 예제는 아래와 같습니다. 필요 헤더파일은 아래와 같습니다. Routine Required header _tcstol <tchar.h> strtol <stdlib.h> wcstol <stdlib.h> or <wchar.h> _strtol_l <stdlib.h> _wcstol_l <stdlib.h> or … Read more

[Visual C++] 문자열에 대하여 – 유니코드, 멀티바이트

가끔 프로그램을 만들다 보면 코드상으론 한글을 잘 표시했는데, 실행시켜보면 한글이 깨져있는 경험들이 있을겁니다. 프로그램뿐만 아니라 파일에서도 분명히 한글로 저장했는데 메모장으로 열었을 때 한글이 저장되어있지 않은 경우도 있구요. 최근엔 프로젝트 생성하더라도 유니코드로 기본 설정 되는데 가끔 개발을 하다보면 멀티바이트, 와이드캐릭터 등 이야기를 할 때가 있습니다. 초기에 컴퓨터가 만들어졌을 때엔 컴퓨터는 단어 그대로 compute, 수치 연산을 하기 … Read more