Ghidra Not enough space to create DataType 에러 해결법

Ghidra Not enough space to create DataType 에러 해결법

Ghidra 로 Remcos 멀웨어를 분석하는 도중, Not enough space to create DataType 에러가 발생하여 이에 대한 해결법에 대해 다뤄본다.

문제가 발생한 곳은 아래 코드다. Shell_NotifyIconA 의 2번째 인자로 0x474b48 주소를 전달하고 있고, 위 코드에서는 2번째 인자 역참조 구조체인 NOTIFYICONDATAA 의 멤버 변수들을 셋팅하고 있는 듯한 모습이다.

NOTIFYICONDATAA 구조체를 셋팅하는 코드

DAT_00474b48 변수를 NOTIFYICONDATAA 데이터 타입으로 변경하면 분석이 편해질 거라 판단하여 타입 변경을 시도해보았다.

NOTIFYICONDATAA 로 데이터 타입 변경

하지만 아래와 같이 Not enough space to create DataType 에러가 발생하며 데이터 타입 변경에 실패했다.

데이터 타입 변경 실패 메시지

위 에러 메시지가 발생한 이유는 대상 변수를 NOTIFYICONDATAA 로 변경하기 위해 필요한 공간을 확보하지 못 했기 때문이다. NOTIFYICONDATAA 는 첫 번째 멤버 변수 cbSize 에 해당 구조체의 크기를 지정하고 있다. 위 코드에서는 cbSize 값에 0x1fc 를 셋팅했으니, 데이터 타입 변경을 위해 0x1fc 만큼의 공간이 필요하다.

DAT_00474b48 변수의 데이터 상황을 살펴보자. 유감스럽게도 다른 코드를 분석하는 도중 0x474b4c 주소에 WORD_00474b4c 라는 이름의 라벨을 생성하고, 데이터 타입을 지정해놓은 상태이다. 내가 지정한 라벨 때문에 0x1fc 크기만큼의 공간 확보에 실패한 것이다.

0x474b4c 주소에 셋팅된 라벨

이 라벨은 이제 필요 없으니 제거하자. 라벨을 우클릭, Clear With Options 를 클릭한다.

라벨 우클릭 메뉴

팝업되는 창에서 Code 를 체크하고 OK 를 눌러 설정 값을 초기화한다.

Clear With Options 메뉴

다시 DAT_00474b48 변수에 데이터 타입 변경을 시도하면 의도한 대로 적용되어 아래와 같이 코드가 해석되는 것을 확인할 수 있다.

데이터 타입 변경 후 코드