키보드보안

 | Kernel
2008/04/07 13:55

키보드보안




오늘 모 회사의 키보드 보안 프로그램 때문에 블루 참 많이 떴습니다 -_-
계정 하나 확인 해보려는건데 도무지 로그인을 못하게 하는군요.
열받아서 덤프 떠봤습니다.


사용자 삽입 이미지


이미 편집하기가 상당히 이거 노가다네요 ;; 걍 클릭해서 보세요.
다들 많이 보신 드라이버일겁니다.
어디 루틴이 문제가 되는지 좀더 살펴보았습니다.


사용자 삽입 이미지


dr7 레지스터군요 -_-
무서운 dr7 레지스터를 저렇게 용감하게 갖다 써도 되는지 모르겠습니다.
사실 옛날부터 참 많이도 써먹었던 400h을 강제로 넣는 코드도 그닥 맘에 드는 방법은 아닌데
저 and연산은 뭘 의미하는지 모르겠네요 (대략 디버깅 관련 플래그를 처리하려는 것으로 예상은
된다만.... 아 옛날에 받아놓은 인텔 메뉴얼이 어디갔는지 못 찾겠다는 ;; )

암튼 저 코드로 인해 계속 블루스크린이 발생하고 전 로그인을 할 수가 없습니다.
해킹의 목적이 아닌 정상적인 이용을 위해 저 코드를 런타임 패칭 해 버렸습니다.

사용자 삽입 이미지


오~ 이제 로그인이 됩니다!!
그런데 화면이 넘어가는 순간 또 블루가 뜨네요 -_- (그전에는 에디트라인에 포커스가 오는 순간
리붓 되었다는 ;; ) 머 어쨌든 조금 더 진행됐으니 한 스텝은 밟긴 했군요.
또다시 덤프를 떠 보았습니다.


사용자 삽입 이미지


이번엔 dr2를 건드리는군요 -_- 역시 마음에 들지 않는 코드입니다.
그리고 제 PC를 리붓시키며 하드웨어 생명을 갉아먹고도 있고요.
역시 패칭해버려야겠습니다 (난 오직 로그인을 하기 위한 목적)

사용자 삽입 이미지


몽땅 없애버렸습니다.
이제 로긴을 해봤습니다.


사용자 삽입 이미지


휴 이제 로긴이 됐습니다.

개인적으로 키보드 보안 솔루션들이 디버그 레지스터는 건드리지 말았으면 좋겠습니다.

그걸 보호한다고 해도 아주 큰 효과는 없을뿐더러 (물론 그걸 이용한 키로거가 있긴 하지만)
저런 코드를 넣어봤자 이렇게 쉽게 우회되고 오히려 사용자에게만 더 큰 불편을 야기시키는
것 같습니다.

계정 확인 1분이면 되는것을 키보드 보안 때문에 귀중한 시간을 1시간 반이나 소비했습니다 -_-
그리고 이 글 쓰느라 15분 정도 더 시간을 날렸군요-_-

암튼 인터넷뱅킹 뜰때 혹은 온란겜에서 로긴하기전에 에디트라인에서 커서가 잠시 멈춰 있을
때마다 심장이 철렁철렁 하는 것 때문에 스트레스가 이만저만이 아니네요 (블루뜨면서 작업물이며
코딩해놓은거며 다 날라갈까봐 -_-) 키보드 보안 뜨기 전에 하던거 다 닫고 "이제 괜찮겠지?"
하면서 창 띄우는 것도 참 살기 불편하고요 -_-

이 글은 만약 문제가 된다면 삭제하겠습니다.


2008년 4월.

Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/159 관련글 쓰기

