매크로 커뮤니티

DuOS : openGL


지니모션 : openGL


윈드로이 : openGL


앤디 : openGL

미뮤 : openGL


녹스(호환) : openGL


녹스(스피드) : DirectX 11.1


블루스택1 : DirectX 9


블루스택2 : DirectX 11.1



원래, openGL을 사용하는 에뮬들과 블루스택1은 후킹에 성공하였지만, 욕심이 생겨

녹스(스피드)모드와 블루스택2도 도전해봤습니다

위에 정리한 글을 보시면 아시겠지만 대부분은 openGL을 쓰지만 

드물게도 녹스(스피드)와 블루스택2는 DirectX 11.1을 사용합니다

DirectX 11 방식으로 후킹할려니 계속 AppCrash가 나길래 IDA 디버거로 모듈을 살펴보니

DirectX 11.1을 쓰더군요. DIrectX10 부터는 Present 함수를 후킹해서 버퍼 데이터를 얻어와야하는데

11과 11.1에서 Present 함수의 파라미터 부분에서 차이가 나더군요

캡쳐 테스트를 해보니 반디캠과 Dxtory는 이를 정확하게 캐치하지만, OBS나 xSplit, 오캠 등은 이를 캐치하지 못합니다






int WINAPI m_Present1(IDXGISwapChain* SwapChain, UINT SyncInterval, UINT Flags, const DXGI_PRESENT_PARAMETERS *pPresentParameters);



int WINAPI m_Present(IDXGISwapChain* SwapChain, UINT SyncInterval, UINT Flags);



위 함수가 11.1의 Present 파라미터 원형이고, 밑 함수가 11의 Present 파라미터 원형입니다

딱봐도 차이가 나는것을 알 수 있네요

저 같은 경우엔 반디캠에서 녹스(스피드)와 블루스택2를 후킹할 때, DX 버젼이 몇인지 확인하고 작업을 시작했습니다

반디캠에서는 DX11이라고 나와있길래, 의심없이 DX11방식으로 Present 후킹을 시도했지만, 계속 원래 함수로 넘겨줄때

AppCrash가 나길래, 슬슬 의심이 가기 시작했고, IDA 디버거를 통해 확신을 얻었습니다



그리고, 바로 DX11.1 방식으로 후킹을 시도했고, 밑 로그와 같이 Present 후킹에 성공하였습니다

테스트 파일은 녹스(스피드)입니다 (블루스택2도 결과가 동일하였습니다)




Injected DLL...

Process Attach

Start Function Initalize

Process ID : 15420

Get HWND success : 1383068

Real SwapChain: 0x905397009053970, 36ECB12E

Calling Hook Present1

SwapChain: 0x905397009053970, 00000001  SyncInterval: 0,  Flags: 150275936

Calling Hook Present1

SwapChain: 0x905397009053970, 00000001  SyncInterval: 0,  Flags: 150275936

Calling Hook Present1

SwapChain: 0x905397009053970, 00000001  SyncInterval: 0,  Flags: 150275936

Calling Hook Present1

SwapChain: 0x905397009053970, 00000001  SyncInterval: 0,  Flags: 150275936

Calling Hook Present1

SwapChain: 0x905397009053970, 00000001  SyncInterval: 0,  Flags: 150275936

Calling Hook Present1

SwapChain: 0x905397009053970, 00000001  SyncInterval: 0,  Flags: 150275936

Calling Hook Present1

