실행 중인 시스템에서 커널 추출

실행 중인 시스템에서 커널 추출

시스템 메모리를 읽어 실행 중인 시스템에서 커널 이미지(bzImage, vmlinuz 등)를 얻을 수 있습니까?

답변1

아니요, 불가능합니다.

기본적인 문제는 커널 이미지가 메모리에 직접 로드되지만 커널이 부팅되면 이미지가 변경된다는 것입니다. 커널은 실제로 프로그램은 아니지만 프로그램이 메모리에 컴파일/로드되는 방식에 대한 많은 규칙이 여전히 적용됩니다.


다음 C 코드를 예로 들어 보겠습니다.

char x=5

int some_function() {
    x=100;
}

첫 번째 줄은 x=5나중에 사용할 수 있도록 숫자 5를 메모리의 바이트에 넣도록 컴파일러에 지시합니다. 프로그램이 실행되면 이 바이트는 다른 모든 것과 함께 메모리에 직접 로드됩니다.

다음 줄은 x=100실행 시 원래 값을 덮어쓰는 기계어 코드를 작성하도록 컴파일러에 지시합니다. 따라서 실행 중인 프로그램을 메모리에서 추출하고 디컴파일하면 다음과 같은 내용을 볼 수 있습니다.

char x=100

int some_function() {
    x=100;
}

실제로 실행 중인 프로그램이 자체적으로 다시 작성되었습니다.


마찬가지로 사용자 모드 프로그램은 다음 위치에 저장됩니다.ELF 형식. 사용자 수준 프로그램을 실행할 때 프로그램 로더는 여러 부분에서 프로그램 이미지를 조합해야 합니다. 커널 규칙은 이제 약간 다르지만 유사점이 있습니다.modprobe실행 중인 커널의 메모리 공간에 다른 파일을 로드합니다.


따라서 커널의 전체 메모리를 덤프하는 방법을 찾을 수 있지만 결과는 실제로 원래 커널 이미지와 많이 비슷해 보이지 않으며 확실히 부팅하기에 충분하지 않습니다.

난 여기서 네가 걱정돼최고옵션은 시스템 관리자에게 가서 사본을 요청하거나 액세스를 요청하는 것입니다.

관련 정보