hit counter
[kernel]왜??? ntoskrl.exe를 다시 매핑하는겨??? --'

* 경고 * 다음글을 읽다 미쳐버릴 수 있사오니, 주의하시고 읽든지 마시든지 하시기 바랍니다. 왜냐? 맞춤법 문맥 다 엉망이니까~!!!
img1.png 
컴퓨터프로그램을 지대로 시작한지가 음..그러니까..
컴퓨터에 미쳐보자 라고 생각했던것이...아..그러니까...제가 대학교 2학년 휴학계을 냈을때였으니..1993년...15년 전이네요..
아따..시간 빠르네요... 컴퓨터에 미친다고... 골방에 처박혀...c언어는 말그래도 컴퓨터언어라고 생각하고 컴퓨터야~~어찌고 저씨고
하며... 프로그램잉을 시작했던적이 생각나내요..저희 아버지는 저놈이 친구도 안만나고...이거 이상해진다고 걱정하셨던것이 기억나는군요..
(이러다가 군대에 끌려가긴 했지만,...)
암튼..그때를 생각하면 다시 가슴에 불을 질러 봅니다. ㅋㅋ 이불이 얼마나 올래 갈지 모르겠지만..3일은 가져야 하는데 그래야 3일뒤애 다시 붙이게요..ㅋㅋㅋㅋ

암튼..오늘도 한번 썰(설명?의 단축어 맞나요??)을 풀어보죠~~!!!!!

오늘은...어제.. 구글에서 이것 저것을 찾다가...
아니..phide2 소스를 처다보다...ntoskrl.exe을 커널에 다시 섹션을 만들고 다시 매핑하는 짓을 하는겁니다.
이것 이상하다..ntoskrl.exe는 이미 매핑이 되어 있는데 왜 또 매핑하고 지랄 하는겨(?)라는 궁금해는 겁니다.


그래서, 이것 저것 찾아보니..대충 추측는 대더라구요...

암튼..어제 말입니다.
구글에서 이것 저것 검색하다...다음 블로그에 들어갔죠...
제가... http://coderant.egloos.com/4448775  그랬더니..
취약점을 이용해 계정을 추가하고 권한도 상승시켜주는 프로그램을 소개하고 있었다.

그런데, 이프로그램이 찍어대는 로그가 눈에 들어왔다. 왜냐?? 이놈도 ntoskrl.exe를 다시 매핑했다고 하니 말이다.

img2.png

보이는가 빨간색으로 줄친데 말이다...그런데 이 놈이 드라이버를 가지고 있는겨???? 아님 유져모드에서 하는겨?????
라는 의문이 들었다....

암튼...이런 저런 이야기를 하면 오늘 아침 포스팅은 실패할것 같으니..
오늘은 왜 ??? 왜???? ntoskrnl.exe를 매핑하냐???는 겁니다....
그것은 말입니다.

img3.png <--- 이놈이 답이 아닐까 추측을 하고자 한다.

음...매핑해가지고... 이짓을 했던것이다. KeServiceDescriptoerTable의 위치를 찾았던것이다....

자..문제 나갑니다.

  • <문제1> 루트킷 같은 프로그램에서 ntoskrnl.exe를 매핑하는 짓을 한다. 이 이유에 대해서 정확히 설명한 것은?

    1) 그냥~! 멋지게 보일려구~~!!
    2) ntoskrl.exe안에 있는 각종 심볼들 예를 들면 KeServiceDescriptorTable같은 위치를 찾아내기 위해서
    3) 모르겠습니다.
    4) 그러게 말입니다.


자 오늘도 포스팅 성공~~~!!! 그럼 35살의 육체 나이를 가지고 중3의 정신연령의 미친감자 였습니다. ^^

답은 이글의 마직막에 적어 놓겠습니다. ^^


음..지송합니다. 답은 안적고 저장 버튼을 클릭했었네요.순식간에 거지말장이 블로거가 될뻔 했네요~~~

답은



























2번~!

by 미친감자 | 2008/08/20 09:48 | Inside Windows | 트랙백 | 덧글(3)
[2k-Kernel]OS버전을 알고 싶을때~!

초심으로 살자.~!!!
음..오늘 이런 영감이 떠올랐다.
내가 왜 이렇게 포스팅이 줄었을까? 생각해 봤다.
그런데, 근본적인 이유는 마음에 불이 꺼져버렸기 때문이라는것을 알았다.
음..내가 프로그래머로서 성공(?)하기 위해서는 초심을 잊어서는 안된다는 것이라고 생각이 들었다.

(음..정말 글 못쓰죠... 읽어주시는 분들에게 어떻게 돈이라도 드리고 싶네요--;;;;;;; 부끄러워서요...)

