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

Ghidra 로 Remcos 멀웨어를 분석하는 도중, Not enough space to create DataType
에러가 발생하여 이에 대한 해결법에 대해 다뤄본다.
문제가 발생한 곳은 아래 코드다. Shell_NotifyIconA
의 2번째 인자로 0x474b48 주소를 전달하고 있고, 위 코드에서는 2번째 인자 역참조 구조체인 NOTIFYICONDATAA
의 멤버 변수들을 셋팅하고 있는 듯한 모습이다.

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

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

위 에러 메시지가 발생한 이유는 대상 변수를 NOTIFYICONDATAA
로 변경하기 위해 필요한 공간을 확보하지 못 했기 때문이다. NOTIFYICONDATAA
는 첫 번째 멤버 변수 cbSize
에 해당 구조체의 크기를 지정하고 있다. 위 코드에서는 cbSize
값에 0x1fc 를 셋팅했으니, 데이터 타입 변경을 위해 0x1fc 만큼의 공간이 필요하다.
DAT_00474b48
변수의 데이터 상황을 살펴보자. 유감스럽게도 다른 코드를 분석하는 도중 0x474b4c 주소에 WORD_00474b4c
라는 이름의 라벨을 생성하고, 데이터 타입을 지정해놓은 상태이다. 내가 지정한 라벨 때문에 0x1fc 크기만큼의 공간 확보에 실패한 것이다.

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

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

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