2012.09.21 17:23 Web

[+] Introduction



토렌트가 이 땅에 널리 퍼지기 전에 


태초에 와레즈, 당나귀, 프루나가 있었다. 


모든 남성들의 벗이었던 그들이 빛을 잃어갈 무렵


웹하드라는 자가 나타났으니 사람들은 지금까지 경험하지 못해본 그의 속도에 감탄을 금치 못했다.


이에 사람들은 너도 나도 웹하드를 사용하여 세상은 곧 대 웹하드 시대를 열게 되었다고 한다.




는 몇년 전 이야기


하지만 토렌트는 시드 유지가 안될 경우 전송 속도가 급격히 떨어지는 관계로


업로더만 자료를 가지고 있더라도 항상 풀 속도를 유지하는 웹하드는 그 메리트가 있습니다.


그래서 아직도 수많은 웹하드가 명줄을 유지하고 있죠.


아, 잘못 말했네요. '돈을 쓸고 담고 있죠' 


어쨌든..  웹하드에 올라오는 자료가 많고 사용자가 많아질 수록 서버는 그 부하가 커지게 됩니다.


그래서 웹하드 업체에서 생각해낸 것이 분산 컴퓨팅 , 그리드 시스템 입니다.


이 그리드 프로그램은 설치된 pc의 리소스 일부를 사용하여 서버 부담을 덜어준다고 하죠.


이 그리드가 얼마나 욕심 많은 프로그램인지는 차차 설명드리겠습니다. 


사실 그리드 컴퓨팅의 그리드는 grid, 욕심은 greed 입니다만 웹하드 그리드는 후자에 가깝다고 할 수 있겠네요.




[+] Procedure


 

1. IE to Download program


B 모사의 그리드 프로그램을 기준으로 말씀드리겠습니다.



만.. 웹하드 프로그램은 다 거기서 거깁니다.


앞글자 하나 바꾸고 다른 이름으로 서비스 하는게 태반이에요.


웹 페이지 소스 보시면 다른 사이트 이름이 떡하니 찍혀있는 일은 태반이고


프로그램 뜯어보면 더 장관이죠.


대부분의 웹하드 프로그램은 아래와 비슷한 동작 방식을 가진다고 말씀드릴 수 있습니다.


먼저 다운로드 프로그램은 IE에서 설치한 active X로부터 인자로 id와 pw를 받습니다.

 

pw가 hash 로 가질 않네요.

 

pc에 웹하드 프로그램이 켜져 있을 때 다른 사람이 인자 값을 보면   

 

아 encoding 이라도 된다는 점에서 감사해야 했었나요?

 

로그인할때는 평문으로 가는데 ..

 

엉엉, 내가 미안해

 

 

 

프로그램이 실행되면 Message 를 보냅니다.

 

받을 파일의 이름, hash , 결제 정보 등..

 

한자리에 전부 모이는군요

 

빵.긋

 


2. Downloader

 

사실 Downloader 는  단순히 Reciver 역할을 하기 때문에 별건 없습니다만

 

서버에서 전송되는 Data이외에

 

다른 PC의 Grid Service 에서 날아오는 Data를 받아 하나의 파일로 만드는 작업을 합니다.

 

Data 분산 전송 및 통합 과정은 사실 꽤 그럴듯 합니다.

 

 서버 측과 다른 Client 간의 상호 통신이 잘 되어야 하니까요.

 

 

 

3. Grid Service

 

대망하던 욕심쟁이 서비스입니다.

 

한장의 그림으로 설명하자면 Grid Service는 아래와 같은 작업을 합니다.

 

 

<Fig. Grid Service를 이용한 서버 부하 감소>

 

 

Client 1에서 Grid Service가 동작하고 Client2가 파일 전송을 요청했을 때 상황을

 

좀 더 자세히 나타내면 아래와 같습니다.

 

<Fig. Client-Server 간의 세부 동작 모습>

 

정보를 관리하는 Server와 파일을 전송하는 Server는 다를 수 있겠죠.

 

