Windows Memory Read

Windows memory Read

윈도우즈에서 Visual Studio와 “Windows.h“를 사용해 우리가 다른 프로그램의 메모리를 읽어 원하는 값의 주소를 찾는다.


Flowchart _흐름도

  1. 윈도우즈에서 작동중인 모든 프로세스에 대한 정보를 표현한다. 
  2. 원하는 프로세스 ID(pid)검색하고자 하는 값(value)을 입력 받는다.
  3. 해당 프로세스가 실행 중인지 확인하고, 모든 메모리 읽을 수 있는 주소값들을 불러온다.
  4. 불러온 값들 중 value와 일치하는 값이 있는지 확인하고 따로 저장한다.
  5. 찾아낸 주소를 반환한다.

Detail _자세히

1. Process List

목적 :: 윈도우에서 실행 중인 프로세스의 리스트를 표시한다.
Class :: PROCESSENTRY32[MSDN] 클래스, TH32CS_SNAPPROCESS 클래스
Func :: CreateToolhelp32Snapshot()[MSDN],  Process32First()[MSDN]

PROCESSENTRY32 클래스 변수 pe를 선언
 pedwSizesizeof(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

 

 

 

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.