2012.08.04 15:26 System

[+] Introduction 



요즘 날씨 정말 덥네요.

 

컴퓨터 + 냉장고 열기 덕분에 제 방은 사막화 되어 가고 있습니다.

 

아 불지옥이 여기구나 ㅎㅎㅎㅎㅎ


 

<Fig0. 으앙 더워서 쥬금 ㅋ>

 

아무튼 오늘은 ftp나 WebDav 등을 물리 디스크처럼 마운팅 해 주는 프로그램을 분석하는 글을 써보도록 하겠습니다.

 

[ 사실 Driver와 DLL, Service 간의 통신에 초점을 맞췄습니다만 ]

 

그저 통신 방식 등을 알리는 글이라 해당 프로그램에 피해가 가진 않을거라고 봅니다만,

 

만약 관계자 분께서 이 글이 거슬린다고 하시면 바로 내리도록 하죠.

 

소개드릴 프로그램의 이름은 'NetDrive' 입니다.

 

Windows에서는 기본적으로  Network Drive 형태로 마운팅 하는건 지원합니다.

 

하지만 위 프로그램처럼 물리 디스크 처럼 사용하는건 지원하지 않죠.

 

 

[+] Analysis 


 

프로그램 UI 는 과감히 패스 하고 바로 분석 들어갑니다.

 

일단 프로그램을 깔게되면 Service를 설치하게 됩니다.

 

A. Service는 실행파일과 통신할 Pipe [ 단방향 공유메모리 ]를 만듦.

 

B. 프로그램을 실행하면 ndapi.dll이라는 dll을 Load.

 

C. CreateFile 로 A에서 만든 Pipe에 접속.

 

<Fig1. CreateFile로 Service와 통신할 Pipe에 접속하는 모습>

 

D. 프로그램 설치 후에 접속할 Server의 정보를 입력한 후 Connect. [ ftp 나 WebDav 등 사용자가 입력한 주소에 접속을 시도 ]

E. DLL내의 MountDrive 호출.

  

<Fig2. DLL 내의 Export 함수>

 

F. WriteFile을 통해 접속한 Pipe에 접속 정보를 기록. 

 

<Fig3. WriteFile을 통해 Pipe에 접속 정보를 기록하는 모습>

 

 

G. Service에서는 해당 pipe를 계속 감시하고 있다가 정보가 쓰여지면 위 정보에 해당하는 함수를 호출 [위 경우는 Drive Mount ]

 

 

<Fig4. Switch 문을 통해 해당하는 함수를 호출하는 모습>

 

 

H. Drive의 Mount에 앞서 지정한 Server가 실제 동작하는 Server인지 Test Connection을 진행.

 

 

<Fig5. Server 접속 정보를 체크하는 모습>

 

I. Service에서 Driver가 Load 되었는지를 확인하고 Load 되어있지 않으면 OpenSCManger , OpenService를 통해 Driver Load. Drive 명은 ndfs.sys

<Fig6. OpenService를 통해 Driver를 Load하는 모습>

 

J. Load 한 Driver를 CreateFile로 Open

<Fig7. Driver를 CreateFile로 Open 하는 모습>

 

 

K. DeviceIOControl을 통해 Driver와 통신하여 Drive Mount 시도.

 

<Fig8. DeviceIOControl을 통해 Driver와 통신하는 모습>

 

L. DefineDosDevice를 통해 지정한 DriveLetter에 Symbolic Link를 생성

 

<Fig9. DefineDosDevice를 통해 Symbol Link를 생성하는 모습>

 

 

<Fig10. DefineDosDevice함수와 인자가 나타내는 정보>

 

 

M. Netdrive에서는 Service와 통신하며 상태 갱신. [ Logging in… -> Mount Starting… -> Establishing Communication… -> Mounting Driver… -> Setting Volume Lable -> Mount Compelte. ]

 

<Fig11. Service와 통신하며 상태를 갱신하는 모습>

 

 

N. Mount가 완료되고 Explorer를 통해 폴더를 열어줌. 

 

<Fig12. Mount가 완료된 모습>

 

 

O. Disconnect 시에는 UnMountDrive가 호출되고 DefineDosDevice를 통해 해제.

 

<Fig13. UnMount 호출시의 모습>

 

 

Service, Driver, DLL 간의 통신 방식을 정리해보면 아래와 같습니다.

 

 

<Fig14. NetDrive 동작 개요도>

 

 

 재밌네요.

 

이번 글은 Network drive를 Mounting 하는 과정을 분석하기 보다는 Driver와 DLL  그리고 Service 간에 통신하는 방법에 초점을 맞추고

 

써보았습니다.

 

 

[+] Chat 


시원한 곳에서는 졸리고 퍼져서 집에 가서 글 써야징 ★

 

집에서는 덥고 짜증나서 시원한 곳 가면 글 써야징 ☆

 

<Fig. Just like inception!>

 

 

 

Posted by LinkC
이전버튼 1 2 3 4 5 6 7 8 9 10 ··· 29 이전버튼

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday301
Today84
Total298,301

달력

 « |  » 2018.02
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28      

최근에 받은 트랙백

글 보관함


. .