본문 바로가기

reversing

(86)
EPROCESS 구조체 [ 프로세스 숨기기_2 ] EPROCESS 구조체에 관해서 전 포스팅에서 알아 보았다. EPROCESS 구조체 [ 프로세스 숨기기_1 ] [http://richong.tistory.com/100] Windows에서 Process가 어떻게 관리 되는지 알수 있으니, 쉽게 숨길수 있다. 간단하게 정말 간단하게 드라이버를 만들어 보았다. 개념을 이해하고 적용해보는데는 좋은것 같다. 실제로 프로세스를 숨기기 위해서는 숨기고 싶은 PID 값을 전달 받아서 숨기는 방법을 사용할 것같다. 위의 그림과 같이 포인터만 변경 해주었다. 환경은 Windows 7 32bit 이다. Dbgview.exe 프로세스를 Target Process로 하였다. 드라이버를 로드하기 전 작업관리자이다. 그리고 드라이버를 로드하고 나서 작업 관리자의 모습이다. Dbg..
WinDBG 명령어 [SXE,sxe] -SYS 분석 기본적으로 커널 디버깅 환경이 구축된 상태로 진행한다. 커널 디버깅 환경 구축 [http://richong.tistory.com/97] 분석 환경:OS : Windows7Tool : PE View, IDA, Windbg, OsrLoader WinDBG 명령어 중에 SXE라는 명령어가 있다. 드라이버 분석할 때 주로 사용되는 명령어인것 같다. 명령어를 익숙하게 하기 위해서 어떠한 명칭으로 사용되는지를 아는게 중요하다고 생각한다. Set Exceptions를 SXE라고 표현한다. 예외를 발생시켜라 라는 의미이다. 명령어의 활용에 대해서 알아 보고자 한다. kd> sxe ld [moduleName] --> moduleName이 로드 될 때 예외를 발생시켜라는 의미이다. --> 예외를 로드 될 때 이러한 이름의..
DRIVER OBJECT 구조체 보호되어 있는 글입니다.
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문을 ..