반응형

 

 

1. 소스 코드 (ver 1.0.2)

 

소스코드.zip
0.25MB

* 암호 : reversecore

< 릴리즈 히스토리 >

ver 1.0.2 - "44장 InjDll.exe - DLL 인젝션 전용 도구" InjDll.cpp 오류 수정 (20121110)

ver 1.0.1 - "33장 스텔스 프로세스" 프로젝트 소스 보기 오류 수정 (20121008)

ver 1.0.0 - 첫 릴리즈 (20120928) 

 

< 참고 >

 

* 모든 소스 코드는 MS Visual C++ Express 2010 으로 개발되었습니다.

* 소스 코드를 이용하여 빌드한 결과 파일은 사용자 환경에 따라 약간씩 달라질 수 있습니다.

* 책의 설명과 동일하게 디버깅 하기 위해서는 첨부한 예제 파일을 사용하시기 바랍니다. 

 

2. 실습 예제 파일 (ver 1.0.1)

 

* 2중 압축 되어 있습니다. (압축 풀면 실습예제.zip 이 생성됩니다. 이를 다시 압축 해제 해주세요.)

* 암호 : reversecore

 

< 릴리즈 히스토리 >

 

ver 1.0.1 - "1장 리버싱 스토리" 예제 변경 (20130401)

ver 1.0.0 - 첫 릴리즈 (20120928)

< 참고 >

* "실습예제.zip" 파일은 Anti-Virus 제품의 실시간 검사를 피하기 위하여 2중 압축 되어 있습니다.

* "5부 - 64비트 & Windows Kernel 6" 의 실습 예제 파일을 실습 하기 위해서는 Windows XP/Vista/7 64bit 환경이 필요합니다.

* 5부를 제외한 나머지 모든 실습 예제 파일은 MS Windows XP SP3 32bit & Windows 7 32bit 에서 테스트 되었습니다.

* 만약 64bit 환경에서 실습을 진행하기 위해서는 다음 포스팅에 나타난 방법을 참고하시기 바랍니다.

 

    64bit 환경에서 OllyDbg 사용할 수 있는 방법

* 중요!!!

일부 Anti-Virus 제품에서 실습 예제 파일의 일부가 악성 파일로 진단될 수 있습니다.

그 이유는 예제에서 사용된 기법들이 기존의 악성 파일에서 사용된 기법과 동일하기 때문에 AV 휴리스틱 엔진에서 그 부분을 탐지하여 악성 파일로 잘 못 진단할 수 있기 때문입니다.

 

전혀 악성 파일이 아니므로 아래 설명을 잘 읽어 보시고 실습해 보시기 바랍니다.

 

1) UPack 패커와 UPack 으로 패킹된 실습 예제가 진단될 수 있습니다.

이는 패커 자체가 PE 헤더를 심하게 훼손시켜서 Black 리스트에 포함되었고, 또한 몇 년전에 많은 악성 코드들이 UPack 으로 실행압축 되었기 때문에 이젠 대부분의 AV 에서 UPack 자체만으로도 악성 파일로 진단해 버립니다.

그렇다고 UPack 자체와 이걸로 패킹된 실습 예제가 악성 파일은 아닙니다. 

다만 리버싱 기술 설명을 위해 AV 업계의 권고사항을 따르지 않은것 뿐입니다.

PE 파일 설명에 UPack 만큼 좋은 예제가 드물기 때문에 이런 불편함에도 예제로 사용하였습니다.

 

2) '고급 리버싱', '안티 디버깅' 예제 일부가 악성 파일로 진단될 수 있습니다.

이 예제 파일 역시 악성 파일에서 사용되는 것과 동일한 기법을 사용했기 때문에 AV 휴리스틱 엔진에서 그 부분을 탐지한 것입니다.

실습 파일 자체는 아무런 악성 행위를 하지 않는 정상 파일입니다.

3) 시간이 지난 후에 멀쩡한 예제 파일들이 악성으로 진단될 수 있습니다.
예제 파일이 퍼져서 AV 업체에 접수되어 자동 분류 시스템에 의해 만에 하나 '악성'으로 분류될 수도 있습니다.악성 파일에서 안티 디버깅에 사용되는 SEH, TLS Callback 기법을 구현하였기 때문입니다.이 기법 자체만으로는 아무런 악성 증상이 없습니다. 다만 AV 엔진의 휴리스틱 진단에서 이 부분을 탐지 할 가능성이 있다는 것이죠.

4) 그렇다면 진짜 악성 파일이란 어떤 것일까요?

사용자 몰래 시스템에 숨어 들어서, 자동으로 실행 되며, 개인 정보를 무단으로 수집하고, 수집한 정보를 외부로 유출하는 등의 악의적인 행위를 하는 파일들입니다. 

즉, 악성 파일이란 사용자에게 크던 작던 피해를 입히는 파일들을 말하는 것이죠.

실습 예제 파일들은 특정 리버싱 기법을 위해 만들어진 단순한 파일들 입니다. 악성 증상은 전혀 없습니다. ^^~

 

5) 실습 환경 PC 에서는 잠시 AV 제품의 "실시간 감시" 기능을 꺼두시기 바랍니다.

물론 실습을 마치셨다면 실시간 감시를 다시 켜주시는 것이 좋습니다.

 

6) Windows 7 에서 실습을 하시는 경우 UAC(User Access Control) 기능을 끄고 하시면 편리합니다.

 

 

혹시 다운로드가 잘 안되거나 AV 진단 관련하여 궁금하신 점은 이곳에 질문해 주세요~

 

감사합니다.

 