댓글을 달아주세요

  1. 2008/04/07 16:07
    댓글 주소 수정/삭제 댓글
    헛.. 계정확인을 위해서 고생하셧군요 ㅎㅎ
    그나저나. 저런거 저도 좀 알켜 주세요 ㅠ_ㅠ
    • 2008/04/08 21:10
      댓글 주소 수정/삭제
      뭐 보이는 저게 다예요 ㅎㅎ
  2. 2008/04/07 17:16
    댓글 주소 수정/삭제 댓글
    모래반지 빵야 빵야~ㅎ
    drx 건드리지 말란 말야~ㅎ
    • 2008/04/08 21:10
      댓글 주소 수정/삭제
      요즘 왤케 웃겨요 ㅎ
  3. 2008/04/08 00:21
    댓글 주소 수정/삭제 댓글
    오오.. 또 다시 유용함이 증명된 WinHex Kernel 인지..ㅋㅋ
    • 2008/04/08 21:11
      댓글 주소 수정/삭제
      윈디벅으로 해도 되는건데...
      만약 겜 도중에만 올라오는 드라이버라면 윈헥스커널을 써야 했어서 ;
  4. 2008/04/08 01:48
    댓글 주소 수정/삭제 댓글
    전에 게임가드 제거하는 법을 올렷더니 제작사에서 저작권 침해라고 글 지우라고 신고가 들어왔습니다. ㅋㅋ 그럼 제대로 만들던가 그런지^^
    • 2008/04/08 21:11
      댓글 주소 수정/삭제
      후훗, 특정 솔루션명을 그런 상황에 거론하시면 안된다는 ;;
  5. 2008/04/10 15:27
    댓글 주소 수정/삭제 댓글
    비밀댓글 입니다
  6. neo
    2008/09/19 11:22
    댓글 주소 수정/삭제 댓글
    음.. 혹시 우리 회사 제품인가 하고..
    끝까지 읽었다는... 결론은 아니였군요..

    제가 회사를 잠시 외도 햇다가 재 입사를 하고 보니...

    A회사에서 연락이 오더군요... 블루 스크린 A회사제품과 꼬였는지
    블루 스크린 뜬다고..

    저도 덤프를 떳드랬죠.

    dr7 문제 였습니다.

    제가 짠 부분이 아니라서... 귀차니즘으로 인해..
    팀장님 한테 은근 슬쩍 넘겨 버렸습니다....

    으..귀차니즘...
    요즘엔... 집에서 팬티만 입고 코딩 하고 싶다는..ㅡㅡ

    완전 리얼 귀차니즘인가..ㅡㅡ

    항상 멋진 블로그 잘 보고 있습니다.

    항상 몰래몰래 눈팅만 하던 1인..

    ps : 저희회사 제품이 아니라 다행이었다는...
    만약 저희 회사 제품이었으면... 모른척 그냥 있었을 거임 ㅋㅋ
    • 2008/09/21 18:27
      댓글 주소 수정/삭제
      키보드 보안 만드는 몇 안되는 회사 중에
      그중에 dr register 를 쓰는 솔루션은 더 몇 안되는데 ;
      어디 계시는걸까요 ㅎㅎ
      팬티만 입고 코딩하시다가 심심하시면 알려주세요 :p
  7. 2009/07/27 16:29
    댓글 주소 수정/삭제 댓글
    잘봤습니다.
    한가지 질문이 있는데요.

    넥X 모 온라인게임에서 블루스크린문제가 발생하는데,
    (게임 종료시 블루스크린)

    드라이버 파일 이름을 보아하니 , A사의 보안 솔루션인것 같습니다. (EaxxxNT.sys)

    덤프 파일로 봤는데, KeBugCheckEx 함수가 보이질 않네요.
    (있어야 할 자리가 0x0 입니다.)

    KERNEL_MODE_EXCEPTION_NOT_HANDLED 오류인데, 커널모드 프로그램에서 예외가 발생하였는데 , 핸들링 하지 못해서 블루스크린이 발생하였다 라는 뜻으로 알고있는데요


    어떻게 원인을 파악해야될지 감이 안오네요
    혹시 아시려나 해서 질문드려봅니다~
    • 2009/07/29 21:40
      댓글 주소 수정/삭제
      이 오래된 포스트에 댓글을 ;;
      A사에 문의해 보시면 될 것 같습니다 !
  8. 2010/03/26 15:22
    댓글 주소 수정/삭제 댓글
    비밀댓글 입니다

Cheat Engine 5.4 Release

 | Kernel
2008/01/14 16:34

Cheat Engine 5.4 Release





