이 문서는 컴퓨터 RAM의 내용을 읽는 방법에 대한 포괄적인 가이드입니다.
RAM(Random Access Memory)은 모든 컴퓨터 시스템의 중요한 구성 요소이며 시스템 기능을 수행하는 데 필요한 데이터를 임시로 저장하는 역할을 합니다. 그러나 RAM의 내용은 매우 불안정할 수 있으며 일반적으로 시스템이 종료되면 손실됩니다.
RAM의 내용을 보존하는 한 가지 방법은 RAM의 내용을 하드 드라이브와 같은 저장 장치에 복사하는 프로세스인 RAM 덤프를 수행하는 것입니다. RAM 덤프를 분석할 수 있으며 그 안에 포함된 데이터는 덤프가 수행된 당시의 시스템 상태에 대한 귀중한 통찰력을 제공할 수 있습니다.
이 기사에서는 RAM의 내용을 읽는 과정을 안내하고 RAM 덤프가 무엇이며 컴퓨터 시스템을 분석하는 데 어떻게 유용할 수 있는지 설명합니다. 또한 RAM 덤프를 수행하는 방법과 결과 데이터를 분석하는 방법에 대한 단계별 지침도 제공하겠습니다.
왜 RAM 데이터를 읽어야 하나요?
디스크에서 데이터를 읽는 것은 익숙할 수도 있습니다. 하지만 가장 중요한 정보가 저장되어 있는 RAM에서 바로 데이터를 읽을 수도 있나요?
개발자로서 우리는 공간 복잡성을 조사하고 RAM에 대해 더 자세히 조사하여 무슨 일이 일어나고 있는지 이해할 수 있습니다.
RAM의 내용에 액세스하고 읽는 것은 다양한 시나리오에서 유용할 수 있습니다. 일반적인 사용 사례 중 하나는 컴퓨터 시스템 문제를 해결하고 진단하는 것입니다. RAM의 내용을 검사하면 특정 시점의 시스템 상태에 대한 통찰력을 얻을 수 있습니다.
예를 들어, 컴퓨터가 갑자기 충돌하는 경우 RAM의 내용을 조사하면 충돌 원인을 파악하는 데 도움이 될 수 있습니다.
또 다른 사용 사례는 법의학 분석입니다. 불법 행위의 증거를 찾기 위해 컴퓨터 시스템을 조사할 때 RAM의 내용을 조사하면 시스템에서 수행된 활동에 대한 귀중한 통찰력을 얻을 수 있습니다.
예를 들어 보안 전문가는 RAM 분석을 사용하여 특정 프로세스가 시스템에서 실행 중인지 확인하거나 최근에 액세스한 파일을 식별할 수 있습니다.
또한 RAM의 내용에 액세스하고 읽는 것은 소프트웨어 개발자와 연구원에게도 유용할 수 있습니다. 개발자는 RAM에 저장된 데이터를 분석하여 소프트웨어 성능에 대한 통찰력을 얻고 잠재적인 문제나 병목 현상을 식별할 수 있습니다. 연구원들은 또한 RAM 분석을 사용하여 맬웨어의 동작을 연구하거나 새로운 보안 도구 및 기술을 개발할 수 있습니다.
전반적으로 RAM의 내용에 액세스하고 읽는 것은 문제 해결, 법의학 분석, 소프트웨어 개발 및 연구에 유용할 수 있습니다. 이는 컴퓨터 시스템의 내부 작동에 대한 통찰력을 얻을 수 있는 귀중한 방법을 제공하며 문제와 잠재적인 보안 위협을 식별하는 데 도움이 될 수 있습니다.
구체적인 내용을 살펴보기 전에 명칭을 간단히 살펴보겠습니다. 이는 상식일 수도 있지만 이 가이드를 진행하면서 용어를 이해해야 하므로 검토해 볼 가치가 있습니다.
RAM(Random Access Memory의 약어)이라는 물리적 하드웨어 장치가 있습니다. 즉, 물리적 메모리, CPU, 하드 디스크 및 기타 물리적 구성요소가 있습니다.
게다가 운영 체제도 있습니다. 운영 체제는 항상 "커널"이라고 알려진 하드웨어 부분과 대화하며 이는 이 소프트웨어의 가장 중요한 측면 중 하나입니다.
사용자의 관점에서 생각해보면, 우리는 처음에 운영 체제에 로그인하여 작업을 수행할 수 있으며, 그 중 대부분은 응용 프로그램 실행을 포함합니다.
커널이란 무엇인가요?
커널은 뒤에서 실행되는 프로그램의 도움으로 사용자의 명령을 받아들이는 운영 체제의 기본 부분입니다. 이는 우리가 뒤에서 실행하는 프로그램에 관계없이 발생할 수 있습니다.
계산해야 하는 모든 것은 중앙 처리 장치(CPU)에 의해 처리되지만 CPU에서 제공하는 서비스를 어떻게 관리하든 데이터, 명령, 코드 및 프로그램은 모두 RAM(Random Access Memory)을 통해 전달되어야 합니다.
이는 특정 순간에 데이터를 사용하여 수행하는 모든 작업의 결과가 메모리 위에서 사용할 수 있음을 의미합니다. 당신이 프로그래머이고 일종의 데이터 구조를 구축하고 있다면 이는 모든 데이터가 RAM 위에 위치한다는 것을 의미합니다.
RAM으로 직접 이동하여 데이터 구조가 어떻게 생성되었는지, 어떻게 정렬되었는지 확인할 수 있으며 공간 복잡성이 어떻게 작동하는지 확인할 수 있습니다.
예를 들어 Chrome과 같은 웹 브라우저에 대해 논의하는 경우 애플리케이션에 보안 결함이 생성되었을 수 있습니다. 따라서 가장 효과적인 방법은 RAM을 탐색하여 데이터가 어떻게 작동했는지 조사하는 것입니다.
gmail.com과 같은 Chrome(또는 모든 브라우저)에서 보안 웹사이트를 연다고 가정해 보겠습니다. 사용자 이름과 비밀번호를 포함하여 Gmail에 입력하는 모든 정보는 인터넷을 통해 Google이 운영하는 서버로 전송됩니다. 해당 데이터는 완전히 암호화되어 있으므로 비밀번호를 해독하는 것은 불가능하지는 않더라도 어려울 것입니다.
하지만 비밀번호를 입력하려면 키보드가 연결된 컴퓨터를 사용할 가능성이 높습니다. 그 후 일부 프로그램은 데이터를 암호화하여 인터넷으로 보냅니다. 이는 처음에 데이터가 RAM에 존재했음을 의미합니다.
첫째, 비밀번호는 표준 데이터이며 비밀번호는 RAM 상단에 저장됩니다. 그런 다음 일부 프로그램은 데이터를 암호화하여 인터넷으로 보냅니다. RAM에 액세스할 수 있으면 RAM을 검사하여 비밀번호가 암호화되었는지 확인할 수 있습니다. 이 과정은 매우 간단합니다.
이것이 어떻게 작동하는지 보기 위해 예제를 살펴보겠습니다. "a"는 변수이고 "9"는 데이터라고 가정하겠습니다. 프로그램을 실행하면 이 데이터가 RAM에 로드됩니다. 프로그램이 종료되면 RAM의 데이터는 사라지게 됩니다. 하지만 아직 이를 입증한 사람은 아무도 없습니다. 하지만 이는 사실이며 약간의 조사를 통해 이를 증명할 수 있습니다.
그렇다면 이 데이터가 메모리 맨 위에 로드된 경우 애플리케이션 실행이 완료된 후에도 RAM에 이 데이터가 여전히 존재하는지 어떻게 확인할 수 있습니까?
음, RAM에서 이러한 내용이 곧 삭제될 것입니다. "RAM 덤프"는 모든 RAM을 캡처하는 프로세스입니다. 이는 전체 데이터 세트에 접근 가능하고 처음으로 RAM에 로드되는 실제 형태를 보여줍니다. 그리고 다음에는 메모리에서 데이터를 캡처하거나 추출하는 방법을 배우게 됩니다.
이를 달성하려면 어떤 형태의 소프트웨어가 필요합니다. 결과적으로 이 프로그램의 목표는 기억 속으로 더 멀리 여행하는 것입니다. 계속하기 전에 메모리로 이동하여 메모리에 저장된 모든 데이터를 검색합니다.
LiME란 무엇인가요?
LiME라고도 불리는 Linux 메모리 추출기는 강력한 소프트웨어입니다. Linux에서 메모리를 추출하는 데 사용하는 것입니다. 이 소프트웨어 조각은 드라이버라고도 하며 모듈이라고도 합니다. RAM은 장치이기 때문에 상황이 더욱 복잡해집니다.
장치의 내용을 읽으려면 장치에 액세스하려면 어떤 형태의 드라이버가 필요합니다. LiME는 드라이버의 한 예이며, Linux에 익숙하다면 드라이버 기능을 만들기 위해서는 커널의 도움을 받아 해당 드라이버를 로드해야 한다는 것을 알 수 있습니다.
Linux에서는 드라이버를 모듈이라고도 합니다. LiME는 Linux 커널 모듈입니다. 우리는 운영 체제에 모듈을 설치할 수 있는 커널 로드 가능 모듈에 액세스할 수 있습니다.
우리는 배경지식을 충분히 다루었습니다. 이제 RAM의 내용을 추출하는 방법을 살펴보겠습니다. 실습 방식으로 프로세스를 단계별로 살펴보겠습니다.
설정 및 설치
따라서 우리에게 필요한 유일한 것은 LiME 드라이버입니다. 이 특정 모듈을 다운로드할 수 있는 링크는 다음과 같습니다:https://github.com/gursimarsm/LiME.
이제 Linux 시스템을 부팅합니다(저는 RedHat Enterprise Linux를 사용합니다). free -h을 사용할 수 있습니다. 사용 중인 RAM 메모리 양, 사용 가능한 RAM 메모리 양 및 기타 세부 정보를 확인하는 명령입니다. 내 것은 다음과 같습니다:
free -m 실행의 출력 명령
RAM에 액세스하려면 커널이 추가 모듈을 로드할 수 있는 소프트웨어가 필요합니다. 우리의 경우 모듈 이름은 LiME입니다. 따라서 우리가 설치하는 소프트웨어는 'kernel-devel'이라고 합니다. ” 및 “커널 헤더 ". 이 두 가지 소프트웨어는 후속 작업, 즉 LiME 모듈을 사용하기 위해 설치해야 하는 것입니다.
소프트웨어를 설치하려면 "yum"이 구성되어 있어야 합니다. 문맥상 냠 RedHat Linux 운영 체제에 소프트웨어를 설치하는 데 사용할 수 있는 명령입니다. 참고용으로 부록에서 구성 방법을 시연하겠습니다.
설치
이제 해당 소프트웨어를 설치했으므로 GitHub에서 일부 드라이버를 다운로드해야 하므로 소프트웨어가 하나 더 필요합니다. 따라서 아직 Git이 없다면 Git을 설치해야 합니다. yum install git 명령을 사용하여 이 작업을 수행할 수 있습니다. . 또한 작업할 수 있도록 계정을 구성해야 합니다.
# git config --global user.name "Your Name"
# git config --global user.email "you@example.com"
위의 저장소를 공유했습니다. 로드 가능한 커널 모듈(LKM)입니다. 이를 통해 Linux 운영 체제 또는 모든 종류의 언어 운영 체제(Android도 Linux를 기반으로 하기 때문에 Android 장치 포함)에서 전체 메모리를 얻을 수 있습니다.
**# g**it clone**** [**https://github.com/gursimar**sm**/LiME**](https://github.com/gursimarsm/LiME)를 사용하여 모듈을 다운로드할 수 있습니다. 명령을 내리세요.
다운로드한 후 소프트웨어 디렉토리로 이동해야 합니다. 거기에는 여러 개의 폴더가 있습니다. 하지만 메인 코드를 실행하려면 "src" 디렉터리로 이동해야 합니다.
이 디렉토리에는 C 언어를 기반으로 하는 여러 프로그램이 있습니다. 따라서 파일을 사용하려면 해당 파일을 컴파일해야 합니다. 그렇게 하려면 make를 사용할 수 있습니다. 명령. 다음과 같이 설치하세요:
# yum install make
# yum install gcc
/LiME/src/ 디렉터리에서 make를 실행합니다. 전체 코드를 컴파일하는 명령입니다.
오류가 발생하는 경우 최신 버전의 LiME를 사용하고 있으며 orc 메타데이터 생성이라는 새로운 기능이 제공되기 때문일 수 있습니다. 이 기능을 구현하려면 LiME의 일부인 elfutils-libelf-devel을 하나 더 설치해야 합니다. . 아래에서 볼 수 있듯이 yum을 사용하여 그렇게 할 수 있습니다:
elfutils-libelf-devel 설치 방법
완료한 후 이제 make를 실행하면 명령을 실행하면 GCC 컴파일러에게 전체 코드를 컴파일하도록 요청합니다. 컴파일 후에는 커널 개체 파일이라는 하나의 최종 개체 파일이 생성되며, 이것이 LiME의 최종 모듈입니다.
출력
ls을 사용하여 동일한 디렉터리에서 이 파일을 찾을 수 있습니다. 명령을 내리세요.
모듈 사용 방법
이 모듈을 사용하면 커널은 이제 전체 RAM을 캡처하거나 읽을 수 있습니다. 기본적으로 전체 RAM을 한 번에 읽을 수는 없지만 이제는 LiME 모듈 덕분에 읽을 수 있습니다.
LiME 모듈에 대해 자세히 알아보려면 modinfo를 사용하세요. 명령. modinfo를 입력하세요. lime과 함께 . 그러면 파일을 사용할 수 있는 위치와 같은 세부 정보가 표시되고 일종의 추가 매개변수와 함께 제공되는 모든 모듈이나 드라이버도 표시됩니다. 모든 매개변수에는 몇 가지 장점이 있습니다.
수정 정보
여기서는 매우 중요한 두 가지 매개변수인 path를 사용하겠습니다. 및 format .
path 전체 RAM을 읽을 때 RAM의 데이터를 일부 파일에 저장해야 함을 의미합니다. 따라서 생성하려는 대상 파일을 지정하려면 여기에 특정 정보를 제공해야 합니다.
다음 매개변수 format , RAM 데이터를 읽고 싶은 형식을 지정합니다. 그래서 이 경우에는 RAM의 형식을 그대로 읽어보고자 합니다. RAM에 저장된 데이터는 대부분 바이너리 형식이므로 전체 데이터를 해당 바이너리 형식으로만 읽고 원시 형식으로 캡처하려고 합니다.
따라서 형식은 원시 형식이며 경로를 제공하는 모든 파일에 저장됩니다.
마지막으로 RAM에서 데이터를 읽어올 차례입니다. 이제 전체 RAM 읽기를 시작하는 데 도움이 되는 기본 명령을 살펴보겠습니다.
시연
이 데모를 위해 Chrome에 Gmail 계정의 비밀번호를 입력하세요. 이는 RAM에서 데이터를 캡처하는 방법과 비밀번호가 암호화되어 있는지 알아보는 데 도움이 됩니다.
이 두 가지를 확인하려면 명령 프롬프트로 이동하여 데이터가 아직 RAM에 있는지 확인하세요. insmod 명령을 사용하여 특정 모듈을 로드해야 합니다. . 이렇게 하면 모듈을 삽입하는 데 도움이 됩니다.
모듈의 전체 경로를 복사하여 insmod와 함께 붙여넣습니다. 명령을 내리세요.
insmod 명령
이 모듈은 커널의 도움으로 로드됩니다. 모듈은 RAM에서 전체 데이터 캡처를 시작하고 이를 파일(예:myram.data)에 저장합니다.
또한 전체 메모리 덤프 또는 RAM 덤프를 이 파일과 캡처하려는 형식으로 로드합니다. 따라서 형식은 원시 형식이 됩니다.
우리는 이 두 매개변수를 사용할 것입니다(지금은 이에 대해 걱정하지 마십시오). 수행하려면 두 개의 매개변수만 필요하며 이제 이 명령을 누르자마자 우리가 가지고 있는 모든 데이터가 캡처되어 이 특정 파일에 저장됩니다. 이 명령은 일반적으로 CPU 속도와 RAM에 있는 데이터 양에 따라 몇 초 정도 걸립니다.
명령
데이터를 읽는 방법
이제 myram.data 파일이 있고 RAM의 전체 데이터가 이 파일에 저장됩니다. 이 데이터를 원시 형식으로 캡처했기 때문에 데이터는 이진 형식이 됩니다. 인간으로서 이 파일에서 이 데이터를 직접 읽으려고 하면 head 명령을 사용하여 상위 10개 라인 중 일부를 읽으려고 초기 라인으로 시도해도 읽을 수 없습니다.
출력
따라서 전체 데이터를 읽는 "cat" 명령을 사용할 수 있습니다. 그러나 이번에도 같은 일이 발생합니다. 즉, 전체 데이터를 읽지만 데이터는 이진 형식으로 표시됩니다. 그런 다음 이 명령과 함께 파이프 기능을 사용하고 strings라는 또 다른 새 명령과 결합해야 합니다. :
명령
문자열은 데이터를 사람이 읽을 수 있는 형식의 일반 텍스트로 변환하는 명령입니다.
출력
목록은 계속해서 이어질 것입니다. Ctl+C를 사용하여 중단할 수 있습니다. .
지금 당장은 전체 데이터를 보고 읽는 것이 큰 의미가 없습니다. 우리는 RAM에 있는 일부 데이터가 mywebpasswordgmail이라는 비밀번호라는 것을 알고 있습니다. 따라서 이 데이터가 RAM에서 사용 가능한지 확인하기 위해 grep와 함께 파이프를 하나 더 사용할 수 있습니다. 명령. grep 명령은 데이터 정렬에 도움이 됩니다.
cat /myram.data | strings | grep mywebpasswordgmail
이제 전체 데이터에서 이 문자열을 검색하고 있습니다. 데이터를 일반 텍스트로 변환하고, 특정 문자열이 나타날 때마다 grep이 해당 줄을 잡고 검색을 시작한 다음 이 데이터를 표시합니다.
따라서 이 간단한 예에서 볼 수 있듯이 키보드로 입력하는 모든 내용이 RAM에 들어갈 수 있습니다. 비밀번호나 서핑 중인 모든 종류의 보안 사이트라도 데이터는 RAM에 있습니다. 어떤 프로그램을 실행하든 상관없습니다. 키보드를 사용하여 입력하면 모든 것이 RAM에 로드되어 추출될 수 있습니다. 이를 메모리 덤프라고 합니다.
LiME는 다른 많은 강력한 기능을 제공합니다. 현재 우리는 작업을 수행하는 시스템에서 직접 데이터를 캡처하고 있습니다. 하지만 시스템에서 LiME를 실행할 수도 있으며 실시간으로 데이터를 캡처하고 네트워크를 통해 데이터를 다른 컴퓨터로 보낼 수도 있습니다.
이것은 무엇을 의미합니까? 이렇게 생각해보세요. 예를 들어 누군가가 웹사이트를 열고 실시간으로 무언가를 입력하고 있다고 가정해 보겠습니다. 이 전체 메시지는 실시간으로 다른 컴퓨터로 전송됩니다.
우리는 키 로거에 대해 말하는 것이 아니라 RAM에 대해서만 이야기하고 있습니다. 프로그램이 실행될 때 무슨 일이 일어나든 데이터베이스는 일부 데이터를 저장합니다. 프로그램이 하드 디스크의 다른 부분에서 데이터를 읽고 있습니다. 그리고 RAM에서 일어나는 모든 일을 시스템이 실시간으로 캡처하여 네트워크를 통해 다른 컴퓨터로 전송할 수 있습니다.
결론
드디어 이 글이 끝났습니다. 재미있게 즐기시고 새로운 것을 배우셨기를 바랍니다.
저는 항상 LinkedIn에서 제안과 토론에 열려 있습니다. 직접 메시지로 연락주세요.
내 글이 마음에 들었고 나에게 동기를 부여하고 싶다면 GitHub에서 출발을 떠나고 LinkedIn에서 관련 기술을 추천해 주세요.
다음 시험까지 안전하게 지내고 계속 학습하세요.
무료로 코딩을 배우세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 시작하세요