ida 한글 string (character) 제대로 읽어오게 만들기. ㄴForensic

요즘 프로그램 디버깅 차원에서 몇가지 테스트를 하고 있는데
ida를 사용해서 몇가지 프로그램들을 역공학(reverse engineering) 디스어셈블링을 하고 있다.
그런데 이 ida 라는 놈이 영어권만 주로 지원하다보니 프로그램 내에 한글로 된 문구는 제대로 찾지 못하는 경향이 있다.

그래서 ida 홈페이지를 뒤지다 보니 ida 7.0 이후 버전에서는 culture 라는 (일반적으로 code page 정로로 보면 된다) 것을 지정해서
ida에게 관련 코드 페이지를 사용해서 분석하라고 할 수 있는 게 있었다.
그런데 문제는 이놈을 사용하기 위해서는 .clt (컬처 파일) 이 있어야 하는데
ida에서 기본으로 제공하는 것에는 한글.clt 파일은 없다는....

그래서 내가 만들어 봤다 (첨부파일 참조, zip 파일로 압축되어 있는데 압축을 풀면 korean.clt 파일 나온다).

korean.clt 파일을 아이다가 설치된 폴더 밑에 cfg 폴더 밑에 복사해서 넣어준다.

그리고 나는 ida 분석에 기본으로 이 korean.clt 를 사용하라고 해주어야 하기 때문에
cfg 폴더 밑에 ida 설정 파일인 ida.cfg 파일을 열어서 다음 부분에서 파란색으로 표기된 것을 넣어준다.

//-------------------------------------------------------------------------
//
//      Character translations and allowed character lists
//
//-------------------------------------------------------------------------

// the following characters are allowed in strings, i.e.
// in order to find end of a string IDA looks for a character
// which doesn't belong to this array:
// Note about CURRENT_CULTURE:
//  - if the IDB's default encoding for 1-byte/symbol strings, is not
//    UTF-8, a "culture" will be derived from it. E.g., "windows-1252"
//    will yield culture "Latin".
//  - this cannot be done automatically for UTF-8, since UTF-8 covers
//    the whole Unicode codepoints space.
//  - regardless of whether a "culture" can be derived from the default
//    encoding or not, this can be overriden by the CULTURE configuration
//    property (see below)
//  - the CURRENT_CULTURE directive tells IDA to consider all
//    codepoints that are defined as part of that culture, as valid
//    in the string literals.
//  - this applies to codepoints >= 0x80
//  - there are 2 ways to mention a "culture":
//     1) the name of a .clt file in the cfg/ directory. E.g., "Latin"
//        will correspond to the "clt_Latin.clt" file. In this case,
//        the culture will contain all codepoints specified by the file.
//     2) the name of a Unicode "Block". In that case, the culture will
//        contain all the letters (Lu, Ll & Lo) that this block contains.
//        The list of blocks are available there:
//        http://www.fileformat.info/info/unicode/block/index.htm , and
//        spaces in the block names must be replaced with underscores
//        in order to obtain culture names.
//    (It is worth pointing out that, in the first case, the file can,
//    itself, include cultures: either by file name or as Unicode block)
StrlitChars =
        "\r\n\a\v\b\t\x1B"
        " !\"#$%&'()*+,-./0123456789:;<=>?"
        "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
        "`abcdefghijklmnopqrstuvwxyz{|}~",
        // Those should be part of the 'Latin_1_Supplement' culture
        // u00A1, // INVERTED EXCLAMATION MARK
        // u00BF, // INVERTED QUESTION MARK
        u00A9, // COPYRIGHT SIGN
        u00AE, // REGISTERED SIGN
        u20AC, // EURO SIGN
        u00B0, // DEGREE SIGN
        u2013, // EN DASH
        u2014, // EM DASH

        /// This would bring all the codepoints from the 'clt_Latin.clt' file
        // Culture_Latin,

        /// This would bring all the _letters_ of the "Greek and Coptic"
        /// Unicode block (there is no culture file with the name
        /// 'clt_Greek_and_Coptic.clt')
        // Culture_Greek_and_Coptic,

        CURRENT_CULTURE;


// The default 'culture' to use. Using -DCULTURE="foo" is a convenient way of
// specifying the culture for just one input file.
// CULTURE="Latin_1_Supplement"; // letters within range u+0080..u+00ff
// CULTURE="Cyrillic"; // letters within ranges u+0400..u+04FF, u+2DE0..u+2DFF, u+A640..u+A69F, u+1C80..u+1C8F, u+0500..u+052F
// CULTURE="Latin"; // all codepoints in clt_Latin.clt file
// CULTURE="all"; // all letters of all Unicode blocks, plus all codepoints in .clt files
CULTURE="korean"

// The default 1-byte encoding to use
// ENCODING="UTF-8"
// ENCODING="windows-1252"

이렇게 한 이후에 다시 ida를 통해서 분석을 실시하면 이제 프로그램 내에 존재했던 한글들이 제대로 보이는 것을 알 수 있다.

그리고 위에 처럼 설정파일을 수정하는 게 귀찮다고 생각들면 걍 프로그램 실행에서 인자로 다음과 같이 줘도 된다.

-dENCODING="CP949" -dCULTURE="korean"

참고로 내가 만든 korean.clt 파일을 ida 제작사에게 보냈다.
다음 버전에서는 korean.clt 파일이 기본으로 추가되어서 배포될까? ㅎㅎ


덧글

댓글 입력 영역