SSDT에 대한 고찰

http://nerd.egloos.com/2723343

며칠전 부터 SSDT에 대해서 유심히 살펴보았고, 변경된 SSDT를 Restore해주는
녀석의 코드를 살펴본 결과를 정리해보고자 한다.

sunwangme라는 사람이 만든 sdtreset 이라는 녀석은 메모리에 있는 SSDT를
디스크내에 ntoskrnl.exe 안의 export된 SSDT와 비교해서 바뀐 부분을 복구시키는
간단한 POC이다.

그런데 한가지 문제는 내가 사용하는 PC에는 현재 KAV(카스퍼스키 백신)이 깔려
있기에 이녀석이 SSDT를 Relocation 한다는 사실이다.
일반적으로 KeServiceDescriptorTable의 Base 주소가 바뀌지 않았을 경우에는
ntoskrnl.exe에서 적절한 값을 찾아내어 복구 할 수 있었다. 하지만 KAV는 이 Base
주소를 ntoskrnl.exe의 바이너리 외부로 빠져버렸기 때문에 아무리 디스크 이미지
내에서 찾으려 해도 불가능하다는 것이다. 대략 난감. ㅠㅠ;

하지만 솟아날 구멍은 항상 존재하는 것~ ROOTKIT에 올라온 기사 가운데
A more stable way to locate real KiServiceTable 이라는 것에서 힌트를 얻게 되었다.
KAV와 같이 KeServiceDescriptorTable을 Relocation하는 녀석들의 경우는 더 Stable
한 방법으로 KiServiceTable의 주소를 알아내는 방법이다.
아래는 KeServiceDescriptorTable이 KiInitSystem()에서 초기화 되는 것을 코드로 표현한
것이다.

    KeServiceDescriptorTable[0].Base = &KiServiceTable[0];
    KeServiceDescriptorTable[0].Count = NULL;
    KeServiceDescriptorTable[0].Limit = KiServiceLimit;
    KeServiceDescriptorTable[0].Number = &KiArgumentTable[0];
    for (Index = 1; Index < NUMBER_SERVICE_TABLES; Index += 1) {
        KeServiceDescriptorTable[Index].Limit = 0;
    }

위와 같은 코드라면 분명 리버싱해보면 다음과 같은 assembly code를 찾을 수 있을 것이다.

C7 05 ..8 bytes..   mov     ds:_KeServiceDescriptorTable.Base, offset _KiServiceTable

위와 같은 인스트럭션은  DLL이라면 재배치가 필요하다. 기준 재배치를 위해서 reloc 섹션을
참고해야만 할 것이다. 그럼 우선 ntoskrnl을 dll로 매핑한 다음에 export 되어 있는
KeServiceDescriptorTable의 주소를 GetProcAddress()로 알아낸다. 그리고 reloc 섹션을
탐색하여 위의 인스트럭션이 존재하는 RVA값을 알아낸다. 인스트럭션이 시작하는 오프셋에서
6을 더하면 그곳이 KiServiceTable의 주소가 될 것이다. 그러면 실제 복구를 할 때 디스크에서
이 주소를 기본으로 하여 각각의 서비스 인덱스에 대한 주소값을 가져온 후에 KAV가 바꿔버린
서비스 디스패처 루틴의 주소를 복구해줄 수 있다는 결론이다.

by narumee | 2008/01/07 10:38 | └Windows Internals | 트랙백 | 덧글(0)

PDA 중국집 사이트 pxdxa.com

PDA 유저라면 꼭 알아야 할 사이트를 소개하고자 합니다.

최근 중국의 인터넷 보급 확대로, 중국의 수많은 네티즌들이 여러 방면에서 두각을 나타내고 있는데요, 대표적으로 느끼는 부분이 미국드라마 자막입니다.


(MissFlash) 미국에서 현지에서 방송후 몇 시간이 되지 않아 중국 네티즌이 작성한 영문자막이 올라오는 것을 보면, 얼마나 대단한지 실감할 수 있습니다. 이렇게 올라온 영문자막을 참고로 한국어 자막도 만들어집니다. ^^; 참고로, 자막을 만드는데는 굉장히 많은 시간과 노력이 들어갑니다. 스크립트를 만들 수 있는 청취능력(Hearing) 뿐만 아니라 자막제작과 함께 싱크도 맞춰야 하니까요...

중국 네티즌들의 도움을 받을 수 있는 또 하나는 바로, PDA분야가 아닐까 생각합니다.

조금만 관심있는 유저라면 알고 계시리라 생각하는 바로 일명 "중국집"으로 통하는 http://www.pxdxa.com사이트 입니다.

이 사이트를 통해 PDA 관련 핫 이슈부터, 최신 소프트웨어 정보... 거기다가 일명 "과자" 로 알려진, 크랙도 쉽게 구할수 있습니다.

하지만, 사이트내의 대부분의 언어가 중국어로 표기되어 있어, 사용에는 불편한 점이 있습니다.

그래서, http://www.pxdxa.com의 사용방법을 간단히 설명하도록 하겠습니다. ^^

1. 사이트에 접속하신 후, 원활한 사이트 이용을 위해 회원가입을 위해 Register 버튼을 누릅니다.

 

2. 가입약관에 동의하냐? 는 질문 같습니다. Agree 버튼을 누릅니다.

 

3. 정보를 입력합니다. 위쪽에 있는 필수입력사항만 입력하면 되므로, 간편하게 끝낼 수 있습니다.
순서대로 아이디(Check username을 통해 중복여부를 확인합니다.)와, 비밀번호, 비밀번호 확인, 숫자코드 입력 및 이메일 주소를 입력하시면 됩니다.

 

4. 가입완료 후, Login 버튼을 누르면 아래의 화면을 보실 수 있습니다. (혹은 자동으로 로그인 될 수도 있습니다. 그럴 경우 바로 5번으로 이동하시면 됩니다.)
순서대로 아이디와 비밀번호를 입력하신 후, 아래 쪽의 빨간 박스를 클릭하면 로그인을 완료합니다.

 

5. 달라진 시작화면을 보실 수 있습니다. Search 버튼을 눌러 원하는 프로그램을 찾을 수 있습니다.

 

6. 위 쪽의 빨간 박스에 해당하는 부분에 검색을 원하는 이름을 입력하고, 아래 쪽의 버튼을 클릭하면 검색결과를 확인할 수 있습니다. 첨부파일은 게시물의 아래쪽에 "Attachment:"라고 표시되어 있습니다. :)

 

* 이제 어둠의 경로를 이용하기 위한 준비를 마쳤습니다.

원본: http://kaist.tistory.com/102
출처 : MissFlash.com, http ://www.missflash.com/
http://cafe.naver.com/m420.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=89

by narumee | 2008/01/04 13:10 | Etcetra | 트랙백(1) | 덧글(0)

64비트 윈도우를 프로그래밍 하기 위해서 알아야 할 모든 것들

http://www.microsoft.com/korea/msdn/msdnmag/issues/06/05/x64/default.aspx#S5

by narumee | 2008/01/03 11:53 | └Inclusion | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