정보 보안을 위한 메모리 해킹 및 에디팅 공부, 대상 데이터 검색 원리 - Whitmem
정보 보안을 위한 메모리 해킹 및 에디팅 공부, 대상 데이터 검색 원리
개발 기록
2025-07-07 20:14 게시 e4cf0891362e501b17bb

0
0
7
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
우선 개발 기록을 작성하기 전에 앞서, 이 소프트웨어는 오로지 공부 목적으로 개발하며 그 어떠한 법률 또는 윤리에 반하는 목적으로 개발 또는 사용자에게 배포, 서비스, 제공되기 위해 개발된 것이 아님을 밝힌다.
이 소프트웨어는 필자 Whitmem 은 정보 보안에 관심이 있고, 윈도우 커널에서 제공하는 유저 모드 함수를 익히고, 메모리 페이지 분석 및 읽기, 쓰기 처리를 공부하기 위해 오로지 VM 가상 환경에서만 테스트를 진행하고, 타 제작사가 개발한 소프트웨어를 크랙할 목적으로, 또는 특정 게임을 공격할 목적으로 개발한 것이 아님을 고지한다.
이 게시글에 작성된 내용은 윈도우 시스템의 내부 처리 방법 및 WinAPI의 구조를 익히는 과정에서 누구나 시도할 수 있는 것으로, 특정 소프트웨어의 결함을 악용하는 게시글이 아니다.
이러한 고지를 강하게 하는 이유는, 이 소프트웨어를 악용하는 경우 최근 대한민국 법 게임 산업 진흥법에 관한 법의 제32조(불법게임물 등의 유통금지 등) 8항에 반하는 범죄 소프트웨어가 될 수 있기 때문이다.
원래는 메모리 에디팅 자체는 불법이 아니다. 컴퓨터에 존재하는 모든 데이터는 메모리에 탑재되고, 사용자가 입력하는 모든 데이터는 메모리에 삽입되며 편집을 통해 실행된다. 다만 이러한 동작이 당사 소프트웨어가 의도한 대로 제공되는 것인지는 사용자 의도에 달려있다. 해당 소프트웨어가 특정 소프트웨어에 인젝션하는 행위가 분석, 또는 호환성, 보안등의 목적이라면 불법이 아니겠지만, 메모리 해킹, 게임 조작, 순위 조작과 같은 공정한 이용을 방해하는 행위는 영업 방해, 또는 대상 소프트웨어가 게임물의 경우 게임 산업진흥에 관한 법률에 의거 처벌받을 수 있다.
아무튼,
간단한 소프트웨어가 있다. 이 소프트웨어는 C# 기반으로 하나 만들었는데, 5초마다 1씩 증가하는 int 변수를 가지고 있고 상기 int 변수를 label 에 띄워주는 초간단 소프트웨어이다.
두 소프트웨어는 둘 다 내가 만든 것이지만, 각각 다른 프로세스이기 때문에 위 소프트웨어가 이미 실행중인 상태에서 값을 조작할 수 있는 방법은 없다. 이 소프트웨어는 내가 직접 만든 메모리 에디터와는 별도의 프로세스 공간에 존재하며, 직접 접근할 수 있는 범위가 아니다.
다만 윈도우 운영체제에서는 다른 프로세스의 메모리를 읽고 쓸 수 있도록 API를 제공하고 있다. 그리고 다른 프로세스에서 할당된 가상 메모리 영역을 읽어들여 다양한 처리를 수행할 수 있도록 인터페이스를 제공하고 있다.
즉 상기 API를 사용해서 다른 프로세스의 메모리를 다른 프로세스가 의도하지 않았더라도 읽거나 편집할 수 있는 것이다.
무작정 모든 데이터를 바꾸는 것은 아니기 때문에 원하는 데이터가 존재하는 메모리 좌표를 찾아야 한다. 이러한 찾기를 위해 현재 수치를 위해 군집을 줄여나가는 식으로 구현할 수 있다.
즉 변하는 값들을 계속 검색하다보면 해당 int 형 변수가 존재하는 메모리 위치를 찾을 수 있을 것이고 해당 위치를 편집할 수 있게 되는 것이다.
메모리 변조를 위해 단순히 원하는 메모리 좌표만 있으면 해당 프로세스의 특정 메모리 위치에 데이터를 쓸 수 있다. 하지만 여기서는 VirtualQuery를 통해 메모리를 탐색하고, 편집하고자 하는 메모리 데이터가 있는지 찾는 기술이 별도로 필요하다.
에디터를 공부 목적으로 만들다보니, C# 전용이 아닌, C/C++ 언어에서 DLL 라이브러리 형태로 개발하여 C#에서 DllImport 하는 형식으로 구현하게 되었다.
즉 상기 dll 파일이 실제 메모리에 엑세스해서 편집 등을 구성하는 함수를 제공한다.
위와 같은 메모리 변조 방식은 컴퓨터 시스템 처리의 제일 기본이다. 소프트웨어를 안전하게 만들기 위해서는 위와 같은 메모리 변조가 가능하다는 사실을 염두하고 개발해야 한다. 서버에서 검증하는 소프트웨어라면 비교적 안전하지만 클라이언트에서 단독으로 실행되는 소프트웨어는 특히 주의해야 한다.
사용자가 악용하는 경우가 아니더라도 제 3의 소프트웨어에서 무단으로 엑세스하여 메모리를 조작함으로써 시스템에 치명적인 문제를 일으킬 수 있기 때문이다.
그리고 일반적인 소프트웨어를 개발할 때 다른 프로세스에 합법적으로 접근할 때에도 무조건 Read/Write 형식으로 접근하는 방식은 올바르지 않다. 정상적인 엑세스인지 판별하기 쉽지 않기 때문이다. 별개 상태 변수를 만들어 서명, 인증하는 식으로 검증할 수 있겠지만. 매우 위험하다. 항상 메모리를 보호 모드로 보호하고, 공식 API 또는 접근자를 만들어 데이터를 편집하는 것이 맞다.
다만... 위와 같은 기술은 악의적인 목적으로 사용하는 경우만 생각하는데, 보통 시스템을 보호하기 위해 대상 프로세스를 검사하기 위해 엑세스할 수도 있다. 다만 이 경우는 단순히 윈도우 운영체제에서 제공하는 API로는 한계가 있기 때문에, 드라이버 또는 커널단 엑세스를 통해 시스템의 메모리를 검사한다.
필자의 경우 상기와 같은 메모리 보호 처리를 위해 간단한 암호화 구현을 생각하고 있는데,
외부 공격을 막기 위해 단순히 view 용 데이터를 메모리에 복제하고, 실제 데이터는 암호화된 상태로 넣는 것이다. 실제 데이터를 편집하기 위해서는 복호화하고 쓰는 과정이 필요하며, 해당 복호키는 프로그램에 내장하거나 실행 시점에 할당하여 변환하는 식으로도 구현하는 게 어떨까... 라는 생각을 한다.
정보 보안에 관련된 기술을 개발하고 싶어, 메모리 저수준 편집부터 페이징 방식까지 공부하고 있는데, 위와 같이 간단한 검색 및 편집 원리를 제대로 익힐 수 있어 나쁘지 않았던 것 같다.
필자의 경우... 혹시 모른 실수를 방지하기 위해 프로세스를 제한하고 VM 공간에서 윈도우 운영체제를 하나 더 설치하여 내부망에서 테스트하긴 하였으나, 앞으로 고도화된 작업을 위해서는 한계가 있지 않을까.. 생각한다.
댓글 0개
댓글을 작성하는 경우 댓글 처리 방침에 동의하는 것으로 간주됩니다. 댓글을 작성하면 일회용 인증키가 발급되며, 해당 키를 분실하는 경우 댓글을 제거할 수 없습니다. 댓글을 작성하면 사용자 IP가 영구적으로 기록 및 부분 공개됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.