Windows memory Read
윈도우즈에서 Visual Studio와 “Windows.h“를 사용해 우리가 다른 프로그램의 메모리를 읽어 원하는 값의 주소를 찾는다.
Flowchart _흐름도
- 윈도우즈에서 작동중인 모든 프로세스에 대한 정보를 표현한다.
- 원하는 프로세스 ID(pid)와 검색하고자 하는 값(value)을 입력 받는다.
- 해당 프로세스가 실행 중인지 확인하고,
모든 메모리읽을 수 있는 주소값들을 불러온다. - 불러온 값들 중 value와 일치하는 값이 있는지 확인하고 따로 저장한다.
- 찾아낸 주소를 반환한다.
Detail _자세히
1. Process List
목적 :: 윈도우에서 실행 중인 프로세스의 리스트를 표시한다.
Class :: PROCESSENTRY32[MSDN] 클래스, TH32CS_SNAPPROCESS 클래스
Func :: CreateToolhelp32Snapshot()[MSDN], Process32First()[MSDN]
PROCESSENTRY32
클래스 변수 pe
를 선언
▶ pe
의 dwSize
를 sizeof(PROCESSENTRY32)
크기로 초기화 시켜준다.
▶HANDLE
형 변수 hSnapShot
선언 후 CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL)
를 대입 해준다. :: 인자로 들어간 TH32CS_SNAPPROCESS는 모든 프로세스를 가져온다는 것을 의미
▶ Process32First
를 통해 pe
변수에 프로세스 정보를 넣는다.
▶ 프로세스의 핸들이 할당 가능 한지 알기 위해 HANDLE
형 임시 변수 proh
를 선언, OpenProcess(/프로세스 모든 권한/, /상속 여부/, pe.th32ProcessID)
을 대입 :: 만약 사용가능한 process
라면 0
이 아닌 값을 반환
▶ pe.th32ProcessID, pe.szExeFile
로 프로세스 아이디와 프로그램 이름 출력
▶ Process32Next
를 통해 pe
변수에 다음 프로세스 정보를 넣는다.
2. Insert pID and Value
“1.” 과정을 통해 표시된 pid 중에서 원하는 프로세스의 pid를 입력
찾을 값을 입력
3. Check memory & Find data
본래 메모리의 권한을 바꾼뒤 작업 후 다시 원래 권한으로 돌려 놓아야한다.
하지만 아직 Virtual_Protect의 사용법을 모르기에 이후 진행하도록 한다.” 읽기 가능한 메모리 주소를 찾기 위해 MEMORY_BASIC_INFORMATION 클래스의 Protect를 사용
▶MEMORY_BASIC_INFORMATION
클래스 변수 mbi
선언
▶ mbi.Protect
중 PAGE_READONLY, PAGE_READWRITE
등 읽기 가능한 메모리 주소만 선정후 찾고자 하는 값과 같은지 비교한다.
▶
4. Save Find data