반응형
  1. 이전 댓글 더보기
  2. hacker3 2015.03.13 18:24

    리버싱 책 구입했는데 파일 어디서 다운받죠? 모조리 받고 싶어요

  3. maskey 2015.07.08 22:33

    안녕하세요 리버싱 핵심원리 구독자입니다.
    지금 윈도우 64비트 환경에서 올리디버거를 사용하고있습니다.

    문의드리는 내용은 제일 첫장 Hello World 부분에서 디버거에 exe를 올리면 책에서는 004011A0의 주소로 0040270C의 주소로 call 시키는 부분입니다.
    하지만 저가 할 떄는 처음부터 0042F55F JMP wmainCRTStartup 으로 EntryPoint가 잡혀있습니다.

    디버거는 ollydbg 2.01과 Immunnity dbg 1.85v 두 디버거 사용해도 똑같이 시작됩니다.

  4. 김요환 2015.07.24 04:32

    5부 64bit 37.2.1 예제 CreateFileA() 구조가 살짝 다릅니다.
    3번째 행 책 (PUSH ECX)
    dbg(SUB ESP 214) -> 메모리 할당
    그리고 4부 마지막 IE 제어는 아예 프로세스 디버깅하고 해봐도 같은 함수가 찾아 지지 않습니다. 하는 방법이 잘못된 것 갈까요?

  5. 김요환 2015.07.24 04:32

    5부 64bit 37.2.1 예제 CreateFileA() 구조가 살짝 다릅니다.
    3번째 행 책 (PUSH ECX)
    dbg(SUB ESP 214) -> 메모리 할당
    그리고 4부 마지막 IE 제어는 아예 프로세스 디버깅하고 해봐도 같은 함수가 찾아 지지 않습니다. 하는 방법이 잘못된 것 갈까요?

  6. 김요환 2015.07.24 04:32

    5부 64bit 37.2.1 예제 CreateFileA() 구조가 살짝 다릅니다.
    3번째 행 책 (PUSH ECX)
    dbg(SUB ESP 214) -> 메모리 할당
    그리고 4부 마지막 IE 제어는 아예 프로세스 디버깅하고 해봐도 같은 함수가 찾아 지지 않습니다. 하는 방법이 잘못된 것 갈까요?

  7. 김요환 2015.07.24 04:32

    5부 64bit 37.2.1 예제 CreateFileA() 구조가 살짝 다릅니다.
    3번째 행 책 (PUSH ECX)
    dbg(SUB ESP 214) -> 메모리 할당
    그리고 4부 마지막 IE 제어는 아예 프로세스 디버깅하고 해봐도 같은 함수가 찾아 지지 않습니다. 하는 방법이 잘못된 것 갈까요?

  8. 김요환 2015.07.24 04:33

    5부 64bit 37.2.1 예제 CreateFileA() 구조가 살짝 다릅니다.
    3번째 행 책 (PUSH ECX)
    dbg(SUB ESP 214) -> 메모리 할당
    그리고 4부 마지막 IE 제어는 아예 프로세스 디버깅하고 해봐도 같은 함수가 찾아 지지 않습니다. 하는 방법이 잘못된 것 갈까요?

  9. doctroy 2015.07.26 21:18

    안녕하세요 책을 보면서 공부를 하고 있는 독자입니다 다름이 아니라 윈도우 10에서 HOOKMAIN.EXE 파일을 실행하면 모든 프로그램에 키보드 입력이 되지 않네요...

  10. 치운 2016.02.25 18:16 신고

    책을 사서 예제파일 hello.exe를 OllyDbg로 열어봤는데 주소가 완전히 틀리네요.
    저는 노트북에 windows2008을 깔고 있습니다.
    책에 나오는 예제와 똑같은 주소가 보이려면 어떻게 해야합니까?
    저의 이메일은 kchambit@daum.net입니다. 꼭 알려주세요.

  11. 권흥태 2016.06.21 22:34 신고

    맘먹고 책을 사서 공부중인 학생입니다.
    c++파일 올리디버거로 똑같이 열어서 하고 있는데 책이랑 메모리 주소들이 자꾸 틀리네요..
    helloWold.exe파일도 그러 합니다. ㅠㅠ 정말 해결책을 알 고 싶어요 ㅠㅠ
    빠른 답변 부탁드립니다.
    dev-c++사용합니다. 32비트이구요

  12. 2018.01.29 22:42

    비밀댓글입니다

  13. 2018.02.21 18:09

    비밀댓글입니다

  14. 김범준 2018.03.08 14:53

    비밀번호가걸려잇어요 어떻개해야하나요

  15. 천호진 2019.01.19 03:41

    크롬 환경에서 실습 예제파일 티스토리는 보안 오류가 뜨고,
    드랍 박스는 url이 바뀐모양이네요

  16. 2020.12.05 22:41

    비밀댓글입니다

  17. 2020.12.10 18:57

    비밀댓글입니다

  18. 2020.12.15 00:14

    비밀댓글입니다

  19. 2020.12.26 19:45

    비밀댓글입니다

  20. 2020.12.28 16:04

    비밀댓글입니다

  21. tifet1264 2021.04.14 16:49

    감사합니다. 책과 함께 잘 쓰도록 하겠습니다.

반응형

어플리케이션 후킹(Application Hooking) 설계(디자인)에 대한 설명입니다. 후킹 방법을 결정하고, 검증하는 과정을 보여드립니다. 



후킹 방법 결정 - 무엇을? 어떻게? 후킹 할 것인가?


우리의 목표는 [HxD.exe 프로그램에서 PE 파일을 열었을 때 상태바의 "Offset: XXXX" 문자열에 "RVA: YYYY" 문자열을 추가하기]  입니다.


기존 어플리케이션에 어떤 기능을 추가(혹은 수정) 하려고 마음을 먹었다면 그 다음에는 구체적인 방법에 대해 고민을 해야 합니다. 즉, 후킹 설계 과정으로 들어가야 합니다.


윈도우즈 OS의 대표적인 후킹 기법은 "메시지 후킹(Message Hooking)""API 후킹(API Hooking)" 입니다. 둘 중에서 목표 달성에 더 적합하고 구현이 편리한 방법을 사용하는 것이 좋을 것입니다.


일반적으로는 메시지 후킹 기법이 더 간단하고 더 안전하다고 볼 수 있습니다. 대신 경우에 따라(특히 GUI 관련) 더 많은 고려사항이 필요한 경우가 있습니다. 따라서 실전에서는 후킹 설계 단계에서 메시지 후킹 방법이 더 편리할지 확인해 보는 것이 좋습니다.



메시지 후킹 기법 검증


우리 목표에 메시지 후킹 기법이 잘 어울릴지 검증해 보도록 하겠습니다. 


Windows OS 는 어플리케이션 윈도우의 GUI 처리 작업을 위해 윈도우 메시지를 이용합니다. HxD.exe 의 상태바도 일종의 윈도우입니다. 프로그램 내부에서 상태바에 특정 문자열을 쓰기 위해 관련된 윈도우 메시지를 전달할 것입니다. 


* 참고 


