2010.08.03 19:24 System

얼마전에 ReverseCore님께서 Windows 7 에서 Injection 하는 방법을 포스팅 하셨죠

얼마전이라기 보단 꽤 됐지만..

http://www.reversecore.com/73

굉장히 정리가 잘되어있으니 한번 보시면 큰 도움이 될겁니다 :D

아무튼 요는 Windows7 에서 Session 관리 정책이 변경되면서

CreateRemoteThread()가 먹히지 않게 되었고

ntdll!ZwCreateThreadEx()를 직접 호출함으로써 해결 할 수 있다는 것입니다

하지만 이 방법도 64bit 에서는 되지 않더군요

64bit OS에 Global API Hooking을 할 때 , 이건 문제가 되겠죠

64bit process를 차근차근히 보시면  , 64bit 에는 64bit dll만 로드 되어 있는 것을 볼 수 있습니다



그림1. 64bit Process 내에 Load 되어 있는 kernel32.dll 의 정보


*32bit process 에서 사용 되는 시스템 dll 의 경우 syswow64 폴더의 dll을 쓰게 됩니다


그림2. 32bit Process 내에 Load 되어 있는 kernel32.dll 의 정보

그리고 이 64bit dll 을 Injection 할 때 32bit Program 으로는 되지 않는 것 까지 확인했습니다


그림3. 32bit Program 에서 64bit dll 을 Injection 할 때 실패하는 모습



64bit dll 을 Injection 할 때는 64bit Program 이 필요한게 아닌가 싶었습니다

64bit 로 컴파일 하여 시도해보니


그림4. 64bit Process 내에 성공적으로 Injection 된 모습

네, 제대로 Injection 이 성공한 것을 볼 수 있습니다

즉, 64Bit Process 에 Injection 을 하고자 하면

64Bit Injection Program 으로 64Bit dll 을 Injection 해야 한다


는 것이 이 포스팅의 요입니다

고로 , Global API hooking 등을 하고자 할 때는

64bit용, 32bit 용으로 나눠

32bit injection program, 32bit dll

64bit injection program, 64bit dll

이렇게 제작해야 올바르게 작동합니다

64bit dll 은 64bit로

아, 어찌보면 정말 당연한 건지도 모르겠지만

처음에 부딪혔을 때는 왜안되나 했네요 :D



How to Compile a 64bit application or dll?

64bit 용 dll 과 application을 얻고자 하신다면

64bit 용으로 compile 하셔야 합니다

찾아보니 대략 2가지 정도가 있던데요

물론 더 있는데 제가 못본거겠지만..

Microsoft Platform SDK 의 64bit Build Enviorment 를 이용하시는 방법과

Visual Studio 2005 이상의 버전을 이용하시는 법이 있습니다

전자의 경우 Visual Studio 6에서도 적용가능한 방법이지만

MakeFile 을 작성해서 64bit Build Enviroment 창에서 Compile을 시키는 형태입니다

필자의 경우 후자의 경우가 더 편해보여서 이를 이용했습니다

다만, Visual Studio 설치 시 별달리 건드린게 없으시다면

64bit Compile Tool 이 깔려있지 않을 겁니다

그런분은 제어판의 프로그램 추가/제거에서 Visual Studio 2005 이상의 버전을 누르셔서

메뉴를 보시면~

다음과 같이 x64 Compilers and Tools를 발견하실수 있습니다

이를 체크하시고 설치하시면 됩니다 :D




이 설정을 해 주셨다면 Visual Studio 를 실행하시고

Compile 시에 상단의



Platform 의 new 부분에 들어가셔서

x64로 설정하시면 됩니다

다만, Compile 시에 64bit 와 32bit 의 차이점은 고려하셔야 겠죠? :D



'System' 카테고리의 다른 글

DLL Hijaking Exploit in Windows Movie Maker  (0) 2010.09.06
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
Posted by LinkC

댓글을 달아 주세요

  1. 나그네 2013.01.23 18:59  댓글주소  수정/삭제  댓글쓰기

    시간이 쫌 지났지만.. 지나가다 답변달겠습니다.
    32bit 응용프로그램에서 64bit 응용프로그램에 injection이 안되는 이유는 syswow64 redirection 때문에 자동으로 SysWOW64 폴더로 접근하게 됩니다. 그러므로 32bit dll들 로드하려고 하니 안되는 것이지요.

    Wow64DisableWow64FsRedirection 함수를 쓰거나
    System32 대신 Sysnative 를 쓰면

    32bit 프로그램에서 64bit 시스템 dll들이 있는 system32 폴더에 접근이 가능해집니다.
    그러면 되지 않을까요?ㅎ

    • LinkC 2013.01.26 21:33 신고  댓글주소  수정/삭제

      좋은 의견 감사합니다 :D

      나그네 님이 말씀하신 문제는 system 폴더에 있는 DLL에 접근 할 때

      발생하는 redirection 에 관한 문제로 보이는데요.

      제가 말씀드린 dll injection의 경우 Custom DLL 을 Process에

      삽입하는 방식이라 크게 상관은 없을거 같습니다.

      또한 Injection 이 되지 않는 이유는 32, 64 bit assembly 가 서로

      다르기 때문에 애초에 library loading 이 안되는 걸로 사료됩니다.


      다시 한번 좋은 의견 감사하구요!

      나그네님 답변은 추후 64 bit OS에서 System 폴더에 접근할 때

      용이하게 쓸 수 있을거 같습니다 :D 감사합니다




      p.s

      64bit dll을 32bit process에 삽입하는 방법이 최근 올라왔네요.

      정식 방법은 아니고 약간 꼼수를 부렸는데 관심있으신 분은 아래 링크를 참조하세요!

      http://pastebin.com/1ji80WWe


블로그 이미지
LinkC

태그목록

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

공지사항

Yesterday35
Today36
Total334,155

달력

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

최근에 받은 트랙백

글 보관함


. .