본문 바로가기

reversing/rootkit

(24)
EPROCESS 구조체 [ 프로세스 숨기기_1 ] 간단하게 프로세스를 숨기는 드라이버를 만들고자 이것 저것 찾아보고 있다. 환경 : Windows7 32bit 결과#define Name_Offset 0x16c#define ActiveProcessLinks 0xb8 위와 같은 offset을 가지고 있다가 결론이다. EPROCESS란 커널에서 프로세스를 관리하기 위한 오브젝트이다. 그리고 밑에 보이는 구조체의 모습은 Windows7을 EPROCESS 구조체이다. 프로세스를 관리 할 때 이중 연결 리스트로 관리되어진다. 숨기고자 하는 프로세스 이름이나 PID 값을 찾은 다음 연결 방향만 숨기면 된다. 밑에 굵게 표시한 부분은 프로세스를 숨기기 위해 필요한 요소라고 생각하는 부분을 표시한것이다. kd> dt _eprocessnt!_EPROCESS +0x000 ..
Kernel Debug 준비[windbg] 커널 디버깅 준비 과정이다. Windwos7으로 기본으로 한다. 준비물 : Windbg, Guest PC[VMware windows7] Guset PC에서의 설정이 필요하다. 관리자 권한으로 bcdedit /copy {current} /d "Debug" 수행한다. bcdedit : 부팅 항목의 옵션을 추가, 삭제, 수정을 담당하는 프로그램이다. 현재 Session ID에 "Debug" 부팅 옵션을 복사한다는 의미이다. 복사한 결과 시스템 구성에서 부팅을 확인하면 복사된 Debug 옵션을 볼 수 있다. CMD 창에서 msconfig에서 부팅 옵션을 확인한다. 밑 그림과 같이 수정을 해준다. 여기서 전송속도는 baud rate[보 레이트]이다. 초당 얼마나 많은 심볼[의미 있는 데이터 묶음]을 전송 할지를 ..
장치 노드[Device node], 장치 개체[Device Object] 개념 Device Driver 관련 문서를 읽다 보면 장치 노드, 장치 스택 등 필요한 용어들의 정리가 필요하다.물론 처음 공부할 때 이해보다는 부딪처보는 스타일이여서 막 코딩해보고 파란 화면을 보면서 했지만,전문적으로 공부하고 싶어진 만큼 용어부터 정리하고자 한다. Device node우리가 컴퓨터를 할 때 여러가지 장치들을 사용한다. 장치[Device]라고 하면 다른게 아니라 마우스나 키보드, USB와 같은 것들이 장치라고 말할 수 있다.그리고 운영체제에서는 이러한 장치를 편리하게 사용하기 위해서 PnP[플러그 앤 플레이]라는 기능이있다.*추가 : 레거시 플러그 앤 플레이(Legacy Plug and Play[1]) 또는 줄여서 PnP[2]는 꽂으면 실행된다는 뜻 컴퓨터 실행 중에 주변 장치를 부착해도 별..
Driver 개념 Driver란?운영체제와 장치[마우스, 모니터 etc.]의 상호 통신을 허용하는 소프트웨어 구성요소라고 한다.예를들어 보자.응용 프로그램이 장치에서 데이터를 읽는 경우를 생각 해보자.우리가 Capslock을 켜놓으면 로그인 창에서 켜저있다고 alert가 뜨는것을 볼 수있을 것이다.이 경우, 해당 응용프로그램에서는 운영체제에 구현되어 있는 함수를 호출할 것이다.그러면 운영체제는 드라이버에서 구현한 함수를 호출할 것이다. 해당 드라이버에는 데이터를 가져오기 위해 장치 하드웨어와 통신하는 방법이 구현 되어있다.그리고 Capslock 사용 여부에 대한 데이터를 읽어 올 수 있을 것이다. 위 그림은 간단하게 도식화 해놓은 것이다. 이제 드라이버가 무엇인지 알게 되었다. 그러면 드라이버는 장치[Hardware]와 ..
Anti Disassembly[안티 디스어셈블] Assemble이란?어셈블리 언어를 기계어로 변환하는 것을 말한다. Disassemble이란?기계어를 어셈블리 언어로 변환하는 것을 말한다. 우리가 평소에 사용하는 디버거들도 디스어셈블 tool이라고 할 수있다.기계어를 어셈블리 언어로 보여주니깐! 디스어셈블 tool에도 두 가지 종류가 있다.1. 선형 디스어셈블러 [leaner sweep]2. 흐름 중심 디스어셈블러 [recurisvie traversal]이 두가지이다. 차이점을 알아 보도록한다. 선형 디스어셈블러는 정직하게 하나하나 해석 하는 형식이다.분기문과 같은것을 신경쓰지 않고 그대로 op code만 번역하는 것이다. 흐름 중심 디스어셈블러는 분기문을 확인하면서 해석 하는 형식이다.좀 더 자세하게 설명하면 디스어셈블러가 번역을 하다가.jmp문을 ..
Debug Principle[디버거 구조와 원리] : 디버그 이벤트 디버그 이벤트의 종류에 대해서 검색하다가 알게 되었다.수많은 악성코드가 존재 한다.행위를 분석 할 때, 원본 바이너리를 얻기 힘든경우가 다수 있다.위와 같은 이벤트를 이용한 bp를 잘 걸고 분석하면 좀 더 수월하게 할 수있을것 같다.EX) 새로운 DLL이 로드 될 때, Injection 탐지 유용? 통신을 위한 Thread를 생성 되었을 때 언패킹 할 때, 메모리에 풀리는 데이터를 감지 할 때는 메모리 bpetc ... 1. CREATE_PROCESS_DEBUG_EVENT : 프로세스가 생성되었을 때 발생 2. EXIT_PROCESS_DEBUG_EVENT : 프로세스가 종료되었을 때 발생 3. CREATE_THREAD_DEBUG_EVENT : 스레드가 생성되었을 때 발생 4. EXIT_THREAD_DEB..
요구 페이지 처리[Demanding Page] 앞서 페이징에 관해서 알아 보았다.그러면 이런 페이지가 어떻게 처리 되는지에 대해서 알아보고자 한다.먼저 A라는 Process가 존재 한다. 이 프로세스가 동작하기 위해서는 메모리에 실행되어지는 부분의 페이지 조각이 올라 와있고, 이를 참조하여서 CPU가 연산을 할 것이다. 만약에 정말 만약에. 필요한 자원을 모두 메모리에 올리고 내리고 한다면 Context Swithcing이 발생 할때마다 어마 어마하게 많은 메모리가 IN-OUT을 해야한다.그러면.... OverHead는 이루 말할 수 없을 것이다.여기서 알 수 있는 것은 당시에 사용될 페이지 조각만 메모리에 올라 와있으면 대는 것이다. 이러한 개념이 요구 페이징[Demand Paging] 개념이다.그러면 필요한 페이지 조각만 딲딲 메모리에 올라와 있..
함수 프롤로그 보호되어 있는 글입니다.