리버서들이 가장 많이 사용하는 도구인 디버거(Debugger)에 대해 이야기 해보도록 하겠습니다.


리버싱 현업에서 사용되는 Debugger 들을 간략히 정리해 보겠습니다. 


1. OllyDbg



OllyDbg 는 사용이 편리하고 가볍고 빠른 무료 Debugger 입니다. 도저히 무료라고 보기 힘든 다양한 기능과 많은 Plugin 을 통한 확장성으로 인하여 수 많은 리버서들의 열광적인 지지를 얻고 있습니다. 

OllyDbg 는 리버싱 초보부터 전문가까지 폭넓게 사용되는 가장 인기 있는 디버거입니다.


<그림 1 - OllyDbg>

OllyDbg 의 장점으로는 가볍고 빠르며 상당히 다양한 기능과 많은 옵션을 제공한다는 것입니다. 또한 PlugIn 기능을 통한 확장성을 제공합니다. 가장 사용자가 많고 OllyDbg 를 이용한 리버싱 강좌가 많이 있기 때문에 초보자도 쉽게 배울 수 있습니다. 그리고 무료로 제공된다는 점도 큰 장점입니다.

단점으로는 개인이 혼자서 개발한 거라 업데이트와 후속 제품의 개발 주기가 늦다는 것입니다. 다행히 최근에 OllyDbg 2.0 Final 버전이 릴리즈 되었습니다. 비록 겉모습은 이전 버전과 동일하지만 내부 코드는 완전히 새롭게 프로그래밍 하여 속도와 정확성 등이 크게 향상되었다고 하네요.


2. IDA Pro



Hex-rays 사의 IDA Pro 는 현재 최고의 Disassembler & Debugger 라고 말할 수 있습니다. 과거에는 Disassembler 성격이 강했으나, 수많은 업데이트를 통해 Debugger 기능 또한 막강해 졌습니다. 

수 많은 다양한 기능들을 설명하는 전문 서적이 따로 존재할 정도로 엄청난 기능을 자랑합니다. 또한 Decompiler Plugin 등을 추가로 장착하면 리버싱이 말할 수 없이 편리해 집니다. 그만큼 가격도 비싸지요.

많은 리버싱 전문가들이 IDA Pro 를 주력으로 삼으면서 리버싱 전문 툴로써의 입지를 탄탄히 굳히고 있습니다.

장점으로는 다 써보지도 못할 정도로 다양한 기능과 충실한 업데이트를 들 수 있습니다. 다만 가격이 비싸고 사용법이 비교적 복잡하며 초기 로딩 시간이 좀 걸린다는 것을 단점으로 들 수 있겠습니다. 


<그림 2 – IDA Pro>


3. WinDbg



WinDbg 는 DOS 시절 16 bit 디버거인 debug.exe 의 Windows 버전입니다. 


<그림 3 – Debug.exe>

콘솔 화면에서 키보드만으로 디버깅을 하는 debug.exe 의 사용자 인터페이스를 그대로 가져왔습니다. 저는 이런 스타일의 프로그램을 매우 좋아하지만 반대로 거부감을 갖는 분들도 상당수 계십니다.

유저 모드 디버깅(User Mode Debugging) 분야에서는 사용자 편리성이 뛰어난 OllyDbg 나 IDA Pro 가 꽉 잡고 있습니다. 따라서 WinDbg 는 주로 커널 모드 디버깅(Kernel Mode Debugging)에 주로 사용됩니다. 전설적인 커널 디버거인 SoftICE 의 후속 제품 개발이 중단된 이후 커널 디버깅 분야에서 사실상 독보적인 존재가 되어 버렸습니다. (경쟁 제품이 없는 상태입니다.)

역사가 오래 된 만큼 기능도 다양하고 사용 방법에 대한 전문 서적이 여러 권 나와 있습니다.


<그림 4 - WinDbg>

장점은 커널 디버깅이 가능하다는 것과 Microsoft 에서 직접 만든 디버거라는 점입니다. 시스템 파일에 대한 심볼(Symbol)을 직접 다운 받을 수 있어서 시스템 내부 구조체(Undocumented 포함) 및 API 에 대한 정보를 얻을 수 있습니다. 또한 Windows OS 의 덤프 파일을 읽어 들여 분석할 수 있기 때문에 시스템 크래쉬(Crash)가 발생했을 때 원인을 분석해 낼 수 있습니다. 