GUI 관련 API 를 호출하면 GUI 작업 처리를 할 수 있기 때문에 마치 윈도우 메시지를 사용하지 않고도 작업이 가능한 것처럼 생각될 수도 있습니다. 그러나 실제로는 API 내부에서 윈도우 메시지를 보내는 것입니다. 일반적인 GUI 작업은 메시지 기반으로 동작한다는 것을 기억하시기 바랍니다.


HxD.exe 의 상태바에 있는 "Offset: XXXX" 문자열이 변경될 때 상태바 윈도우 프로시저(Window Procedure)에서 처리하는 윈도우 메시지들을 확인해 보겠습니다. 먼저 HxD.exe 프로그램을 실행 하신 후 적당한 PE 파일을 열어 주세요.


그리고 윈도우 메시지를 모니터링 하기 위해 Spy++ 유틸리티를 실행합니다.



<그림 3 - Spy++ 실행화면>


* 참고


윈도우 메시지 확인에 있어서 Spy++ 은 최고의 유틸리티입니다. 기본 동작 원리는 윈도우 메시지 후킹입니다. 모니터링 대상 프로세스에 DLL 을 인젝션 시켜서 사용자가 원하는 메시지를 모니터링 합니다. Spy++ 은 Microsoft Visual Studio 패키지에 포함된 유틸리티 입니다. 


Spy++의 툴바에서 "Log Messages... (Ctrl+M)" 버튼을 선택합니다. (또는 "Spy - Log Messages..." 메뉴를 선택하셔도 됩니다.)



<그림 4 - Log Messages... (Ctrl+M) 툴바 버튼>


Message Options 다이알로그가 나타납니다.



<그림 5 - Message Options 다이알로그>


Windows 탭의 Finder Tool 을 이용할 것입니다. Finder Tool 아이콘을 마우스 버튼을 누른 채로 드래그 하면 마우스 포인터가 과녁 모양으로 바뀝니다. 이 과녁 모양의 마우스 포인터를 HxD 의 상태바 윈도우에 위치시킨 후 마우스 버튼에서 손을 떼면 Spy++ 의 타겟(Target) 윈도우로 설정됩니다. (과녁 모양의 마우스 포인터 밑에 있는 윈도우는 두꺼운 검은색 테두리가 생겨서 잘 알아 볼 수 있습니다.)



<그림 6 - Finder Tool 로 상태바 설정>


이제 Spy++ 의 Message Options 다이알로그의 "Selected Object" 섹션에 지금 선택된 HxD 의 상태바 윈도우에 대한 정보들이 표시됩니다.



<그림 7 - HxD 의 상태바 윈도우 정보>


각 정보들이 나타내는 의미는 <표 1>과 같습니다.


 항목

 의미

 

 Window

 윈도우 핸들

 001B0362

 Text

 윈도우 텍스트

 Offset: 0

 Class

 윈도우 클래스 이름

 TXmStatusBar

 Style

 윈도우 스타일

 54000100

 Rect

 윈도우 위치와 크기

 (15, 663)-(589, 684) 574x21

 Thread ID

 윈도우를 생성한 스레드 ID

 00000150

 Process ID

 윈도우가 속한 프로세스 ID

 00000F30


<표 1 - Selected Object 항목들의 의미>


* 참고


Spy++ 에서 보여주는 상태바 윈도우의 정보는 나중에 메시지 후킹을 구현할 때 좋은 참고자료가 됩니다.


윈도우 클래스 이름이 "TXmStatusBar" 인 걸로 봐서 윈도우 기본 상태바(StatusBar)를 서브클래싱(SubClassing) 한 것으로 추정됩니다. 그렇다면 기본 동작은 윈도우 기본 상태바와 비슷할 것이라고 예상해 봅니다.


Message Options 다이알로그의 [확인] 버튼을 선택하면 이제부터 Spy++ 은 HxD 의 상태바 메시지를 모니터링하기 시작 합니다. 시험 삼아서 마우스 포인터를 상태바 위에서 이리저리 이동해 보시기 바랍니다. Spy++ 화면에 마우스 관련 메시지가 많이 나타날 것입니다.



<그림 8 - 마우스 이동 메시지>


Spy++ 의 메시지 캡쳐 옵션을 디폴트인 'ALL' 로 설정하였기 때문에 상태바로 전달되는 모든 메시지가 표시되는 것입니다. 우리가 진짜 궁금한 내용은 상태바에 문자열이 써지는 순간에 어떤 메시지를 받느냐 하는 것입니다. 


Spy++ 툴바의 'Clear Log (Del)' 버튼을 선택하여 지금까지 쌓인 로그를 지워버립니다. 그리고 HxD.exe 의 메인 화면 내의 아무 부분을 마우스로 클릭하시기 바랍니다. 마우스가 선택한 파일의 옵셋을 상태바에 출력하기 위해 메시지가 전달될 것입니다.



<그림 9 - 문자열 출력 메시지>


HxD 메인 윈도우에서 마우스 클릭을 한번 하면 정확히 9개의 메시지 로그가 출력됩니다. (제가 보기 편하게 들여쓰기를 하였습니다.)


<00001> 001B0362 S message:0x040A [User-defined:WM_USER+10] wParam:00000000 lParam:0012FA84

<00002> 001B0362 R message:0x040A [User-defined:WM_USER+10] lResult:00000001


<00003> 001B0362 P WM_PAINT hdc:00000000


<00004> 001B0362 S message:0x0401 [User-defined:WM_USER+1] wParam:00000000 lParam:01A06768

<00005> 001B0362 S   WM_PAINT hdc:00000000

<00006> 001B0362 S     WM_ERASEBKGND hdc:33010BC2

<00007> 001B0362 R     WM_ERASEBKGND fErased:True

<00008> 001B0362 R   WM_PAINT

<00009> 001B0362 R message:0x0401 [User-defined:WM_USER+1] lResult:00000001


1번 로그의 메시지는 WM_USER(0x400)+A 이고 그 때의 lParam 값은 0012FA84 입니다. lParam 값이 마치 스택의 주소를 가리키는 것으로 추정됩니다. 그리고 4번 로그의 메시지는 WM_USER(0x400)+1 이고 lParam 값은 01A06768 입니다. 이 값 또한 메모리 주소를 표시한다고 추정해 볼 수 있겠습니다. 


마우스(또는 키보드)를 이용하여 HxD 메인 윈도우의 커서를 다른 옵셋으로 이동시키면 기본적으로 이와 동일한 9 개의 메시지 로그가 기록됩니다. 그리고 4 번째 로그의 lParam 값은 계속 바뀌는 것을 알 수 있습니다. (아마 동적 할당 메모리로 추정됩니다.)