음..다시 초심으로 돌아가 더 열정적으로 포스팅을 하기로 마음먹었다.
사고뭉치 제닉스님 같은 경우도 처음에는 하루에 하나씩 포스팅을 했었다고 한다.

나도 최선을 다해 하루에 하나 이상의 포스팅을 해, 블로그에 방문해주시는 분들에게 어제 본거네 라는 실망이 들지 않게 해야겠다.


음..그런의미에서 어제 본...

lucid7 님(lucid7.egloos.com)의  FindProcess.pdf을 읽으면서 알게된것 한가지만 적고자 한다.

루트킷중에 phide2 라는 녀석이 있는데
이 녀석은 별도의 스레드 스케줄러를 만들어 프로세스를 감추는 기술을 사용하는 아주 아주 기발한 녀식이다.

뭔저 이 녀석이 나올 수 있었던 배경은 이렇다.

Joanna Rutkowskaimg1.png(조안나 루트코우스카[?이렇게 읽는것 아닐것 같은데--;;;암튼.])님이 만든 Klister v0.4란 anti-rootkit이라고 해야하나?? 숨겨있는 프로세스를 찾아주는 툴이다.
이 Klister 는 CPU를 할당 받기 위해 대기하고 있는 스레드리스트를 확인하여 프로세스를 찾아내는 기법이다.
(여기서 잠깐 문제~~!!??.  문제를 함 출제 해보겠습니다.)


<문제1>이렇게 대기하고 있는 스레드 리스트를 기억하고 있는 커널 전역변수가 무었인가?

1) KiWaitInListHead
2) KiReadyQueueIndex
3) KiDispatcherReadyListHead
4) KiReadySummy


답은 맨밑에 있어요 ^^

암튼 phide2란 놈과 klist라는 툴이 라는 것이 있구요...
자 그럼 어제 phide2.zip이라는 소스를 보면서 새로 알게된것 한개만 써보겠다...

오늘은 OS의 버전을 알오는 함수 PsGetVersion()함수에 대해서 알아 보겠다.
다음은  phide2에 있는 소스 PrepareOsSpecificStuff()함수이고 이 함수의 역할은
지원가능한 OS인지 아닌지를 확인하는 함수 있다.
img2.png

PsGetVersion() 의 프로토타입을 보자.

이놈의 역할은

PsGetVersion

 

This function is obsolete in Windows XP and later versions of the operating system. Use RtlGetVersion instead.

PsGetVersion returns caller-selected information about the current version of the NT-based operating system.

음.. XP 이후부터는 지원하지 않는 함수다. --;; 이론 이런것을 포스팅 하다니..지송...암튼. 대신 RtlGetVersion이라는 놈을 지원한다는군요.
PsGetVersion이란 놈은 호출한놈이 선택한 정보를 리턴한담니다.   (선택한 정보라는 말의 의미는 파마리터를 모두 채울필요가 없고 알고 싶은것만 채워서 알수 있다는 말이다. 알겠는가???)

BOOLEAN
PsGetVersion(
PULONG MajorVersion OPTIONAL, <-- 이것보라 OPTIONAL 이라고 써있지 않는가~~~ ^^
PULONG MinorVersion OPTIONAL,
PULONG BuildNumber OPTIONAL,
PUNICODE_STRING CSDVersion OPTIONAL
    );

Parameters

MajorVersion
Points to a caller-supplied variable that this routine sets to the major version of the operating system. This optional parameter can be NULL.
MinorVersion
Points to a caller-supplied variable that this routine sets to the minor version of the operating system. This optional parameter can be NULL.
BuildNumber
Points to a caller-supplied variable that this routine sets to the current build number of the operating system. This optional parameter can be NULL.
CSDVersion
Points to a caller-allocated buffer in which this routine returns the current service-pack version as a Unicode string only during system driver initialization. This optional parameter can be NULL.
서비스팩 버젼을 유니코드로 리턴해준단다...그런데 시스템 드라이버가 초기화 할때만 리턴해준단다--;;; 이론 그럼 시스템 드라이버는 뭐야?? 시스템 드라이버가 아니면 모른다  이건데....음....   

Return Value

PsGetVersion returns whether the system is a checked or free build, as follows: tbody>
ValueMeaning
TRUE (1)Checked build of the oprating system.
FALSE (0)Free build of the operating system.