단점으로는 다른 디버거들에 비해 좀 떨어지는 사용자 환경과 편의성을 꼽을 수 있겠습니다. (예를 들어 코드에 직접 주석을 입력할 수 없고, Disassembly 코드에서 호출되는 API 이름도 잘 표시되지 않는 등의 불편함이 있습니다.)

그래도 커널 드라이버 개발과 유지보수에 필수적으로 사용되는 디버거 입니다. 리버싱에서는 커널 드라이버 파일 분석에 주로 사용됩니다. 최근에는 대부분 WinDbg 와 VirtualPC(또는 VMWare) 조합으로 커널 디버깅을 수행합니다. 향후 여러분들의 리버싱 실력이 쌓인 후 커널 드라이버(예: Rootkit) 등을 분석할 때 자주 사용될 것입니다.

+---+

지금까지 리버싱 현업에서 사용되는 대표적인 디버거들에 대해서 간략히 살펴보았습니다.

제 경우에는 유저 모드 디버깅에 OllyDbg 1.10 를 사용하고, 커널 모드 디버깅에는 WinDbg 를 사용합니다.

ReverseCore
저작자 표시 비영리 변경 금지
신고

'tool' 카테고리의 다른 글

PEView.exe  (30) 2013.01.27
HxD.exe 기능 추가!  (12) 2012.06.14
리버싱 현업에서 사용되는 디버거(Debugger)들  (31) 2010.09.29
InjDll.exe – DLL Injection/Ejection 전용 도구  (83) 2010.03.15
Process Explorer - 최고의 작업 관리자  (1) 2009.05.03
www.virustotal.com  (3) 2009.03.20
www.google.com  (2) 2009.03.06
  1. reversecore 2010.09.30 19:25 신고 댓글주소 | 수정 | 삭제 | 댓글

    - 봉이님 댓글

    ㅁㅁ님!
    제가 리버싱 공부하면서, 안티리버싱, 악성코드 분석에 관심이 생겨서 인터넷 곳곳 돌아 봤는데요..
    안랩 연구원들 분께서 고려대, 서울여대 악성코드 분석 강의를 하시는 것 같더라구요..
    관련 강의자료를 구할수 있을까요?
    꼭 부탁드립니다.

    • reversecore 2010.09.30 19:26 신고 댓글주소 | 수정 | 삭제

      안녕하세요~

      ^^ 제 실명을 거론 하셔서 제가 약간 가렸습니다. 양해바랍니다.

      강의에 대해서 잘 알고 계시군요?

      해당 자료는 수강생 이외에는 비공개 입니다.

      참고로 저도 한 섹션을 맡았습니다. ^^

  2. reversecore 2010.09.30 19:25 신고 댓글주소 | 수정 | 삭제 | 댓글

    - 봉이님 댓글

    core님이 ㅁㅁ님 맞죠?
    혹시 core님 이름이 틀렸을수도 있으니, 제가 위에 표현한 ㅁㅁ님은 core님입니다.

    • reversecore 2010.09.30 18:45 신고 댓글주소 | 수정 | 삭제

      ^^ 네 제가 그님(?) 맞습니다.

      봉이님께서는 혹시 저를 아시는 분인가요?
      너무 친숙하게 물어보셔서요~ ^^
      (비밀 댓글로 답해주시면 됩니다.)

  3. 2010.10.01 15:39 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2010.10.03 23:07 신고 댓글주소 | 수정 | 삭제

      안녕하세요.~

      네, 그러셨군요. ^^

      리버싱을 공부하고 싶으시다는 열의가 느껴집니다.

      죄송하지만 강의 자료를 제공해 드릴 수는 없습니다. (제가 작성한 거라도 불가능합니다.)

      그 대신 공부하시다가 막히시는 부분이 있을때 질문 올려 주시면 제 능력껏 답변 달아 드리겠습니다.

      감사합니다.

  4. 김종현 2010.10.02 23:40 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    처음 인사드리는 김종현입니다.
    테스트중 이상한 현상이 있어 문의 드립니다.

    아래와 같이 정말 간단한 DLL을 만들어 Injection하였는데
    이상하게 iexplore의 자식 프로세스들에서는 ::CreateFile()로
    파일이 생성되지 않는데
    그 이유가 심히 궁금하고
    해결방법에 대하여 고수님들께 조언을 구합니다.

    #include "stdafx.h"
    #include <stdio.h>
    #include <tchar.h>

    /////////////////////////////////////////////////////////////////////////////
    // _Inject

    class _Inject
    {
    public:
    static BOOL IsValidModule(LPCTSTR module_name)
    {
    static LPCTSTR valid_module_name_list[] =
    {
    //_T("notepad.exe"),
    _T("iexplore.exe"),
    NULL
    };
    for (int i=0; valid_module_name_list[i]; i++)
    {
    if (!_tcsicmp(module_name, valid_module_name_list[i])) return TRUE;
    }
    return FALSE;
    }
    }; //_Inject

    static BOOL IsValidCurrentModule()
    {
    TCHAR full_name[MAX_PATH];
    HMODULE module_handle = ::GetModuleHandle(NULL);
    ::GetModuleFileName(module_handle, full_name, MAX_PATH);
    TCHAR* module_name = full_name;
    for (int i=0; full_name[i]; i++)
    {
    if (full_name[i] == '\\') module_name = full_name + i + 1;
    if (full_name[i] == '/') module_name = full_name + i + 1;
    }
    if (!_Inject::IsValidModule(module_name)) return FALSE;
    LPCTSTR file_name = _T("c:\\zzz.txt");
    HANDLE file_handle = ::CreateFile(file_name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (file_handle != INVALID_HANDLE_VALUE) ::CloseHandle(file_handle);
    else
    {
    TCHAR text[256];
    _stprintf(text, _T("ERROR: Cannot create file \"%s\"!!!\nPID: %d"), file_name, ::GetCurrentProcessId());
    ::MessageBox(NULL, text, module_name, MB_OK);
    }
    return TRUE;
    }

    BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
    {
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    if (IsValidCurrentModule())
    {
    }
    break;
    case DLL_THREAD_ATTACH:
    break;
    case DLL_THREAD_DETACH:
    break;
    case DLL_PROCESS_DETACH:
    break;
    }
    return TRUE;
    }

    EXTERN_C __declspec(dllexport) LRESULT GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
    {
    return CallNextHookEx(NULL, code, wParam, lParam);
    }

    • reversecore 2010.10.04 00:14 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      iexplore.exe 의 자식 프로세스라면...
      7 버전 이후의 탭으로 생성되는 서브 프로세스를 말씀하시는 건지요?

      제 경우에는 정상적으로 c:\\zzz.txt 파일이 생성되었습니다.
      (WinXP SP3 & Win7)

      혹시 다른 경우를 말씀하시는 거라면 다시 질문 올려주세요~ ^^

      감사합니다.

    • 김종현 2010.10.04 12:22 신고 댓글주소 | 수정 | 삭제

      테스트해 주셔서 감사합니다.
      그런데 정작 중요한 환경을 알려 드리지 않았네요.
      제가 테스트한 IE는 버전8이고
      말씀하신데로 탭으로 생기는 서브프로세스에서는
      전부 문제가 발생하고 있습니다.
      유독 부모프로세스만 문제 없구요.

      정확한 정보는 gmail로 다시 보내드리니
      IE8에서 다시 한번 더 봐 주시길 부탁드립니다.

    • reversecore 2010.10.05 21:21 신고 댓글주소 | 수정 | 삭제

      네, 제 테스트 환경과 동일하시네요~

      전 보통 최신 .NET Framework 가 설치되지 않은 환경에서의 실행을 보장하기 위해 /MT 옵션으로 빌드합니다.

      제가 테스트한 파일을 김종현님 email 로 보내드릴테니 한번 실행해 보시고 결과를 알려 주시기 바랍니다. ^^

      * 보안 프로그램등에서 차단당하는 경우도 있으니 참고하시기 바랍니다.

      감사합니다.

  5. lain32 2010.10.04 19:53 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 :D
    계속해서 좋은글을 많이 올려주셔서 제가 기초가 부실한 부분들이 있었는데
    많은 도움을 받고 있습니다.
    그리고 정말 자세하게 설명하셔서 너무나도 많은 도움이 되고 있구요.
    이렇게 좋은 자료들을 열정적으로 공개해주셔서 너무 감사드립니다.

    힘내시라고 감사에 글을 적어봤습니다. ㅎㅎ

  6. 2011.02.17 22:47 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2011.02.18 22:10 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      아주 멋진 크랙미 사이트를 만드셨군요~

      구경 잘 했습니다.

      제 경우에 블로그 홍보를 따로 해본 적은 없습니다. ^^

      이곳에 방문 하시는 분들은 대부분 google 과 naver 검색으로 찾아오시는 분들입니다.

      감사합니다.

    • 2011.02.18 23:02 댓글주소 | 수정 | 삭제

      비밀댓글입니다

  7. 2011.09.02 12:01 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2011.09.03 14:28 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      비슷한 시간에 디버거를 만드신 다는 질문이 여러개 등록되어있군요. ^^

      OllyDbg 정도의 범용 디버거는 매우 높은 수준의 개발 실력과 시스템에 대한 이해가 필요하다고 생각하시면 됩니다.

      다만 특정 상황에서만 간단히 사용한다면... (Disassembler 도 필요없고 GUI 도 필요없고... 단순한 명령어만 디버깅한다고 했을때... ) 개발 난이도는 상당히 낮출 수 있습니다.

      커널 디버거는 저도 아직 어떻게 만들어야 할지 어렴풋이 감만 잡고 있는 수준입니다. ^^~

      감사합니다.

  8. 비밀 2011.12.21 15:59 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요? ^-^
    책 원고가 완성되었다고 하셨는데.. 개인적으로. 가능하다면.
    Immunity Debugger 에 대해서도 설명을 넣으면 좋을것 같습니다 :)
    제가 알기로 OllyDbg 를 만들던 분이 Immunity 로 이직하시면서 Python 기반으로 개발하신걸로 알고 있습니다. 물론 무료입니다 :)
    http://debugger.immunityinc.com

    수고하세요~

    • reversecore 2012.01.11 07:53 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      Immunity Debugger 의 python 스크립트는 아주 좋습니다. 저도 많이 써봤지요.

      근데 OllyDbg 개발자는 다른 직업이 있고 그냥 취미로 OllyDbg 를 만든걸로 알고있는데요.

      Immunity Debugger 는 그냥 OllyDbg 클론이구요. 제가 잘 못 알고 있나요?

      감사합니다.

  9. 2012.02.09 20:13 신고 댓글주소 | 수정 | 삭제 | 댓글

    이뮤니티 디버거 같은경우 올리디버거와 같지만 디버거 자체의 라이브러리가 좋다고 말할수 있을거 같아요. 거기다 파이썬 코드로 스크립트 가능하니까 윗분은 뭐 그런 부분을 집어 달라는게 아닐까요?

  10. 고로아기 2012.04.04 13:12 신고 댓글주소 | 수정 | 삭제 | 댓글

    ollydbg로 분석해서 사진찍으신거 보니 스택보면 arg1이라고 나오고 설명에 무슨 함수 썼는지 옆에 다 나오더라고요... 전 안떠서 그런데 어떻게하나요 ㅠ.. 윈7 64비트인데 플러그인같은거 있던데 깔아도 안나와서요...

  11. 흠... 2012.10.29 00:19 신고 댓글주소 | 수정 | 삭제 | 댓글

    Cheat Engine 도 추가...
    분석할 때만 유용한 도구가 있더군요.
    요즘엔 올리디버거랑 IDA 안쓰고, CE를 사용중입니다.

    단순한 메모리 에디터 같은 경우 value를 잡고 변화한 value를 넣어 아닌 값들을 걸러내는데...
    이 아이디어를 확장해서...
    CE에서는 함수나 분기문 코드가 실행 되었는지 안되었는지,
    데이터 search 하는 것처럼 걸러내서 목표한 위치에 바로 갈 수 있으니까요.
    이게 핵심인듯...
    기존엔 프로시저들을 분석해야했지만, 이렇게 하니 시간을 대폭 줄일 수 있네요.

    • reversecore 2012.10.30 07:15 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      좋은 정보 감사합니다. ^^~

      업무적으로 분석을 하다보면 시간에 쫒길때가 많은데요.
      Cheat Engine 을 구해서 꼭 살펴봐야 겠습니다.

      감사합니다.

  12. 리버서 2012.12.02 23:35 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    저는 옴니아2에서 주로 어플을 짜는데요.
    옴니아2에서 돌아가는 어플은 올리디버그가 안되는것 같은데요.
    옴니아 같은 스마트폰 어플 디스어셈블 하는 방법 같은 거 있으시면 좀 알려주시면 감사하겠습니다.

    • reversecore 2012.12.04 21:01 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      옴니아2라면 Windows CE 말씀하시는것 같군요.

      그건 아마 ARM 계열의 CPU를 사용하겠죠?
      OllyDbg 는 x86 계열의 CPU만 디버깅 할 수 있습니다.

      옴니아 어플 디버깅 방법은 저도 아는 바가 없습니다. ^^

      감사합니다.

  13. 비비케이 2013.03.02 00:37 신고 댓글주소 | 수정 | 삭제 | 댓글

    Cheat Engine도 확실히 괜찮은 편인데 ... 없는거 보고 약간 흠칫했네요. 올리디버거보다 훨씬 선호하는 편입니다.

    • reversecore 2013.03.04 21:15 신고 댓글주소 | 수정 | 삭제

      안녕하세요~

      그렇군요~ 저희 분석가들도 손에 익은 도구만 쓰는 경향이 있어서 다들 IDA Pro 아니면 OllyDbg 만 쓴답니다. CE 도 꼭 써봐야 겠어요~ ^^

      감사합니다.

  14. 크로우 2013.05.01 18:40 신고 댓글주소 | 수정 | 삭제 | 댓글

    올리디버거에서 주석이나오는 부분들에서
    API주석이 제대로안나오는데 어떻게해야되죠?
    책에서는
    Style = MB_OK|MB_APPLMODAL
    Title = "abex' 1st crackme"
    Text = "Make me think your HD is a co-rom"
    h0wner = NULL
    MessageBoxA
    이런식으로 나오는데
    저가 올리디버거를 켜서보면

    자세하게 안나오고 ASCII "문자열"
    이것만 나와요 ㅠㅠ.. 간혹 주소를 잘못찾은줄알고 헷갈려서 헤메네요 ..

  15. 허허실실 2013.05.02 01:51 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 책보고 열심히 따라 하는 잡생 입니다 ^^ 다름이 아니라 저는 올리디버거 실행 시키면
    You do not have administrative rights on this computer, As a result some debugging features may fail. To enable all OllyDbg features, please log in as administrator 라고 뜨네요 ,,,
    관리자 권한이 어쩌구 저쩌구 하는대요 작동은 되는대 뭔가 느낌표 표시랑 같이 떠서 경고문 같아요 .. 리버스코어님도 이런거 뜨나요 ??

  16. substr_sql 2013.07.09 12:08 신고 댓글주소 | 수정 | 삭제 | 댓글

    IDA PRO 와 현 올리디버거 의 디버거 Adminstraitive 를 같이 사용하면
    debugging Error 03 이 뜨는이유는 무엇일까요 ㄷㄷ;; [압박]

  17. 이x철 2015.01.26 10:36 신고 댓글주소 | 수정 | 삭제 | 댓글

    하드웨어로 밥벌이 하다 네트웤 nos 언어를 공부하다 보니 디버깅이 눈에 띄어
    OllyDbg를 찾게 되었네요..(아직 때는 아니지만요^_^)
    책도 있나 보군요..? 디버거들의 개념을 짚어 주셔서 도움 되었습니다.
    감사합니다(__)
    저와 같은 경고문을 보신 허허실실님...두번째 실행은 admin권한으로 실행 하셨겠죠?ㅎㅎ