다크바이트가 치트엔진 5.4를 릴리즈했습니다.
많이 안정되고 강력해졌다는데
그나저나 다크바이트가 이제는 svn을 사용하네요? (옛날에 cvs를 쓸때는 정말 짜증 났었다는 -_-)
어쨌든 이쪽 업무 하시는분들 얼른 막아주세요~

Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/103 관련글 쓰기

  1. CheatEngine 5.4 released

    2008/01/14 21:46
    삭제
    CheatEngine 5.4 가 릴리즈 되었네요.Window31 님 포스팅에도 있듯이 처럼 예전엔 cvs 여서 일부러 이넘 받으려고 cvs 를 설치했었는데 이제 svn 으로 바뀌어서 좋네요. ^^이번 업데이트에는 DBVM 이란 녀석이 추가되었군요. 드디어 CheatEngine 에 VirtualMachine 이 들어간것이죠. 오오... 역시 대단합니다.5.3 버전 소스에 보니 vmxhelper 라는 모듈이 있었는데 코드가 없었습...

댓글을 달아주세요

  1. seyool
    2008/01/15 17:45
    댓글 주소 수정/삭제 댓글
    소스가 공개다 보니, 치트엔진은 변종이 정말 많지요 -_-;;
    • 2008/01/22 00:30
      댓글 주소 수정/삭제
      네 덕분에 커널쪽 공부 지대로 했지요 ㅎㅎ
      다크바이트는 정말 천재인거 같아요 ㅠ ㅠ
      머 어쨌든 소스가 공개되면 여러사람이 연구하기 때문에 뚫기 쉽긴 하지만
      막는 입장에서도 어케 뚫는지 보인다는 머 그런건 있죠 ㅎㅎ

WDF : 윈도우를 위한 차세대 통합 드라이버 개발 모델



사용자 삽입 이미지


http://www.yes24.com/Goods/FTGoodsView.aspx?goodsNo=2790181&CategoryNumber=001001003016001004

드디어 나왔네요 WDF 번역본 ㅎㅎ
안랩 선행기술팀의 현역 드라이버 개발자가 직접 번역한 책입니다.
저만 보면 술 사내라고 닥달하는 아저씨인....
각종 드라이버 커뮤니티에서 유명하신 사당최 님이 그 중 한분이 되겠습니다 :)
여름쯤부터 작업했다고 하는데, 다른 번역하신 분들 얘기 들어봐도 그렇고 정말
원서 번역은 생각보다 작업 시간이 오래 걸리는 것 같네요...
뭐 그만큼 훌륭한 번역이 나오면 그걸로 충분하지만요 ^^

어쨌든 WDF 쪽 한글 서적이 아직까지 없었는데 좋은 소식인 것 같네요
현역 드라이버 개발자들이 번역한 만큼 기술문서 번역에서 늘 논란이 되는 문제점들은
없을거라 생각됩니다. 소현우님이 번역하신 WDM도 나쁘지 않았는데 그 이상의 평이
나왔으면 좋겠네요. 아 아직 책은 안 사봤습니다. 내년에 출간 예정이네요 :)

전 아직 WDF 쪽은 별로 안봐서 저도 이 책으로 WDF를 시작할까 하는데...
원서라서 ㄷㄷㄷ 떨고 있다가 지난 가을쯤에 번역하고 있다는 얘길 듣고 기다렸습니다 ㅎㅎ
WDM은 처음 공부할때 너무 이해하기 힘들었었는데 WDF는 그런 부분이 많이 개선되었다니
어쨌든 기대가 됩니다 :)

WDF 쪽도 공부하고 싶으신 분들은 한권 지르세요 ^^
Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/94 관련글 쓰기

댓글을 달아주세요

  1. 2007/12/18 13:50
    댓글 주소 수정/삭제 댓글
    갈수록 공부할게 늘어나는군.. ㅜㅜ
    개발자는 괴로워...
    • 2007/12/18 22:56
      댓글 주소 수정/삭제
      그러게 ;; 그래도 그 맛에 살잖아 ㅋㅋ
      요즘 포스팅 되게 뜸하네?
  2. 2007/12/19 15:34
    댓글 주소 수정/삭제 댓글
    오~ 나오면 바로 질러야 겠네요
    • 2007/12/20 10:38
      댓글 주소 수정/삭제
      이미 원서로 보셨을 거 같은데 ^^
  3. 2007/12/19 16:37
    댓글 주소 수정/삭제 댓글
    아하..-0-ㅋ;;. 설마설마 했는데 사당최가 역시.. 그분이었나봐요;;ㅋㅋ
    Windows via C/C++ 요건.. 언제쯤 번역본 나올라나;;
    • 2007/12/20 10:38
      댓글 주소 수정/삭제
      응 그분 맞다 ㅋㅋ
      그 번역은 누가 하는데?
  4. 2007/12/23 16:23
    댓글 주소 수정/삭제 댓글
    오옷 -_+ 사당최님!
    • 2007/12/26 17:10
      댓글 주소 수정/삭제
      그분이죠 ㅎ

