'capture'에 해당되는 글 1건

  1. 2010.07.27 Screen Capture with DLL injection (2)

2010.07.27 22:26 System



네 몇몇 분들은 알아보셨을지 모르겠지만

게임 촬영등에 자주 쓰이는 Fraps 란 녀석입니다

어쩌다보니 이 프로그램이 찍는 스크린샷의 방법에 대해 볼 일이 생겼습니다

대략 뒤적거리다 보니 인터넷에서는 이런 소스를 볼 수 있었습니다



문제는 IDirect3DDevice9 인터페이스 참조인 g_pd3dDevice 인데요

보통의 경우 CreateDevice()나 new Device()를 이용하면 됐습니다만

Fraps의 경우, 현재 프로세스에서 대상 프로세스의 Device를 얻어오는 방법이 좀 특이하더군요

화면 전체를 찍는 경우와는 달리 대상 프로세스의 핸들을 얻어와야 했는데

이를 넘기면 오류가 발생합니다

흠 대상 프로세스에서 직접 핸들을 전해주면 해결될텐데 말이죠

Process Explorer로 살펴보다 보니 , 다른 프로세스에 fraps.dll 이 로딩되어 있는 것을 볼 수 있었습니다

 


그러니까 fraps.dll 이 DLL injection 되었다고 볼 수 있죠

아마 Fraps는 fraps.dll 을 injection 하고 대상 프로세스에서 캡처에 필요한 정보를 받은다음

이를 토대로 파일을 생성하는 식일껍니다

실제로 Fraps 를 attach 시킨 후에

kernel32.dll 에 있는 CreateFile에 BP를 걸고 확인해보면

맞다는 것을 볼 수 있죠

그렇다면 Injection 된 dll이 어떤 역할을 하는지

잠깐 살펴보겠습니다

fraps32.dll [ 64bit 에서는 fraps64.dll 이 Injection 되겠죠? ]





뭐 대략 이런 DLL 입니다

아마 Fraps.dll 이 Loading 됨과 동시에 FrapsSetup을 통해서 가능한 Process에 Injection 을 할 겁니다

그리고 Screen shot 이나 동영상 촬영등을 할 때 필요한 단축키들을 잡아내야 하니까

Key Hooking도 하겠죠

의외로 하는일이 많군요

처음보시는 분이라면 ReverseCore님의 강좌를 보고 오시면 좀 더 쉽게 이해하실 수 있을겁니다

http://www.reversecore.com/30

그러니까 요는 Injection 된 프로세스 내부에서 입력된 Key Message 를 후킹한다는 거죠

설정된 키가 아니면 CallNextHookEx 을 통해서 통과시켜주구요

이렇게 잡은 Key 중에서 Screen shot 키를 걸러내서 따라가 보면

다음과 같은 부분을 보실 수 있습니다




OpenFileMapping 이라..

FileMapping는 메모리를 선언하고 선언한 메모리를 두개 이상의 모듈에서 서로 공유하여 사용할 때 쓰는 함수입니다.

기본적인 개념은 메모리를 파일처럼 오픈하고 한쪽에서는 데이터를 기록하고

한쪽에서는 데이터를 읽는 방식으로 데이터를 공유합니다.

서로 다른 모듈이 메모리를 공유할 수 있기 때문에 서로 다른 프로그램에서

데이터를 전송하고 전송 받고자 할 때 주로 사용하고 있습니다.

 즉, Fraps.exe와 Fraps32.dll이 Injection 된 프로그램간에 메모리를 공유하고 있다고 보시면 됩니다.

이를 좀 더 살펴보면 스크린샷 버튼을 눌렀을 때 , Injcetion된 프로그램에서
 
프로그램 내부에서 캡처된 화면의 정보를 Fraps.exe에 전달하고
 
이렇게 모은 정보를 Fraps.exe에서 Createfile을 통해 파일을 완성합니다.


뭐 Fraps는 이런 식입니다

다른 capture 프로그램도 이런 방식을 이용하는지는 모르겠네요

아마 영역을 지정해서 하는 프로그램이라면 DLL injection을 쓰지는 않을 거 같군요 흠흠

이런식으로 Capture를 구현할지는 몰랐네요

정말 배울게 너무나 많군요 :D





'System' 카테고리의 다른 글

Memory protection mechanisms in Windows  (4) 2010.08.17
DLL injection on 64 Bit OS  (2) 2010.08.03
Screen Capture with DLL injection  (2) 2010.07.27
서비스 프로그래밍  (3) 2010.04.27
System Information 을 가져오는 API  (2) 2010.04.21
What is VCP[Virtualized Code Protection]?  (0) 2010.01.29
Posted by LinkC
이전버튼 1 이전버튼

블로그 이미지
LinkC

태그목록

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

공지사항

Yesterday23
Today32
Total330,241

달력

 « |  » 2019.7
  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      

최근에 받은 트랙백

글 보관함


. .