따라서 상태바 윈도우는 사용자 정의 메시지인 WM_USER+1 또는 WM_USER+A 메시지를 받아서 lParam 이 가리키는 주소의 문자열을 상태바 윈도우에 쓴다고 추정해 볼 수 있겠습니다. 그 중에서도 4번 로그 메시지 WM_USER+1 을 받은 직후 WM_PAINT 와 WM_ERASEBKGND 메시지가 연속해서 나타나는 걸로 봐서는 WM_USER+1 메시지가 상태바 윈도우에 실제 값을 쓰라는 명령으로 보입니다.


디버거를 이용하여 lParam 이 가리키는 주소를 확인해보면 앞에서 추론한 내용이 맞는지 알 수 있겠지요.


* 참고


WM_PAINT 는 윈도우를 다시 그릴 때 발생되고, WM_ERASEBKGND 는 윈도우 배경을 지울 때 발생됩니다. WM_USER (0x400) 이후부터는 사용자 정의 메시지로서 프로그래머가 마음대로 지정해서 사용할 수 있습니다. 물론 메시지를 받는 윈도우 프로시저에서 사용자 정의 메시지를 잘 처리할 수 있도록 구현해야 합니다. 해당 메시지에 대한 더 자세한 설명은 MSDN 을 참고하시기 바랍니다.



디버깅


OllyDbg 를 실행하여 HxD.exe 프로세스에 Attach 시킵니다. 디버거는 ntdll.dll 메모리 영역의 System Break Point 위치에서 멈춥니다. 디버거를 실행[F9] 시켜 줍니다. 


윈도우 메시지를 디버깅 할 때는 주의사항이 있습니다. 그건 바로 디버기 프로세스(HxD.exe)의 윈도우를 가리면 안된다는 것입니다. 즉 OllyDbg 나 Spy++ 윈도우에 의해 HxD 윈도우가 가려졌다가 나타났다가 하게 되면 불필요한 로그가 Spy++ 에 쌓이게 됩니다. (물론 Spy++ 옵션을 고쳐서 모니터링 메시지를 필요한 것 만으로 제한해도 됩니다.) 


작업 편의상 각 윈도우들을 독립적으로 배치 시켜 주시기 바랍니다.



<그림 10 - 윈도우 배치>


다시 Spy++ 의 로그를 깨끗이 지우신 다음 마우스로 HxD 메인 윈도우 아무 곳이나 선택해 주세요. 제 경우에 Spy++ 의 WM_USER+1 로그의 lParam 주소는 01A0BA28 입니다. 



<그림 11 - 새로운 lParam 값>


이 주소를 OllyDbg 의 메모리 윈도우에서 검색해 보겠습니다.



<그림 12 - OllyDbg 에서 확인한 lParam 내용>


HxD 의 상태바에 나타난 것과 동일한 문자열이 ASCII 형태로 표시되어 있습니다. (이 경우에는 운좋게 예상과 잘 맞아서 쉽게 발견할 수 있었습니다.) 이 WM_USER+1 메시지를 후킹해서 lParam 이 가리키는 문자열("Offset: XXXX")을 읽은 후 RAW -> RVA 변환하여 표시해 주면 목표를 완수 할 수 있을 것 같습니다.


결론적으로 메시지 후킹 방법은 우리 목표에 잘 들어맞는 방법입니다. 다음 포스트에서 실제 메시지 후킹을 구현해 보도록 하겠습니다.


* 참고


사실 제가 처음 떠올렸던 아이디어는 단순한 마우스 메시지 후킹이었습니다. HxD.exe 상태바의 문자열이 바뀌려면 먼저 마우스로 커서 위치를 바꿔줘야 했으니 마우스 훅 프로시저에서 상태바의 문자열을 읽고 쓸 수 있지 않을까 하고 말이죠. 그러나 조금 더 생각해보니 좋은 아이디어가 아니라서 접었습니다. 이유는 키보드로도 커서 위치를 바꿀 수 있으니 키보드 메시지도 후킹 해야 할 테고, 상태바 윈도우가 다시 그려져야 하는 모든 상황(윈도우 이동, 윈도우가 가려졌다가 다시 나타나기, HxD 에서 다른 파일 열기, 기타)을 고려했을 때 후킹해야 할 메시지가 많아 질 것 같았기 때문입니다. 

따라서 덮어놓고 후킹을 시도하기보다는 먼저 차분히 생각을 정리해보고, 아이디어를 검증하는 단계가 매우 중요하다고 볼 수 있겠습니다.




ReverseCore