WinHex Kernel

 | Kernel
2007/11/24 00:50

WinHex Kernel



사용자 삽입 이미지

저는 파일이나 메모리의 바이너리를 read/write 할 때에 WinHex라는 넘을 자주 사용합니다.

UI도 보기좋고 메모리도 열 수 있으며 바이너리를 덤프도 떠주며 필요한 부분만 BYTE 타입으로
빼주는 기능도 있기 때문에 바이너리 뷰/에딧 프로그램으로는 최고라고 생각합니다.

이 툴에게 아쉬운 부분은 커널단의 메모리는 컨트롤하지 못한다는 것입니다.
물론 windbg가 있고 걔를 띄워서 원하는 작업은 다 할 수 있지만, 머 그렇게치면
olly가 있으니 winhex는 필요없는게 아니냐는 생각이 될수도....  :(

암튼 커널단의 메모리 영역을 컨트롤 해주는 WinHex같은 플그램이 없어서 걍 하나 만들었습니다.
갠적으로 이런게 무쟈게 필요하기도 했고요
누군가 만들어주겠지아마....하고 오래전부터 생각해서 안 만들고 있었는데
제가 바보라 못 찾는건지 보이질 않아서 결국엔 걍 대충 구현했습니다
기본적인 인터페이스도 비슷하고, 기능도 비슷합니다 (근데 WinHex라는 이름을 써도 될랑가 ㅋㅋ)

*) 기능
1. Enum Driver List
2. 커널영역 Read (All Dump & extract BYTE variable)
3. 커널영역 Write (=Kernel Patch)

대충 작업은 다 됐는데 아직 업로드를 못하는 이유는 일단 2003에서 전혀 테스트를 안해봤기 땜시..
머 이 드라이버는 원시적인 코드가 대부분이라 os 가릴일은 없을 걸로 예상되지만...
예전 업무할때 리부팅 문제로 끔찍한 기억이 하도 많아 걍 마음이라도 놓기 위해 ㅋㅋ

사실 드라이버로 만든 플그램은 그게 젤 짱납니다. 어쩌다가 누구피씨에서 리붓이라도 나면
것참 엿같은거 만들어놔서 리붓이나 시키네 라는 말부터 듣게 되기 땜시 ;;

필요하신 분이 있을지 모르겠지만 어느정도 마물이 되면 함 올려보겠습니다.


Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/83 관련글 쓰기