오~~ 리턴 되는 값이 그냥 성공여부를 나타내는것이 아니다. 오~~ TRUE면, Checked 버젼 FALSE이면 Free 버젼 음...그렇다면
우리가 쓰는 OS는 다 FALSE겠네... Checked버젼을 쓰시는 분도 계시는가??? 음..  Checked 버젼도 MS에서 배포 한다고 했는데...
음.. 궁금해진다. 구글에서 찾아보자... ^^ㅋㅋ 음...못찾겠다...--;;;;;;;;;;;;;;;;;;;;;;;;;;;; 죄송해요...더 열심히 찾아야되는디...암튼..

 음..COMMENT를 보니까... 레지스트리에서 읽으면 된다고 되어 있다....


Comments

PsGetVersion returns the requested information, depending on which optional parameter(s) the caller supplies.

To retrieve the current service-pack number, it is easier and more efficient to make an application-level call within the Win32 environment than to call PsGetVersion during system driver initialization, which then must parse the string it returns at CSDVersion. When the registry is initialized, a driver cannot obtain this string from PsGetVersion, but must read the CmCSDVersionString value from the registry.
 

Requirements

IRQL: PASSIVE_LEVEL  <-- 아... 그리고 패시브 모드에서만 호출되어야 한다.....

Headers: Declared in ntddk.h. Include ntddk.h.  <-- ntddk.h에 정의되어 있단다.

APIScan Requirements

Header: Ntddk.h
Function: PsGetVersion

긁어온곳 : http://msdn.microsoft.com/en-us/library/ms802950.aspx

음...
img3.png음...또 내일 뵈요~~~ㅋㅋ

답)
문제1 - 3) KiDispatcherReadyListHead

by 미친감자 | 2008/08/19 11:17 | Kernel | 트랙백 | 덧글(7)
베이징 올림픽 개막식때 BSOD발생하다.
베이징 올림픽 BSOD

ㅋㅋ

이렇게 역사적인 현장에서  BSOD가 발생하다니..

웃기다라고 해야하나???담당자는 얼마나 간이 떨렸을까???

by 미친감자 | 2008/08/14 17:22 | 엽기개그 | 트랙백 | 덧글(0)
[MFC]toolbar 버튼 enable 시키기
 img2.png 이게...img1.png 이것...
툴바라고 하는겁니다. 그런데...img3.png 이렇게 Disable되어 있는 버튼을 어떻게 하면.. Enable시킬 수 있을 까요?

음.. 인터넷을 뒤졌습니다. 데브피아가 좋더군요.. MFC에 대한 답변은 말입니다.^^ (예전에 했었던것 같은데, 기억이 나질 않더군요..그래서, 다시
찾을 수 밖에요..--;)

img4.png
이게 뭔지는 아시죠? 클래스 위자드~!!! CTRL+W 누르면 나오는 화면(Visual C++ 6.0에서 음..아직 VC 최신을 쓰질 않아서리..--;;)
위 화면서 툴바의 버튼(회색으로 나오는 친구^^ID)의 ID를 선택하면 Message에서 UPDATE_COMMAND_UI를 선택해주면..
자동으로 코딩이 생기고
그곳에..다음과 같이 코드를 채워주면 됩니다.~~
img5.png
이렇게 하면...
img7.png이렇게 보이던 것이 img6.png 이렇게 보입니다.



img8.png
by 미친감자 | 2008/08/12 08:54 | win32 | 트랙백 | 덧글(0)
ROUTE 명령어를 이용한 패킷 흐름 제어하기

오늘은 패킷의 흐름이라고 해야할까? 패킷의 흐름을 제어하는 방법을 알아보기로 하자.

img1.gif
패킷의 흐름.
 
img2.gif

이렇게 랜카드가 여러 개 꽂아 있는 경우 패킷을 내가 원하는 랜카드로 가게 하는 방법말이다.

..간단한다. 이런것을 라우트 (ROUTE)라고 하지 않는가?

Cmd 창을 뛰운 후 “route PRINT”을 쳐보자.
img3.gif 

이 라우트 테이블이 패킷의 흐름을 결정하는 표이다.

 

내가 하고 싶은 것은 210.239.170.XXX IP로 가는 것은 192.168.20.1 게이트웨이로 보내고 싶은 경우가 있다.  이때 다음과 같이 라우트 테이블을 채워주기만 하면 된다.

“route ADD 210.239.170.0 MASK 255.255.255.0 192.168.20.1”
img4.gif 

위와 같이 라우트 테이블에 210.239.170.XXX 로 가는 패킷에 대해 엔트리가 추가되었다.

이렇게 되고 나면, 210.239.170.XXX로 가는 패킷은 192.168.20.1 의 랜카드로 전송이 되는것이다.

알겠습니까??? img5.gif

by 미친감자 | 2008/07/17 09:21 | Network | 트랙백 | 덧글(5)
< 이전페이지 다음페이지 >