반응형
  1. J 2012.07.14 01:19

    언제나처럼 흥미로운 주제에 대한 포스팅이시네요. ^^
    주말시간에 한번 도전해봐야겠네요. ^^
    여름에 책으로 꼭 볼 수 있으면 좋겠습니다.

  2. 군인 2012.07.17 21:13

    재밌네요^^
    좋은 글 감사해요!!!! 잘읽고갑니다 :)

  3. packeter 2012.07.20 18:47

    HxD.exe 내부에서 사용하는 일반 함수를 Injection된 DLL에서 실행하는 방법은 없을까요?
    후킹은 passive해서.. 해당 API가 동작 해야만 원하는 코드를 실행시킬 수 있는데요,
    active하게 해당 API동작 없이.. 후킹한 API를 실행한다거나 하는 방법은 없을까요?

  4. smartdolphin 2012.07.23 13:12

    초보자들도 알기쉽게 잘 설명해주셨네요! 근데 책은 언제쯤 나오나요? 하루 빨리 책 출판을 기다리고 있숩니다~^^

  5. 멘죠님 2012.07.29 22:44

    즐겨찾기에 추가해 놓고 가끔 리버스코어님 블로그 들어와서 강좌만 읽고 가지만....
    정말 대단하시다는 말밖에 안나오네욤.....
    대한민국에 리버싱에 대해 이렇게 상세하게..그것도 기본부터 아주 세심하게
    강좌를 설명해 놓은 곳이 있을까요??

    물론 대한민국에 실력 좋은 사람들 많겠지만...
    코어님 처럼 이렇게 행동으로 꾸준하게 보여주는 사람은 아마 대한민국에 없을것으로 봅니다..

    정말 대단하세요...코어님...아니 형님!!! (__)

  6. 나그네 2012.08.01 16:18

    좋은 정보 감사합니다!
    열심히 공부할게요 ^_^

  7. 김호준 2012.09.05 13:35

    리버스 코어님!! 강컴사이트에서 http://kangcom.com/sub/view.asp?sku=201209040003

    이책을 보았는데 9월 20일 출판예정으로 되어있네요...

    혹시 이게 집필중이던 책인가요?

    맞으면 지금 바로 예약주문 하려구요 답변부탁드려요~~~

  8. ditongs 2012.09.05 20:33

    김호준님이 알려주신 링크는 넥슨 아메리카 게임보안팀에 계신 "강병탁"님이 집필하신 책입니다~
    저도 지금 주문 기다리고 있습니다. 말그대로 바이블입니다. 강추!

    • 김호준 2012.09.07 13:30

      다른분이셨군요...어쨌든 살책이 점점더 늘어나는데...지갑은 가벼워지고..아이고...ㅠㅠ

  9. 박종석 2012.09.11 17:25

    드디어 출간이 되네요.... 벌써부터 기대가 됩니다.
    "리버싱 핵심 원리"
    http://www.yes24.com/24/Goods/7529742?Acode=101

    • 담벼락 2012.09.11 17:28

      목차 보고 딱 리버스코어님이 만드신 걸 느꼈네요. 어서 예약 구매 질러야겠어요

    • 김호준 2012.09.11 17:39

      우어~~ 분량이 엄청난데요..ㄷㄷㄷ 바이블이 될듯합니다..ㄷㄷㄷ

  10. Lr라 2013.03.04 14:48

    어렵군요..ㅎㅎ;;
    그냥 이정도 자료로도 저에겐 벅찹니다..

    • reversecore 2013.03.04 20:17 신고

      ^^ 네, 처음 접하시면 분명히 어려운게 사실이지요.

      뭐든지 그렇지만 자꾸 보면 할만해져요~

      리버서들이 천재도 아니고 그냥 평범한 사람들이거든요. 그런데요 자꾸 보다보면 괜찮아요~ ^^

      감사합니다.

  11. supras shoes 2013.04.27 02:40

    내가 성공을 했다면 오직 천사와 같은 어머니의 덕이다.Topics related articles:


    http://azza.tistory.com/116 新建文章 11

    http://color114.tistory.com/68 新建文章 6

    http://mycite.tistory.com/78 新建文章 2

    http://bfhopestore.tistory.com/206 新建文章 5

  12. lunettes carrera 2013.04.28 04:22

    희미한 달빛이 샘물 위에 떠있으면, http://noq.botasugger.com/ botas ugg online,나는 너를 생각한다.

  13. nike free run shoes 2013.04.29 06:27

    노동은 생활의 꽃이요, 삶의 보람이요, 마음의 기쁨이다.Topics related articles:


    http://sma14u.tistory.com/70 新建文章 3

    http://ianbuffet.tistory.com/44?nil_openapi=search 新建文章 12

    http://eshita.tistory.com/120 新建文章 2

    http://starspalace.tistory.com/53 新建文章 6

반응형




제 책을 담당해 주시는 '전설의 에디터'님께서 보내주신 조판용 원고입니다. 

실제 책을 펼친 모양과 거의 같다고 보시면 될꺼에요~ 


이 엄청난 분량을 작업하시느라 고생하셨을 에디터님께 감사의 마음을 전합니다. ^^


제가 좋아하는 [연금술사] 책을 올려보았습니다. 

대략 분량이 가늠되시나요? 

1차로 180 페이지 정도를 끝낸 나머지 모든 분량입니다.


열심히 저자 검토중이고요. 

주로 제목, 레이아웃, 그림, 내용, 오탈자 위주로 보고 있습니다.


이제 출판 작업도 반환점을 돌아 결승선이 희미하게 보이기 시작합니다. 막 두근거려요~ ^^


반응형
  1. 이전 댓글 더보기
  2. havu 2012.07.10 21:42

    책 나오면 사인회 한번 하세요!
    책 표지에 사인 받고싶네요

  3. 루리킹 2012.07.10 21:59

    ....리버싱에 관한 국산 서적을 12년전 "크랙" 이후로 한번도 구경 못했는데....
    그 이후로는 국산 리버싱 서적이 저에게는 처음이나 마찬가지네욤...정말 기대중이고욤...
    책 나오면 꼭 살께욤...
    글자 틀려도 좋으니 얼른 나오게 해주세욤 ㅜ_ㅜ

  4. ㅇㅇ 2012.07.11 15:47

    국내에서 드디어 멋진 리버싱 서적이 나온다니 기대됩니다
    존경합니다

  5. 간만에 들려 2012.07.12 14:18

    정말 오랫동안 기다렸습니다.
    하루 빨리 나오기를 기다리겠습니다 ^^

  6. ㅇㅇ 2012.07.12 22:21

    책 표지가 멋있었으면 더 좋겠습니다

  7. 호지니 2012.07.14 11:58

    (왜 그런지는 잘 모르겠지만..) 저도 무지 떨려요 ㅋㅋ
    화이팅 하시구요. 순산하시길 기원할꼐요 ^^;

  8. 채진아 2012.07.16 10:51

    기다리고 있습니다.

  9. 2012.07.16 20:23

    비밀댓글입니다

  10. hare 2012.07.19 15:49

    드디어..ㅜㅡㅜ 책 예약판매 하면 바로 지릅니다!!

  11. smartdolphin 2012.07.21 12:29

    예전부터 리버스코어에서 많은 정보를 얻고 배울 수 있어서 그런지 정말 기대하고 있습니다. 책이 나오면 예판부터 질러야 겠네요 ㅎㅎ

  12. 로크 2012.08.15 13:35

    책 제목이 어떻게 되나요??
    궁금합니다.

  13. 하겐티 2012.08.20 11:14

    1년을 기다려왔습니다. 리버스코어에서 많을것을 배웠지만
    책을 소장하고 바이블로서 활용하고 싶습니다.
    정말 기대되네요

  14. 넹군 2012.08.23 22:32

    언제 출판 될까요 이제 9월인데 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

    대략 언제 나오는지 알려주시면 ....

  15. 담벼락 2012.08.27 13:36

    기다려지내요.. 늦더라도 9월초에 나왔으면 좋겠습니다. 책이름은 이상하게 말고 reversecore 라고만 적어도 멋있을꺼 같습니다.

  16. atlantic 2012.08.30 12:23

    흑흑 ㅜㅜ 진짜 너무안나오네여! ㅜㅜㅜ

  17. 2012.09.02 14:21

    주기적으로 와보는데 경과라도 알려주시면... ㅠ

  18. reversecore 2012.09.04 03:40 신고

    안녕하세요. ReverseCore 입니다.

    아~~ 책을 기다리시는 분들께는 죄송하다는 말씀 밖에 드릴수가 없네요. ㅜㅜ

    현재 최종 원고 리뷰만을 남겨둔 상태입니다.
    조만간 최종 원고를 받아서 검토가 끝나고 편집이 완료되면,
    일단 시간이 걸리는 작업은 모두 끝나게 됩니다.

    나머지는 출판사의 출판 프로세스에 맞춰서 빠르게 진행될 것입니다.
    9월말~10월초를 출간일로 예상하고 있습니다.

    완성도를 높이기 위해 저와 출판사에서 원고를 꼼꼼하게 확인하고 있습니다.
    일단 분량(본문 1,000 페이지 & 그림 880장 & 기타)이 엄청나고 특히 제가 너무 치열하게 리뷰하고 원고를 수정하는 바람에 편집자님께서 고생하시고, 그만큼 작업 시간이 더 걸리고 있습니다. ㅜㅜ

    기다리시는 분들께 양해를 부탁드리겠습니다.

    감사합니다.

    • 담벼락1개월만 기다리면 된다니 다행이내요.. 완성도도 높이고, 2012.09.04 11:25

      1개월만 기다리면 된다니 저도 모르게 두근두근 거리네요. 완성도를 높이기위한 노력 너무 감사합니다. 얼른 책을 펼쳐 보고 싶기는 하네요.. 하하

  19. 도키도키 2012.09.04 15:45

    두근두근

  20. 9월달! 2012.09.04 17:27

    이제 9월달 입니다.!!! 흐흐흐

  21. 리버싱 2012.09.16 16:21

    벌써 기대가 됩니다