댓글을 달아주세요

  1. 2007/11/24 14:21
    댓글 주소 수정/삭제 댓글
    드라이버 작업하면서 가장 겁나는게 리부팅이지요... ㅜ_ㅜ...
    저는 2000, XP 호환되는 드라이버를 만들었던 적이 있는데, 고생을 아주 제대로 했습니다.

    프로그램은 멋진 것 같네요. 기대하겠습니다. ^^)/~
    • 2007/11/26 13:14
      댓글 주소 수정/삭제
      ㅎㅎ 드라이버 쪽 잘 하시니 역시 공감하고 계시네요 ^^
  2. 2007/11/24 15:51
    댓글 주소 수정/삭제 댓글
    호오;;; +_+
  3. Dual
    2007/11/25 12:22
    댓글 주소 수정/삭제 댓글
    ㅎㅎ호오 기대되는군요?
    • 2007/11/26 13:15
      댓글 주소 수정/삭제
      별 시덥잖은건데요 ㅋㅋ
  4. 2007/11/25 22:28
    댓글 주소 수정/삭제 댓글
    오.. =_= 역시 포스가 느껴지는군요 ㅋㅋ
    기대됩니다 +_+!!
    • 2007/11/26 13:15
      댓글 주소 수정/삭제
      포스는 무신 ㅋㅋ
  5. 2007/11/26 16:46
    댓글 주소 수정/삭제 댓글
    오홋.. 기대기대 *^.^*
    • 2007/11/27 00:55
      댓글 주소 수정/삭제
      저도 퇴근후 밤에 만화책보는 시간 줄여서 하루 30분씩 코딩을 ㅎㅎㅎ 이런 속도면 주말이나 되어야 완성할수있을라나 ㅋㅋ
  6. 2007/11/27 11:30
    댓글 주소 수정/삭제 댓글
    오우~ 뭔가 있어 보이는... :)
    • 2007/11/28 10:51
      댓글 주소 수정/삭제
      전혀 없다 ㅋ
  7. jeeyou
    2007/11/27 13:41
    댓글 주소 수정/삭제 댓글
    역시 멋지십니다. 내공이 충만하셔서 기대되네요.
    • 2007/11/28 10:51
      댓글 주소 수정/삭제
      아이구 갑자기 웬 비행기를 태우십니까 ;;
  8. 2007/11/28 10:38
    댓글 주소 수정/삭제 댓글
    쓸만한 툴이 나올듯한데요.. ㅎㅎ
    • 2007/11/28 10:52
      댓글 주소 수정/삭제
      그렇게 봐주시니 감사합니다 ^^
  9. 2007/12/01 02:03
    댓글 주소 수정/삭제 댓글
    오오~ 기대됩니다. ^-^)/~ 상당히 괜찮아 보이는군요 >ㅁ<;)/~
    • 2007/12/03 09:31
      댓글 주소 수정/삭제
      두번씩이나 글을 써주시는 ^^;;

windbg 6.8.4.0 release

 | Kernel
2007/10/26 12:47

windbg 6.8.4.0 release



windbg가 6.8.4.0 으로 업데이트 되었습니다.
저번주 얘기네요 :)

아래는 다운로드 링크 입니다.
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/71 관련글 쓰기

댓글을 달아주세요

  1. 2007/10/28 10:47
    댓글 주소 수정/삭제 댓글
    wlrwjq Ehsms rkswjq wjrdmfh anfdj qhtlf fuqslRk?!

    good luck and good mornig!!!!

    may the force be with you~*

    ^_^
  2. 2007/10/29 09:52
    댓글 주소 수정/삭제 댓글
    hi
  3. 2007/10/29 10:13
    댓글 주소 수정/삭제 댓글
    또 버전업 되었군요. ^^
    왜 WinDbg 는 자동업데이트 같은거 안되는지.. 되면 좋을텐데 말이죠.
    좋은 정보 감사합니다~ :)
    • 2007/10/29 18:42
      댓글 주소 수정/삭제
      흐흐 전 갠적으로 버전업 안되는 것을 더 좋아한다는 :)

IceSword 1.22 Beta3 Release

 | Kernel
2007/07/10 17:33

IceSword 1.22 Beta3 Release




IceSword 1.22 Beta3 Release


IceSword download 아래 클릭



사용자 삽입 이미지

IceSword 1.22 버전이 릴리즈 되었습니다.

http://pjf.blogcn.com/index.shtml <- 개발자 홈피 입니다.


일단 크게 달라진 점은 Advanced Scan이라는 기능이 들어갔네요. 버튼을 눌러 스캔을 해보면,
거의가 Hooking Check 인 것 같습니다. 후킹된 부분을 좀더 상세히 그리고 다양하게 분석하여
출력물을 내줍니다.

후킹의 종류도 다양하게 Inline code modified (overwrite hook 이라고 이해하셔도 됩니다),
Table Hook (IAT, EAT - include kernel level) 뭐 다양하게 분석해줍니다.

말은 어드밴스드 스캔인데 Memory Scan 이라고 표시하는것도 맞을지 나을지도 모르겠군요. :p

하지만 일반적인 후킹이라고 또 할 수 없는것이,,, 보통 일반적인 Hooking check 솔루션은
최초 5byte정도만을 체크하여 후킹여부를 조사하는데, 이 Advanced Scan에서는 각 펑션의
전체 덤프를 떠서 비교하는 것 같습니다. 타겟의 entry point 부터 앞에만 대강 비교하는 것이
아니고 전체 펑션을 full compare 를 하여 달라진 len 길이까지 정확하게 비교해줍니다.

