Exeinfo PE

    Analysis

    그림을 그릴 수 있고, Check 버튼을 누르면 올바른 그림인지 확인하는 프로그램인 듯 하다.

    Wrong을 띄우는 문자열을 역참조해서,
    Wrong을 띄우는 메시지 박스를 호출하는 주소에 브레이크 포인트를 걸어주었다.

    이제 Check 버튼을 누르면, 거기서 멈출 것이다.

    높이 150, 너비 200인 24비트맵에서 비트열을 뽑아내서
    지정된 포맷을 사용하는 DIB로 버퍼에 복사하는 GetDIBits 함수를 통해 데이터를 가져온다.

    while 문에서 그림을 비트 하나씩 비교하고,
    if (v12 >= 0x15F90)에서 0x15f90은 비트맵 데이터의 끝을 의미한다.

    while 문에 들어있는 디스어셈블러 코드를 살펴보면,

    이렇게 cmp 명령어를 통해 비트 하나씩 비교를 하고 있다.

    디버깅했을때,
    [ecx]=0x4a90048,
    [eax+ecx]=(0xfb9ee018+0x4a90048)&0xffffffff=0x47e060

    0x4a90048에서 0x15f90을 더한 0x4aa5fd8까지,
    0x47e060에서 0x15f90을 더한 0x493ff0까지,

    각각 덤프를 떠서 비트맵을 확인해본결과,

    비교하는 그림은 47e060에서 덤프뜬 bmp 파일이었다.

    덤프떠서 bmp 파일을 확인하는 방법은

    그림판에서 세로 150, 가로 200인 24비트 이미지 파일을 만든다음,
    lines[150]에 있는 데이터만 지우고, header와 info는 유지한채
    덤프뜬 데이터를 붙여넣으면 bmp 파일을 열어서 확인할 수 있다.

    FLAG

    GOT

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다