#0. prologue

분야를 막론하고 기술자(특히 엔지니어)들은 자신만의 작업환경과 손에 익은 도구(장비)가 있습니다.

기술자(특히 엔지니어) 란 특정 업무를 위해서 필요한 도구를 아주 능숙하게 다룰 줄 아는 사람들입니다.

같은 도구를 사용하더라도 기술자의 능력에 따라서 전혀 다른 결과를 보여줍니다.
(더 나아가서 필요한 도구를 직접 만들어 내기도 합니다.)

또한 기술자들은 각자 자신만의 도구를 가지고 있으며
한번 손에 익힌 도구를 되도록 오래 쓰고 왠만해서는 바꾸려 하지 않습니다.
(바꿀 때도 될 수 있으면 같은 회사의 후속 제품으로 바꾸려고 하지요.)

남의 도구, 남의 작업환경에서 일을 하면 아무래도 불편하다고 생각합니다.

즉, 자신만의 작업환경과 자신만의 도구가 갖춰져야 그 기술자의 진정한 실력이 100% 발휘 된다고 할 수 있습니다.



#1. Reverse Code Engineer (Reverser)

리버서들은 어떨까요?

리버서도 역시 IT 엔지니어 범주에 들어가기 때문에 위에서 언급한 일반적인 기술자의 성향과 다를 바가 없습니다.