사용자 삽입 이미지

따라서 Advanced Scan에서는 기존 SSDT 버튼이 있는것과는 별도로 SDT Hook check 를 또
하게 되는데요, 기존 기능에서는 후킹된 모듈 나열에서만 그쳤지만 새 기능에서는 역시 좀더
확장적으로, original byte와 메모리 상의 byte를 비교해서 보여주고 실제로 달라진 len 길이까지
표시해줍니다  

참고로 Advanced Scan은 화면 길이가 맞지 않아 버튼이 짤리므로 Small Icon으로 바꾸신후
보셔야 할 겁니다 (좀 짱나네요 ㅎㅎ)

근데 스캔하고 있다고 표시를 해주던지 프로그레스바를 보여주던지 했으면 좋겠는데,,, 아무런
진행UI가 없어서 계속 클릭질을 하고 있었네요 -.- 메시지박스 나올 때까지 기다려야 합니다 ;;

사용자 삽입 이미지

기존 Rootkit Detector들이 ntoskrnl 분석 중심이었지만, 사실 방화벽 bypass 등에 ndis.sys나
tcpip.sys도 루트킷들이 많이 후킹을 해댔죠, 역시 깔끔하게 분석을 해줍니다 (화면은 룻킷은
아니고 사이게이트 ㅎ )

그리고 유저 레벨도 분석을 해줍니다 overwrite hook은 물론 IAT와 EAT 훅 까지 모든 프로세스를
점검 해주네요

사용자 삽입 이미지


그밖의 달라진 기능은, 2003/VISTA용도 호환을 시킨 부분입니다. 드디어 해당 OS의 드라이버도
제작했나봅니다 (기존에는 VISTA는 물론 2003에서도 일부 동작하지 않던 경우가 많았죠)
물론 64비트용은 아직 힘들겠죠 ㅎㅎ Signing 문제도 있고...

SDT Resotre버튼도 있던데 눌러보진 않았습니다 (혹시나 리붓이 무서웠던 것일까요? ㅋ)

대략 중요하다 싶은 기능을 함 정리해보았습니다. Find Module같은거야 별거아닌 패치니까 따로
설명 드리진 않겠고요, 어쨌든 지금까지 IceSword가 놓치고 있었던 커널의 각종 주요부를
체크해줄 수 있다는 부분에 역시 또 좋은 기능이 추가된 것 같습니다

이제부터는 지금까지 IceSword Bypass로 쓰였던 Cm...시리즈의 레지스트리 히든이나,
IRP Hook 등을 체크해볼 수 있을 것 같습니다, 아쉬운 점이라면 걔들을 선별적으로 Restore할
수 있는 기능도 있었으면 좋을텐데 그게 좀 아쉽네요(한넘 원복화 시키려다가 다른넘 때문에
계속 블루뜨면 ㅠ ㅠ)

GameGuard와 동시에 실행될 때는 어떤식이 될 지 많은분들이 궁금할 수도 있을 거 같은데, ㅎㅎ
전 아직 해보진 않았고요, 글을 읽어보시는 분들이 직접 해보시는게 좋겠네요 전 별다른 코멘트는
남기지 않겠습니다 :p

간단하게 사용해본 소감문입니다 써보다가 혹시 또 잼난게 발견되면 추가로 내용을 작성해보도록
하겠습니다 ;)




Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/28 관련글 쓰기

댓글을 달아주세요

  1. 꿀딴지
    2007/07/11 14:28
    댓글 주소 수정/삭제 댓글
    내가 어제 준거네 ㅋㅋㅋ
  2. 2007/07/18 01:55
    댓글 주소 수정/삭제 댓글
    일주일만 힘냅시다 홧팅 ;
  3. 스토커
    2007/07/23 12:18
    댓글 주소 수정/삭제 댓글
    얼음칼이 드디어 업글을
  4. 2007/08/10 00:53
    댓글 주소 수정/삭제 댓글
    집 컴터에 없어서 다운받아 갑니다 ^^

드라이버 언로드의 고뇌




