블로그에서 돌아가는 음악 파일 가져오기
음악이 흘러나오는 블로그가 많습니다. 그런데 아쉽게도 "다른 이름으로 저장" 같은 기능이
없는 관계로 그 음악을 듣고 싶으면 꼭 그 블로그에 방문해야만 합니다. mp3 player 등에
넣은 후 들으면서 다니고 싶어도 그럴수가 없습니다. 좋은 방법이 없을까요?
블로그에 접속한 뒤 울려퍼지는 노래는 사실은 내 컴퓨터 어딘가에 저장되어 있습니다.
파일로 저장되어 있겠죠, 그리고 블로그는 인터넷 익스플로러 프로세스입니다. 자 여기까지
보았으면 무언가 감이 빡 오지 않나요? 파일이라면 handle 이 있을겁니다 !
즉, iexplore.exe 의 handle list 를 구하고, 음악 파일 확장자를 찾아본다면
음악 파일이 어디있는지 알 수 있겠죠, 그것을 나의 폴더로 복사하기만 하면 됩니다.
한번 구현해 볼까요 :)
먼저 iexplorer.exe 의 pid 를 구합니다. 인터넷 익스플로러를 여러 개 띄워놓을 수도 있으니
벡터를 썼습니다.
핸들 리스트를 구하기 위해서는 ntdll 의 api 가 필요한데요, 우리가 써야 할 것은
ZwQuerySystemInformation, ZwQueryObject, ZwClose 입니다.
그리고 몇가지 undocument 구조체가 필요합니다 (아, 더이상 undocument 가 아니죠 ㅎㅎ)
얘네들을 선언해놓을 필요가 있습니다 (인터넷을 잘 찾으면 널려 있습니다)
SYSTEM_HANDLE_INFORMATION,
OBJECT_BASIC_INFORMATION,
OBJECT_TYPE_INFORMATION,
OBJECT_NAME_INFORMATION 등입니다.
이제 갑니다. ZwQuerySystemInformation() 을 사용합니다. 첫번째 인자로
SystemHandleInformation 을 준다는게 요점입니다.
그런데 사실 한 프로세스에 handle 은 엄청나게 많겠죠. 그중에서 우리가 필요한건
file handle 입니다. 따라서 그것만 추려내면 됩니다. 그 속성은 OB_TYPE_DEVICE 로,
OS 마다 값이 다르므로 판별할 필요가 있습니다. 아래는 셋팅 코드입니다. XP에서만
돌아가게 만들거면 강제로 0x1C 로 집어 넣으세요 ㅎ
자 이제 한번 핸들 갯수만큼 루프문을 돌아 볼까요~
고고씽!
Object Type 은 File , Mutant, Event 머 이런걸 가리키는 겁니다.
우리는 당연히 File 만 가져옵니다.
그리고 ZwQueryObject() 를 돌면서 ObjectNameInformation 를 가져옵니다. 이제 수많은
파일 핸들 리스트가 쭈욱 뽑힐겁니다.
근데 경로가.... \Device\HarddiskVolume1\Documents and Settings\.... 이딴식으로
나옵니다. C:\Document and Setting\ 이런식으로 나오면 아주 편할텐데 말이죠...
윈도우즈가 깔린 드라이브를 구해주는 API 아시는 분 혹시 있나요...;
전 무식해서 이렇게 구했습니다.
1. GetWindowsDirectory() 로 C:\WINDOWS 같은걸 구한다.
2. \ 이후의 WINDOWS를 짤라버린다.
3. C:\ 만 남는다.
그것 조차 귀찮으신 분은 이 플그램을 쓰는 모든 유저는 C:\ 에 윈도우즈를 깔아야만 한다 라고
가정하신후 C:\ 로 하드코딩하세요 ㅋㅋ 뭐 돈받고 팔아먹을 플그램도 아닌데요 :)
(아 이런 마인드 진짜 좋지 않습니다 ㅠ ㅠ)
자, 파일의 풀패스가 pOni->Name.Buffer 에 유니코드로 들어옵니다.
음악 파일인지 비교하시고 맞다면 로그 한방 찍어주고~
자 이제 복사하면 끝이죠.
실제로 만들어보니 아주 잘 돌아갑니다.
우우우우우우웁스 0.001 입니다.
실제로 이런식의 구현은 어디 남의 서버에 침투해서 파일을 빼오는게 아니고
그냥 자기 PC 의 어딘가에 숨어있는 파일을 내가 아는 폴더로 복사하는 것 뿐입니다.
따라서 해킹툴 제작과는 전혀 상관없음을 말씀드립니다..
학습/연구 목적이므로 툴과 풀 소스는 따로 베포하지 않습니다.
단지 file handle 을 이런식으로 가지고 놀 수 있다는 것을 보여주기 위해 포스팅했습니다.
쉬운 예를 들기 위하여 블로그에서 음악 파일을 가져오는 것에 비유해 보았고요
file handle, 파고들어보면 재미있는 내용이 많습니다 :)
window31. 2009년 4월
ps
당연히 플래시 파일인 swf 도 가져올 수 있겠죠 :)