반응형


리버싱 기술을 이용하면 기존 어플리케이션의 버그를 수정하거나, 새로운 기능을 추가시킬 수 있습니다. 간단한 실습 예제를 통하여 동작원리를 소개하도록 하겠습니다.





리버싱 기술의 활용



리버싱 기술이 꼭 다른 프로그램을 분석하는 용도로만 사용되는 것은 아닙니다. 약간의 아이디어와 끈기만 있다면 여기서 조금 더 나아가 개발자들이 시도하지 않는 방법으로 작업을 진행할 수 있답니다. '개발 관점' 에서는 어렵게 보이는 문제이지만 오히려 '리버싱 관점' 에서는 쉽게 해결할 수 있는 경우도 있습니다.


* 참고


어플리케이션에 추가 기능을 삽입하는 것은 마치 "API Hooking - 계산기, 한글을 배우다. (1)" 와 비슷한 맥락의 작업 이라고 볼 수 있습니다.


자신이 개발하지 않은 (소스 코드를 가지고 있지 않은) 다른 어플리케이션의 버그 수정이나 전혀 새로운 기능 추가 같은 작업이 바로 그 좋은 예입니다. 이러한 작업의 핵심기술은 "Debugging""Injection" 그리고 "Hooking" 입니다. 또한 어셈블리 언어, PE File Format 등의 지식도 매우 중요합니다.


1) Debugging 


디버깅 기술은 매우 다양하게 사용됩니다. 먼저 작업 설계 단계에서 문제를 파악하고 해결 아이디어를 검증하고 구체화 시키는데 필수적으로 사용됩니다. 구현 단계에서 단위 모듈을 검증하는데에도 사용되고, 마지막 테스트와 버그 파악에 빠져서는 안되는 가장 중요한 기술입니다.


2) Injection


다른 프로세스를 수정하려면 일단 그 프로세스 메모리 영역으로 침투해야 합니다. 이게 바로 인젝션 기술의 역할입니다. 일단 프로세스 메모리에 침투하기만 하면 절반은 성공이라고 볼 수 있습니다.


3) Hooking


기존 코드와 다르게 동작시키려면 후킹 기술을 사용하면 됩니다. 기존에 있던 코드의 흐름을 변경시켜 사용하지 못하게 할 수 도 있고, 새로운 코드를 추가하여 전혀 다르게 동작시킬 수 도 있습니다. 


이제 간단한 실습 예제를 분석하면서 "기존 응용프로그램에 새로운 기능을 추가시키는 방법" 에 대해서 알아보도록 하겠습니다. 제가 아이디어를 내고 구체화 시키고 검증하는 과정, 그리고 실제로 구현하면서 부딪쳤던 문제들과 해결 과정에 대해 자세히 보여드릴 겁니다. 향후 여러분께서 리버싱 기술을 실무에 적용하실 때 작은 도움이 될 것입니다.




실습 프로그램 - HxD.exe 




<그림 1 - HxD.exe>


위 그림은 제가 평소 애용하는 헥스 에디터 HxD.exe 의 실행 화면입니다. dummy32.dll 라는 이름의 PE 파일을 열고 있네요. 


문득 "화면 좌측 하단의 Offset 표시 영역에 RVA 를 계산해서 같이 표시해 주면 어떨까?" 라는 아이디어가 떠올랐습니다. 아이디어의 유용성 여부를 떠나서 일단 재미있어 보였고, 어플리케이션 기능 추가라는 주제에 잘 맞을거 같다는 생각이 들었습니다.


여러차례 시도 끝에 결국 아래와 같이 성공할 수 있었습니다.



<그림 2 - PE 파일의 RVA 표시 기능이 추가된 HxD.exe>


먼저 Offset 과 RVA 를 동시에 표시하기 위해 status bar 의 좌측 하단 영역의 길이를 조금 늘렸습니다. 그리고 글씨를 출력하는 API 를 후킹하기 위한 hxdhook.dll 을 인젝션 시켰습니다. 또한 Offset <-> RVA 변환 계산 모듈 PEInfo.dll 을 로딩하여 계산을 수행하도록 만들었습니다. 이제 HxD.exe 에서 PE 파일을 열고 커서 위치가 변할 때마다 해당 파일 Offset 과 RVA 가 자동으로 표시됩니다.


다음 포스트에서 구체적인 작업 내용과 동작 원리에 대해 알아보도록 하겠습니다.