회사에서 요즘 만들고있는 넘이 Core 2 Duo에서는 중간에 한번씩 다운되는 현상이 있어
그걸 금욜내내 디버깅하다가 실마리를 겨우 찾게 되어... 그러나 퇴근시간이 되어 :)
작업물을 집에 갖고 와서 마저 하고 있는데,,,

갑자기 unload가 제대로 되지 않는 현상을 발견했다.

어느 순간부터일까 ;;; 집이라 svn의 로그를 찾아볼수도 없으니 대략 난감... 혹시 그전까지의
테스트도 다 드라이버가 언로드 되지 않은 상태에서 계속 예전 드라이버로 테스트 되었던게 아닐까
하는 의구심이 들며, 디버그 로그도 제대로 확인하지 않은 내 자신이 한심해지기 시작했다.

어쨌든 unload 실패에 대한 이유는 찾아야했기에 이런저런 삽질을 계속 하고 있었는데...
뭐 그동안의 코딩 내용으로는 unload가 되지 않을 이유가 없다... 계속 미궁으로 빠진채 오리무중...

혹시 드라이버 로드에 문제가 있지 않을까 싶어, ZwLoadDriver로 올리던 것을
서비스 모드로 바꿔서 드라이버를 올려보았다... 그래도 실패...

혹시 그렇다면 언로드 자체에 문제가 생긴걸까? DriverEntry에서 DriverObject의 UnloadDriver의
포인터를 확실히 전달해 주었음에도 별도로, IRP_MJ_CLOSE 에서 ZwUnloadDriver를 다시 한번
러 보았다(구글링을 하다보니 그런 희안한 방법도 있길래) ... 역시 안된다....

뭐가 문제일까... 계속 삽질을 하다가 결국 문제를 찾아냈다...

문제는 S.O.U.R.C.E.S 파.일.이.었.다.

DRIVERTYPE=WDM 이게 붙어있으면 Unload가 되지 않는다. 왜지 -.-?
일단 문제의 발단은 작업물을 갖고오다가 soruces파일이 없어서 갖고있던 예제소스 암거나
복사해서 include랑 sources경로만 수정해서 만들었던 것이 화근인데, 암튼 저거 한줄 넣었다고
왜 언로드가 안되는지는 무식한 나는 모르겠따 -.-

한번 그래서 간단한 기본 골격만 갖춘 예제 드라이버를 만들어서 같은 소스에다가 하나는
DRIVERTYPE=WDM를 붙히고 하나는 붙히지 않은 채 build를 해보았다. disassembling해서
비교해 보았지만, 코드상의 변화는 없다. 단지 DRIVERTYPE=WDM를 붙히지 않았을 때의
(반대였던가 기억이 안 난다 ㅋ ) 중간에 할당된  공간이 더 많이 있었다는 것..

이 차이가 무슨 심오한 의미가 있기에 언로드의 존립 여부를 결정해 주는 것일까..

어쨌든 이짓을 하느라 만화책을 보아야 할 귀중한 토요일 오후 시간을 가뿐히 날려먹었는데...

머 sources파일 때문에 이런 오묘한 차이가 생긴다는 사실은 알게 되었다... 더 나아가서
드라이버 타입에 wdm을 붙히면 왜 언로드가 안되는지 그건 정말 모르겠는데, 왜 그러는지
가 좀 알려줬으면...;;

이젠 콘솔에서 빌드하지 말구 익숙하지 않더라도 닷넷2003이상으로 바꿔야겠다는 생각이 든다..


2007년 5월
Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/11 관련글 쓰기

댓글을 달아주세요

windbg로 커널영역 메모리 덤프뜨기




드라이버를 분석할 때, 1394디버깅을 할 떄는 머 별로 상관이 없겠지만, 디버깅을 하는 그 순간
말고도 별도로 파일 자체가 필요할 때가  있다. 파일을 디스어셈블링 하던가 hex compare등을
하던가 머 상황은 다양한데, 일반적인 경우는 머 babo.sys 형태로 파일이 current 폴더 혹은 driver
폴더에 있을텐데 뭐가 문제냐 하겠지만, 요즘은 드라이버를 올린 후에 지워버리는 것이 또 하나의
추세라 (물론 FILEMON 등은 예전부터 그렇게 하긴 했지만) 그렇게 하는 넘들에게 드라이버
파일을 뽑아내기가 쉽지 않을 때가 있다.