알고 보면 꽤 효율적인 시스템입니다. [ 업주 입장에서는 ]

 

"많은 부하를 거는 특정 파일을 분산 컴퓨팅을 이용해서 그 부담을 줄인다."

 

Server에서는 Client2가 파일을 받을 때 . 항상 일정한 전송 속도를 보장해주어야 합니다.

 

이때 같은 파일을 가진 Client 들이 많으면 많을 수록 Server가 부담하는 양은 줄어들겠죠.

 

바로 이 부분이 Grid Service에서 사용한다고 하는 사용자 PC의 Resource 입니다.

 

 

[+] Hit!


 

아 ㅎㅎ 여기까지는 이해할 수 있습니다. 다만 조금 넘겨 짚고 가야 할 부분들이 보이는군요.

 

1. 그 분은 항상 내 PC에서 상주한다.

 

 - Torrent 처럼 켰을 때만 공유하고 그런거 아닙니다.

 

 - 업로드 하는 상황 보이는 거 그런거 아닙니다.

 

 - PC 켰을 때 부터 종료할 때 까지 그는 우리와 함께 합니다.

 

 

2. 그는 내 PC에서 '다운로드 받은 파일' 외에 다른 파일들의 정보도 수집한다. [ 상위 폴더, 하위 폴더 몽땅 수집 ]

 

 - 나는 웹하드에서 무한도전을 받았는데 , 다른 상위 폴더에 있는 응슷응.avi 를 수집합니다.

 

 - 이에 해당하는 파일 확장자는 Server에서 받아 필터링 처리 합니다. 확인해보면 대부분 동영상 파일이며, exe , zip 파일도 이에 해당합니다.

 

 

3. 이 녀석은 이 수집한 정보를 다른 Remote PC에 전달한다.

 

 - 모은 정보 List를 Server에 전달합니다.

 

 - 전송할 파일 정보가 오면 그 파일을 읽어 다른 PC에 전달합니다.

 

 

 

4. 이 바보같은 녀석은 쓸데 없는 Query를 너무 많이 날린다.

 

 - File , Directory Query 를 날립니다.

 

 - Network Query 도 날립니다.

 

 - Registry  Query 도 날립니다.

 

 - 각자 다른 Thread에서 쉴 새 없이 날립니다.

 

 - 수집이 끝났다고, 전송할 게 없다고 안심하지 마세요. 그들은 쉬지 않습니다.


 - 저사양 PC에서는 성능 저하 체감이 더더욱 심하겠죠.





 

5. 이 멍청이는 File 정보 수집을 매우 비 효율적으로 한다.

 

 - Linear File Scan을 합니다.

 

 - 한 번 더 합니다.

 

 - 스캔 머겅, 두번 머겅

 

 - 파일 이름 , Hash , Buffer 중 일부를 저장합니다.

 

 [ 웹하드 설치 폴더 가셔서 최신순으로 정렬하시면 dat 파일이 하나 있을껀데 , 그 파일의 사이즈가 Grid 프로그램의 결실입니다.


파일 위치, Size, Hash , Buffer 값이 저장됩니다. 


영화, 영상을 수집하는 분들은 [ 혹은 대부분의 건장한 대한민국 남성들은 ]  크고 아름다운 dat 파일 size를 확인 할 수 있습니다.


PC를 혹사한 흔적이죠. 아아, 크고 아름다워 ]


 

 

여기까지 보면

 

 

 

<Fig. 헐 >

 

 

 

 

약관 어디 구석지에 있는 Resource 들이 이런것들이었군요

 

아 , 이제야 알았다.

 

 

또 하나,

 

Grid Service 는 업데이트가 되면 특정 url 에서 파일을 받아 대체합니다.

 

아마 , 대부분 웹하드가 같은 제조사를 쓰겠죠

 

대한민국 내의 많은 유저들이 쓰겠죠.

 

서버 상태가 좋아보이지 않네요.

 

악의를 품은 검은 그림자가 서버에 접근합니다.

 