* 참고


위 실습 예제 파일은 "HxD.exe 기능 추가" 페이지에서 다운 받으실 수 있습니다.




ReverseCore


반응형
  1. 감염오리 2012.06.23 18:03

    ㅎㅎ 다시 포스팅을 올리시는군요
    앞으로도 더 많은 지식을 알려주시기 바랍니다^^

  2. ray 2012.06.27 04:50

    좋은 정보 감사합니다.

반응형

간단한 진법 변환에 대해서 알아보겠습니다. 

아주 기초적면서도 중요한 내용입니다만, 블로그에 제대로 소개한적이 없어서 이번에 제대로 정리해보겠습니다. 

일반적인 사람이 사용하는 진법은 10진법입니다. 컴퓨터는 내부적으로 2진법을 사용합니다. 리버싱에서는 16진법을 사용합니다. 따라서 리버서는 이 세 가지 진법체계(2, 10, 16)를 자유자재로 변환할 줄 알아야 합니다.

보통은 계산기를 사용하면 편합니다만 2진수 <-> 16진수 변환 과정은 리버싱에 자주 등장하기 때문에 암산으로 가능하도록 숙달하는 것이 좋습니다. 




기본 진법

 
 진 법 숫 자 설 명   
 2 (Binary)  0, 1  ON, OFF 1111(2), 1111b
 10 (Decimal)  0 ~ 9  사람이 익숙한 숫자 체계 15(10), 15d
 16 (Hexadecimal)  0 ~ 9, A ~ F  2진법을 1/4로 줄여서 보여줌  F(16), Fh

* 참고

16진수는 2진수를 1/4로 압축시켜 보여주는 효과가 있습니다. 즉, 4 자리의 2진수가 1 자리의 16진수로 간단히 표현됩니다. 

예) 15(10) = 1111(2) = F(16)

 


 

변환 방법

학창시절에 배웠던 진법 변환 방법의 기억을 되살려 보겠습니다.

#1. 2진수 <-> 10진수 

1) 9(10) -> 1001(2)

2) 1001(2) ->  9(10)

3) 30(10) -> 11110(2)

4) 11110(2) ->  30(10) 

변환 방법은 매우 간단합니다. 기억이 새록새록 나시죠?  


#2. 10진수 <-> 16진수

1) 123(10) -> 7B(16)

 

 

2) 7B(16) -> 123(10)

 

 

 


3) 500(10) -> 1F4(16)


4) 1F4(16) -> 500(10) 

 

여기까지는 변환 원리만 기억하시고 실제로는 계산기를 사용하시는것이 편리합니다.

리버서에게 중요한 것은 아래의 2진수 <-> 16진수 변환을 암산(수작업)으로 해내는 능력입니다.

 

#3. 2진수 <-> 16진수

 

 

 

<2진수 테이블>

 

위 테이블에서는 1 ~ 15 까지의 숫자를 각각 10, 16, 2 진수로 보여주고 있습니다. 

눈여겨 보실 내용은

4 자리의 2 진수를 1 자리의 16진수로 표현 가능

하다는 것입니다.
'4 자리의 2 진수' 라는 말은 4 bit 라고 바꿔 말 할 수 있고, 8 bit(1 byte) 는 '8 자리의 2 진수' 이며 이는 2 자리의 16 진수입니다.

즉, 1 byte 는 2 자리의 16 진수로 간단히 표현(00 ~ FF)이 가능하다는 뜻입니다. 이런 특성 때문에 컴퓨터 공학에서는 16진수로 숫자를 표현하는 것이 편리합니다. (1 byte 로 저장할 수 있는 숫자를 10 진수로 표현하면 0 ~ 255 이며 세 자리수가 필요합니다.)

위의 테이블을 다 외우시면 물론 좋습니다만 처음에는 빨간색으로 표시한 2(0010), 4(0100), 8(1000), A(1010), C(1100)만 외우셔도 됩니다. 파란색으로 표시한 1(0001), F(1111)는 간단하니까 한번 보면 저절로 외워지고요. 나머지 숫자는 빨간색 숫자에서 계산하시면 됩니다. 계산 방법은 아래와 같습니다.


3(0011) = 2(0010) + 1(0001)
5(0101) = 4(0100) + 1(0001) 
6(0110) = 4(0100) + 2(0010)
7(0111) = 8(1000) - 1(0001)
9(1001) = 
8(1000) + 1(0001)
B(1011) = A(1010) + 1(0001)

D(1101) = C(1100) + 1(0001)
E(1110) = F(1111) - 1(0001) 

간단한 예제를 살펴보겠습니다.

변환 요령은 "16진수는 한 자리씩 끊고, 2진수는 네 자리씩 끊는다" 입니다. 그리고 위 테이블을 보면서 변환하시면 됩니다. (조금만 숙달되도 암산으로 가능해 집니다.)  

 

1) 7F(16) -> 01111111(2)

2) 3D6A921E(16) -> 00111101 01101010 10010010 00011110(2)

3) 10101100(2) -> AC(16)


 

진법 변환 활용

 
이러한 16진수 <-> 2진수 진법 변환을 왜 공부해야 할까요?

리버싱 분야에서 다양한 활용 예가 있습니다.

IA32 Instruction Table 을 해석을 위해 ModR/M, SIB, Group ID 등을 계산할 때 필요합니다.

<그림 - IA32 Instruction Format : 출처 Intel Manual>

 

<그림 - ModR/M Byte : 출처 Intel Manual>


EFLAGS 레지스터는 각 bit 가 flag 를 의미합니다. 이러한 bit flag 연산에 진법 변환이 필요합니다.

 <그림 - EFLAGS : 출처 Intel Manual> 
 Win32 API 의 파라미터 중에 Flag 를 bit 로 표시하는 경우가 많습니다.

 

HANDLE WINAPI CreateFile(

  __in      LPCTSTR lpFileName,

  __in      DWORD dwDesiredAccess,

  __in      DWORD dwShareMode,

  __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,

  __in      DWORD dwCreationDisposition,

  __in      DWORD dwFlagsAndAttributes,

  __in_opt  HANDLE hTemplateFile

);


* 출처 : MSDN

 

CreateFile() API 의 6 번째 파라미터 dwFlagsAndAttributes 는 아래와 같이 bit flag 로 이루어져 있습니다.

<그림 -  dwFlagsAndAttributes 설명 일부 : 출처 MSDN>  