어쨌든 그래도 적어도 드라이버가 올라가는 타이밍을 알고 있다면 나름 획득하는 꽁수가 있다.
하지만 이미 올라가 있는 경우 혹은 언제 올라가는지 알 수 없을 경우 (특히 루트킷 같은 넘들이나
커널모드에서 돌아가는 악성 코드 같은 넘들) 파일을 획득하기가 까다로운 편이다.

하지만 이 때는 커널번지를 그대로 메모리 덤프를 떠 버리는 방법을 쓰면 나름 도움이 된다.
그 방법은? windbg의 .writemem 명령어를 이용한다

먼저 .hh를 통해 헬프 파일을 보자

 

사용자 삽입 이미지


간단하다 .writemem 파일이름 address l 요까지

그럼 한번 직접 덤프를 떠 보자. FileMon의 경우는 드라이버를 올린 뒤 파일을 지워버리니
좋은 마루타가 될 수 있다. 파일몬을 띄워놓고 드라이버 리스트를 출력해 보았다. 메모리상에
드라이버는 올라가 있지만, 실제로 파일은 없기 때문에 리스트 컨트롤에는 0byte로 출력된다.
(TaskInfo에서는 드라이버 이름은 커널번지를 스캔해서 얻지만, 그 파일에 대한 size나 version
등의 세부정보는 파일을 통해서 얻기 때문)

사용자 삽입 이미지


따라서 FILEM.SYS는 이 파일을 로드한 driver 폴더에 가 보아도 파일이 없음은 물론이다. 이넘을
덤프를 떠 보자.

사용자 삽입 이미지

여기가 FILEM.sys가 로드된 커널번지다.

사이즈를 알 수 없으니 무식한 방법을 쓸 수 밖에 없다 :( NEXT를 열심히 눌러서 할당되지 않은
영역까지 가 본다. 거기까지가 FILEM.sys의 영역일 것이다(별로 마음에 들지 않는 방법이다
좀 더 고급스런 방법 없을까요 ㅠㅠ)

사용자 삽입 이미지

요까지다. 그럼 사이즈를 계산해보면,

사용자 삽입 이미지

사이즈는 0x9fff 다. 그러면 그만큼을 덤프를 떠 보자!
c:\에 FILEM_dump.sys 라는 파일로 덤프를 떠 보겠다. windbg의 커멘드창에 다음과 같이
입력하자.

.writemem c:\\FILEM_dump.sys a945c000 l 9FFF


사용자 삽입 이미지


자 이제 C드라이브 루트에 파일이 생겼다. 헤더를 확인해볼까?

사용자 삽입 이미지

흐흐 PE영역이 분석이 잘 된다.

이제 이 파일을 IDA에 넣던, 기존 파일이 있으면 기존 파일과 hex compare를 하던 마음대로
활용하면 된다 :p

단, FILEM.sys의 경우는 ksecdd.sys 를 또 참조하고 있고, 또 이 파일은 메모리 영역을 그대로
덤프 뜬 것이라 ntoskrnl에서 export하고 있는 각종 상대번지와 어드레스 등이 일치하지 않는다.
그래서 함수 콜 부분이 제대로 분석되지 않을 것이다(극복하는 방법은 한번 연구해보세요^^;;)

커널 드라이버도 ImportREC같은 툴이 있다면 좋을 것 같은데 :p

물론 FileMon의 경우는 더 쉬운 드라이버 획득 방법이 있지만 지금은 writemem을 설명하기 위해서
예로 든 것이니 괜한 태클은 걸지 않으길 바란다 (전 주로 악성 코드 분석에 이 방법을 이용합니다)


2007년 5월
Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/6 관련글 쓰기

댓글을 달아주세요

  1. kyh1026
    2010/01/04 14:07
    댓글 주소 수정/삭제 댓글
    유용한 정보 감사합니다.

    출처 밝히고 퍼가도록 할께요 ^^

BLOG main image
by window31

카테고리

분류 전체보기 (272)
Reverse Engineering (21)
C, C++ (20)
Kernel (8)
Guitar (18)
잡담 (74)
etc (6)
who am i (8)
보안 이야기 (85)
Tools (3)
월간 마이크로소프트웨어/.. (28)

글 보관함