SwapChain: 0x905397009053970, 00000001  SyncInterval: 0,  Flags: 150275936





  • 모발러 2016.08.18 17:57

    오 대단하십니다. 

    EndScene을 후킹하는 방법과는 차이가 있나요?

  • 암드래 2016.08.19 15:04
    후킹 방법 자체는 크게 다를게 없지만 차이점이라면, 다이렉트9는 프레임 버퍼를 present를 통해 화면에 뿌려주기 전에 EndScene에서 프레임 버퍼를 출력을 하고 DX 장치를 EndScene에서 곧바로 얻을 수 있고, 이 DX 장치로부터 프레임 버퍼를 얻을 수 있기 때문에 EndScene를 후킹하지만, 다이렉트10 부터는 EndScene가 아닌 DXGI의 swapchain을 이용하는데다가 swapchain을 통해서만 DX 장치를 얻을 수 있기 때문에 present를 후킹합니다
  • 모발러 2016.08.22 14:28
    아 그렇군요... 감사합니다.
  • CoMix 2016.12.13 13:20
    혹시 C#으로 작성된 블택 다이렉트 후킹 예제가 있을까요???
  • 암드래 2016.12.14 15:42
    백업을 하지 않아, 포맷후 현재 제가 제작한 예제는 없고
    다른 사람이 작성한 C#만으로 작성된 예제는 Direct3DHook-master 가 있는데
    이 Direct3DHook-master 예제처럼
    그래픽 작업같은 많은 연산처리를 요구하는 코어 작업은 C#으로 작성하기에 적합하지 않습니다
    (1초 걸릴꺼 4~5초 걸립니다)
    따라서, 후킹용 dll 을 C++로 작성하여 목적 프로세스에 인젝션 한 후,
    인젝션된 후킹용 dll 이 해당 프로세스로 부터 얻어온 버퍼를 C# 프로그램에 전달해주면 되겠습니다
    (타 프로세스와의 값 공유 방법은 공유 메모리, 파이프라인 등 많은데 공유 메모리가 가장 좋습니다)
    (OBS 역시, 공유 메모리를 통해 원본 OBS 프로그램에 버퍼 값을 전달해줍니다)

    저는 후킹 dll 제작시 OBS 소스를 참고하여 제작하였고, 또 공부시 많은 도움이 됐습니다
    (https://github.com/jp9000/OBS/tree/master/GraphicsCapture)

    왜 굳이 후킹을 이용하시려는지는 모르겠지만
    특별한 이유가 아니시라면, 제작하실 때 메모리 누수나, 렉, 자원 해제 등의
    많은 고려를 해야하기에 딱히 추천드리고 싶진 않습니다....
    (하나라도 뻑나면, 프로세스 툭하고 계속 다운됩니다)

    그리고, 얻은 버퍼는 또 공통된 형식으로 재가공(예를 들면 비트맵)을 거쳐야 사용할 수 있으므로
    (다이렉트9,10,11,11.x,12,OpenGL 전부 같은 화면임에도 RAW 버퍼값이 다름)
    다이렉트 이미지 서치보다는 좀 더 느립니다 (물론, ADB보다는 빠릅니다)
    또, 동기식으로 할지 비동기식으로 할지도 문제고요
    (동기식으로 하면, 원본 프로세스 화면이 느려질테고,
    비동기식으로 하면 원본 프로세스 화면은 그대로지만 버퍼를 받는 쪽에서 그 원본 프로세스의
    화면을 따라가지 못하겠지요)
    그래픽 후킹이 다른 화면에 전혀 구애받지 않고, 사용할 수 있다는 점은 매력적이나
    그에 비해 들어가는 노력이 너무나도 큽니다...(배보다 배꼽이 더 큰격)

List of Articles
분류 제목 글쓴이 최근변경 추천
자유 운영 방해 목적의 매크로 관련 글 제재 피카부 2019.09.03 0/0
질문 던전사냥모드 8 LUCEI 2021.08.18 0/0
자유 대구 메이플 통으로 넘겨봅니다. 아코르니 2021.08.17 0/0
자유 내일패치 3 LUCEI 2021.08.18 0/0
자유 블소2 메크로도 나오겠죠? 2 늑대기사 2021.08.18 0/0
자유 오딘 4 LUCEI 2021.08.19 0/0
질문 플이 뭐저?? 세르나 2021.08.18 0/0
질문 오딘 절전모드해제 코드 3 츠카다카즈오 2021.08.25 0/0
질문 NGM 쓰시는분 계시나요? 유오 2021.08.19 0/0
질문 ld플레이어 몇버전쓰시나요? 열심히연습중 2021.08.19 0/0
질문 ld에서 오딘 돌리시는 분 설치 어디서 하셨나요? 2 김뿌뿌뿡 2021.08.22 0/0
질문 맥스타님 던전 매크로 안되시는 분 있나요? 2 디아나키 2021.08.23 0/0
자유 스크립트업데이트 2 LUCEI 2021.08.23 0/0
질문 쿠킹덤생산 매크로 3 애띠 2023.02.24 0/0
질문 ld + PC오딘 동시사용은 안되나요? 사지기 2021.10.06 0/0
질문 LD 오딘 보호조치/정지 관련 질문입니다. 승풍파랑 2021.10.07 0/0
자유 매크로 좀 배워볼려고요 rmflrl 2021.10.07 0/0
질문 카카오토 채널 적용이 안됍니다 1 hdlee 2021.11.08 0/0
자유 오딘 매크로 구라핑크 2021.10.07 0/0
질문 후리기님 질문있습니다. 채자 2021.10.07 0/0
자유 오딘 매크로 가르침 원해요.. 2 치타달려라아 2021.10.12 0/0
Board Pagination Prev 1 ... 377378379380381382383384385 ... 519 Next
/ 519

전체 최신 인기글

전체 주간 인기글