Windows Memory Read

Windows memory Read 윈도우즈에서 Visual Studio와 “Windows.h“를 사용해 우리가 다른 프로그램의 메모리를 읽어 원하는 값의 주소를 찾는다. Flowchart _흐름도 윈도우즈에서 작동중인 모든 프로세스에 대한 정보를 표현한다.  원하는 프로세스 ID(pid)와 검색하고자 하는 값(value)을 입력 받는다. 해당 프로세스가 실행 중인지 확인하고, 모든 메모리 읽을 수 있는 주소값들을 불러온다. 불러온 값들 중 value와 일치하는 값이 있는지 확인하고 따로 저장한다. 찾아낸 …

[structure]SYSTEM_INFO

SYSTEM_INFO[MSDN] typedef struct _SYSTEM_INFO {     union {         DWORD dwOemId;         struct {              WORD wProcessorArchitecture;              WORD wReserved;         };     };     DWORD dwPageSize;     LPVOID lpMinimumApplicationAddress;     LPVOID lpMaximumApplicationAddress;     DWORD_PTR dwActiveProcessorMask;   …

[Function]VirtualQueryEx

VirtualQueryEx[MSDN] SIZE_T VirtualQueryEx( HANDLE hProcess, LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength ); VritualQueryEx을 사용하여 사용이 가능/불가능한 페이지를 구분할 수 있다. 분석 _In_ hProcess OpenProcess함수 등을 통해 얻을 수 있는 프로세스 handle _In_opt_ lpAddress 프로세스의 Base Address GetSystemInfo함수 등을 사용하여 가져올 수 있다. _Out_ lpBuffer 데이터가 반환되는 M.B.I. 포인터 _In_ dwLength lpBuffer의 크기 Return 함수의 호출이 성공적이면 …

[structure]MEMORY_BASIC_INFORMATION

MEMORY_BASIC_INFORMATION[MSDN] typedef struct _MEMORY_BASIC_INFORMATION {     PVOID    BaseAddress;     PVOID    AllocationBase;     DWORD  AllocationProtect;     SIZE_T    RegionSize;     DWORD State;     DWORD Protect;     DWORD Type; } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; 분석 *BaseAddress Page 영역의 Base Address 포인터 *AllocationBase VirtualAlloc함수의 의해 할당된 페이지 범위의 Base Address 포인터, …

[Function]Windows OpenProcess

Windows OpenProcess Function HANDLE OpenProcess( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId ); 분석 반환: HANDLE = 프로세스를 제어할 수 있는 handle을 반환 (if Error: Return NULL) 인자 설명: [_In_]dwDesiredAccess = 단순 읽기위해선 PROCESS_VM_READ, 단순 쓰기위해선 PROCESS_VM_WRITE, 읽고 쓰기위해선 PROCESS_ALL_ACCESS [_In_]bInheritHandle = 이 값이 TRUE이면 프로세스에 Handle이 상속되며 FALSE면 상속되지 않는다. [_In_]dwProcessId = PID (Process ID)

[Function]Read/WriteProcessMemory

Windows Memory Read/Write Lib Windows Memory Read[MSDN] Memory Read Function BOOL ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead ); 함수명 : ReadProcessMemory 인자명 : hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead 분석 인자명 자료형 설명 비고 hProcess HANDLE [_In_] OpenProcess() 함수를 통해 Process의 메모리를 제어하는 Handle 단순 읽기위해선 PROCESS_VM_READ, 단순 쓰기위해선 PROCESS_VM_WRITE, 쓰고 읽기위해선 …