리버싱을 하기 위한 도구의 종류만도 수십 가지가 넘으며, 각 종류별로 다양한 제품들이 존재합니다.
또한 IT 분야의 특성상 계속해서 새로운 도구가 개발되고 있습니다.

도구의 종류만도 아래와 같이 매우 많습니다. (언급하지 못한 것도 많을 것입니다.)

disassembler
debugger - PE, script, etc
development tool - assembly, C/C++, etc
editor(viewer) - text, hex, resource, retistry, string, PE, etc
monitoring tool - process, file, registry, network, message, etc
memory dump
classifier
calculator - hex, binary
compare tool - text, hex
packer/unpacker
encoder/decoder
virtual machine
decompiler - VB, Delphi, etc
emulator
...



#2. 좋은 분석 도구 선택의 5 가지 기준

아래에 ReverseCore 만의 도구 선택 기준(가이드)을 제시합니다. (참고만 하세요~)


첫째, 도구 개수를 최소화시킨다.

남들이 쓴다고 해서 기능을 알지도 못하는 도구를 잔뜩 가지고 있어봐야 도움이 되지 않습니다.
자신에게 필요한 도구만을 각 종류별로 하나씩만 사용하는 것이 좋습니다.

자신의 실력에 맞는 것만을 고르고 차츰 하나씩 늘려나가시면 됩니다.