한번에 몇 십만 군세를 부리는 군주가 됩니다.

 

 

 

 

 

[+]Conclusion


 

<Fig. 그걸 내 입으로 말하라고?>

 

 

 

 

'Web' 카테고리의 다른 글

Why grid of webhard is so bad?  (3) 2012.09.21
What is Tor?  (2) 2011.02.27
ASP.NET Padding Oracle Attack!  (2) 2010.10.13
I`m on a Chrome!  (0) 2010.09.13
웹브라우저의 춘추전국시대?  (0) 2010.09.13
Catching temporary I.E Files -IE 임시 파일 가로 채기  (5) 2010.08.24
Posted by LinkC

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

2012.07.29 01:54 System

[+] Introduction 


 

생각보다 빨리 글을 쓰게 됐네요

 

잉여력이 자꾸만  상승하는 관계로 위해 간단하고 짧고 가벼운 주제로 올려보겠습니다.

 

 

<Fig0. 호오 잉여력이 상승하는군요>

 

오늘의 주제는 CLSID 를 이용한 파일, 폴더 숨기기 입니다.

 

간단히 말씀드리자면 휴지통을 이용한 방식인데요.

 

이 방법을 이용하면 숨김 파일 혹은 시스템 파일 보기로는 파일을 확인할 수 없으나

 

cmd 창의 dir /A 를 이용하면 가능합니다.

 

이 만들어진 폴더를 복사 할 내부의 파일, 폴더 이름이 노출될 수 있으니 재미로만 보시면 될거 같네요.

 

 

[+] Analysis 


 

새 폴더를 만들고 폴더 명을 다음과 같이 지정해줍니다.

 

"1.{645FF040-5081-101B-9F08-00AA002F954E}"

 

물론 1 대신 아무거나 입력하셔도 됩니다.

 

그렇게 만들어 주시면 휴지통과 같은 모습, 속성의 폴더가 생깁니다.

 

이 휴지통은 해당하는 드라이브의 실제 휴지통과 내용을 공유하고 있죠.

 

 

<Fig1. 어멋, 휴지통이 뙇! >

 

저 폴더 명의 의미가 무엇인고 하니

 

CLSID 이고 우리가 쓴 건 바로 휴지통에 해당하는 CLSID 였던거죠

 

<Fig2. 휴지통의 CLSID 를 확인>

 

이렇게 만든 폴더는 굉장히 특이한 속성을 가지고 있습니다.

 

들어가보면 휴지통과 다를바가 없죠.

 

파일, 폴더 생성 등은 되지 않습니다만..  [ 물론 CreateFile이나 CreateDirectory를 이용하면 가능합니다. ]

 

외부에서 복사가 가능합니다.

 

그냥 드래그를 하면 삭제가 되어버리니 cmd 창의 copy 명령어를 이용합시다.

 

숨김, 시스템 파일은 xcopy 에서 h 옵션을 주면 가능합니다.

 

 

<Fig3. xcopy 명령어를 이용하여 파일을 복사한 모습>

 

이렇게 파일을 복사하고 나면

 

dir 명령어로는 확인할 수 없고 dir /A 명령어를 통해서만 확인할 수 있는 구조가 완성됩니다. [ 숨김 속성을 주었을 때 ]

 

해당 휴지통으로 들어가면 텅텅 비어있어 확인하는게 불가능하구요

 

 

<Fig4. dir 명령어를 통한 파일 확인>

 

일반인은 확인 하기 어렵겠죠?

 

자신의 비밀스러운 파일이나 폴더등은 여기다가 두시면 되겠습니다.

 

물론 누가 폴더 통째로 삭제 할때의 책임은 제가 지지 않습니다 ㅎㅅㅎ

 

 

 

그냥 이런 색다른 방법도 있다구요.. 네..

 

 

 

 

Posted by LinkC

블로그 이미지
LinkC

태그목록

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

공지사항

Yesterday57
Today61
Total309,989

달력

 « |  » 2018.05
    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 29 30 31    

최근에 받은 트랙백

글 보관함


. .