이외에도 디버깅을 하다보면 각종 bit 연산이 나타나는데 16진수 <-> 2진수 변환 방법을 알고 있으면 코드를 이해하는데 크게 도움이 됩니다.

지금까지 매우 기초적이면서도 중요한 진법 변환에 대하여 알아보았습니다. 잘 활용하시기 바랍니다.

개인적으로 백만년 만의 포스팅이네요. 이 포스팅을 시작으로 블로그 활동을 재개합니다. ^^~

* 얼마전 회사를 떠나서... 사회에 첫 발을 내디딘... 혹은 학교로 복귀한... 15기 인턴들 모두 화이팅~~~

 

ReverseCore

반응형
  1. 2012.03.06 08:52

    비밀댓글입니다

  2. 2012.03.06 09:30

    잘봤습니다 ^^*

  3. 2012.03.06 17:07

    해쿨을 통해 오게되엇는데,
    딱 오늘 문제 풀면서 다시 생각해보게된 진법이네요 ..ㅎ
    알바 시작하면서 일이업어 공부를 다시 시작하게되었는데.
    많은 포스팅 부탁드려요 ㅋ
    잘봣습니당.ㅎ

  4. 투게더 2012.03.06 22:07

    블로그를 통해 배우고 있는 학생입니다
    책이 출판되기를 목빠지게 기다리고 있습니다ㅎ
    3월달 안에 나오겠지요?

    • reversecore 2012.03.06 23:37 신고

      책은 출판사에서 열심히 작업중입니다.

      아마 여름쯤 나올것 같습니다.

      감사합니다. ^^~

  5. hcscp 2012.03.07 09:45

    다시 포스팅 하시는군요 ㅎ
    매번 기억 상기시킬겸 많은 도움됩니다.
    여름쯤 책 출판시 바로 구매하고 싶네요 ㅎ
    감사합니다. 수고하세요:>

  6. 9rand 2012.03.07 13:52

    다시 글을 써주신다니 감사합니다.. 15기는 무엇..

  7. 궁금 2012.03.08 00:26

    ModR/M, SIB, Group ID 변환하는게 잘 이해가 되지 않습니다.
    이게 전공책을 봐도 잘 이해가 안 되는 부분인데
    어떻게 쓰이는지 자세한 예를 좀 알 수 있을까요?
    감사합니다.

    • reversecore 2012.03.09 00:41 신고

      안녕하세요.

      저 애들은 모두 IA32 Instruction 을 해석할 때 사용됩니다. ModR/M, SIB 는 각각 1 byte 크기이며 이걸 bit 단위로 3 등분으로 쪼개서 사용됩니다. 인텔 매뉴얼에서 제공되는 테이블 보는 방법이랑 Instruction 해석하는 방법을 배우시면 됩니다. (GroupID 는 ModR/M 을 같이 사용합니다.)

      IA32 Instruction 해석 방법은 제가 쓴 책에는 포함되어 있는데, 블로그에는 그 내용이 없습니다. 다른 사이트에서 정보를 얻으시는 것이 좋을 것 같습니다.

      인텔 매뉴얼을 직접 보시고 공부하셔도 됩니다만 너무 방대하고 혼자 익히려면 시간도 많이 걸립니다. 제가 신규직원들을 가르쳐보니 한시간이면 곧 잘 하더군요. 그런데 정작 제가 혼자 공부할 때는 1주일이 걸렸었습니다.

      감사합니다.

  8. letmeln 2012.03.09 00:58

    책은 언제쯤 나오나요.. 기다리고 있습니다만..

  9. 모리 2012.03.13 11:39

    자료 감사해요

  10. windofme 2012.03.14 04:50

    몇년전에 패커 때문에 들락 거리면서 이것 저것 주워 보고 하면서 블로그를 헤짚고 다녔었는데 오랜만에 다시 방문해서 다시보니 항상 새롭습니다.

    요것 조것 보고 배운덕분에 취직도 하고 밥벌이로 삼을 기술이 되어 버렸네요
    감사하다는 글 한편 남기고 싶어서 한자 적고 가겠습니다.

    언제 한번 궁금한거 한보따리랑 소주나 싸들고 한번 뵙고 싶네요 ㅎㅎ

    계속 좋은글 부탁드립니다.

  11. 감염오리 2012.03.16 23:46

    오랜만의 포스팅이네요^^
    최근들어 학교 공부(저는 중학생이라서요 ㅠㅜ)에 매진하고, JAVA언어가 끌려서 공부하는 중인데...
    하아... 리버싱을 최근 2달동안 거의 안해본 것 같습니다... 흥미도 떨어진 것 같고... 어떠한 문제가 주어졌을 때 그 문제를 해결할때 느끼는 성취감으로 약 7개월 정도 했었습니다만, 어느 정도의 시기가 되니, 제가 풀기에는 너무 쉽거나(이미 풀어본 것들 말이죠^^) 너무 어려운 것들만 있어서...
    조언 부탁드려도 될까요??? 리버싱을 어떻게 해 나아가야 할지...ㅠㅜ

  12. 2012.06.19 07:56

    비밀댓글입니다

  13. 학생 2012.10.18 02:54

    안녕하십니까 ^.^

    저는 공학생입니다..ㅎㅎ 제가 진법변환에관한 부분을듣고있고 저만의 교재를만드는데 여기서본내용을 인용해도될런지요 ?^^ 상업적으로 사용하는게아니라 제가 교재로만들어 보관하고 읽고 하려고하는데 괜찬을까요 이런말드리는게 부담스러울지 걱정되네요

    • reversecore 2012.10.19 01:31 신고

      안녕하세요.

      먼저 질문을 해주셔서 감사합니다.

      개인적으로 혼자면 보시고 쓰실 거라면 전부 인용하셔도 좋습니다.

      혹시 다른 사람에게 전달하실 예정이라면 출처만 밝혀주시면 감사하겠습니다. ^^~

  14. 학생 2012.11.07 21:03

    참고하고갑니다. 감사합니다.

  15. 여기다써도될지.. 2013.06.22 01:21

    크랙미와 키젠미를 풀고 언팩미를 푸는도중
    Themida 로 패킹한 프로그램중 디버거를 감지하여 프로그램자체가 실행이되지않는경우는
    올리디버거 플러그인 옵션을 사용하라는데 64비트에서는 ollydbg200 플러그인이 사용안되는가요?

+ Recent posts