또한 중복된 기능의 도구들은 하나로 정리하는 것이 좋습니다.


둘째, 도구는 기능이 단순하고 사용방법이 편리한 것이 좋다.

실력이 늘어날 수록 사용해야 할 도구의 개수도 늘어납니다.
기능이 단순하고 인터페이스가 직관적일 수록 사용하기에 편리합니다.

여기서 기능이 단순하다는 말은 리버싱 도구치고는 단순하다는 말입니다.
(Windows 의 계산기, 메모장 수준을 생각하시면 안됩니다. ^^)

따라서 아무리 단순한 리버싱 도구를 하나 익히는 데만도 어느 정도 시간이 필요합니다.


셋째, 기능을 철저히 익힌다.

아무리 좋은 도구라도 사용할 줄 모르면 무용지물 입니다.

자신이 이미 가지고 있는 도구에서 제공되는 기능인데도,
그걸 알지 못하고 다른 도구를 찾는 분들이 많습니다.

일단 도구를 선택한 후에는 제공되는 메뉴얼을 한번 정독해보시는 것이 좋습니다.
자주 사용하는 기능의 단축키 정도는 외워 두시면 작업이 훨씬 수월합니다.
(단축키를 잘 쓰면 확실히 자타공인 전문가처럼 느껴집니다.)


넷째, 꾸준히 업데이트 한다.

리버싱도 IT 범주에 속하기 때문에 기술 발전 속도가 매우 빠릅니다.

새로운 기술에 대응하기 위해 도구들도 빠르게 변화하기 때문에
사용하는 도구의 업데이트는 매우 중요한 일입니다.

따라서 꾸준히 업데이트를 지원하는 도구를 선택하는 것이 좋습니다.


다섯째, 도구의 핵심 동작 원리를 이해한다.

도구를 더 잘 사용하기 위해서 동작 원리를 이해하는 것이 좋습니다.
더 나아가 테스트용 프로토타입을 만들 수 있다면 금상첨화 입니다.

이 부분을 간과하시는 분들이 매우 많습니다.
하지만 높은 수준의 리버싱 실력을 쌓기 위해서는 필수적인 사항입니다.

예를 들어 debugger 의 동작원리를 이해하고 있으면,
anti-debugging 기법을 잘 회피할 수 있습니다.

원리를 이해하지 못하고 도구에만 의존하면,
간단한 트릭도 해결하지 못하고 다른 도구를 찾아 나서야 합니다.
소위 말하는 "도구의 노예"가 되는 것이지요. (이것만은 꼭 경계해야 겠습니다.)



#3. epilogue

debug.exe 라는 프로그램을 아시나요?
MS-DOS 시절부터 존재하던 16-bit debugger 입니다. (XP 에도 존재합니다.)

커맨드 창에서 debug.exe 를 실행하고 '?' 명령으로 도움말을 보겠습니다.


위에 보이는 명령어가 전부입니다.

단순하지요?

제가 아는 어떤 분이 debug.exe 로 16 bit DOS 프로그램을 분석하시는 걸 본 적이 있습니다.

뭔가를 실행시키더니 키보드를 다다다다 두들기면서 화면이 번쩍 번쩍 넘어가는데,
바로 옆에서 지켜보면서도 무슨 작업을 하는지 도저히 알 수 없었습니다.
(눈이 그분의 작업 속도를 따라가지 못한 거죠.)

처음에는 실행되는 프로그램이 debug.exe 인지 조차도 몰랐었습니다.
(전 그때 당시 이미 debug.exe 를 한달 정도 써본 경험이 있었음에도 불구하고 말이죠.)

그리고는 다 됐다면서 결과를 넘겨 주시더군요.
그때 그분이 사용하신 프로그램이 debug.exe 라는 걸 알고 충격에 휩쌓였었죠.

'저 단순한 debug.exe 만으로 이 일을 이렇게 빨리 해냈단 말인가?' 하고 말이죠.

그 이후로 제가 어떤 도구를 고를 때 나름대로의 기준을 세우게 되었습니다.

그리고 하나의 깨달음을 얻었습니다.

"평범한 도구라도 극한까지 연마하면 천하에 다시 없는 비범한 도구가 된다."

마치 무림고수(武林高手)가 수련에 수련을 거듭해서 검(劍)을 버리고
결국에는 초(草)/목(木)/죽(竹)/석(石)을 모두 검처럼 사용할 수 있듯이 말이죠.


여러분은 어떻게 생각하시나요? ^^


저작자 표시 비영리 변경 금지
신고
  1. showtime 2009.10.08 13:00 신고 댓글주소 | 수정 | 삭제 | 댓글

    잘 읽고 갑니다~ ^^ㅋ

  2. 베리굿 2009.11.07 22:20 신고 댓글주소 | 수정 | 삭제 | 댓글

    감사합니다.^^

  3. 부자봉스 2009.11.12 00:43 신고 댓글주소 | 수정 | 삭제 | 댓글

    그렇게 생각합니다 흑

  4. reverse 2011.05.24 01:06 신고 댓글주소 | 수정 | 삭제 | 댓글

    이 블로그가 정말 도움이 많이 되네요
    ~~
    꾸준히 하루에 한문제씩이라도 풀어재끼껫습니다!!

  5. 석대진 2012.09.18 17:12 신고 댓글주소 | 수정 | 삭제 | 댓글

    요즘 이상하게 리버싱이 궁금해서, 책을 선택중에 있습니다. 30일날 나온다고 하여, 그때까지 블로그를 조심씩 읽어 보려고 합니다. debug.exe하니깐 피터 노턴 아저씨의 어셈블리 책이 생각나네요.





티스토리 툴바