사실 무척 간단한 테크닉인데, 지금까지 모르고 계속 모든 struct를 직접 만들었다가 이제야 알게 되어 작성해 본다.
[직접 만드느라고 고생한 struct PEB_LDR_DATA]
위 이미지는 직접 한땀한땀 만들어준 struct이다. 악성코드를 분석하는 도중 PEB에 접근하여 LDR을 가져오는 루틴이 있었고, 이를 좀더 보기 쉽게 하기 위해서 struct를 만든 것이다. LIST_ENTRY라는 struct도 따로 필요해서 직접 만들어 주었고, 여러모로 귀찮은 작업이 많았다. 그런데 알고 보니 PEB_LDR_DATA와 같은 윈도우에서 사용하는 범용적인 struct들은 이미 IDA에서 전부 만들어뒀다고 한다.
[Type libraries]
View->Open subviews->Type libraries 혹은 단축키로 Shift+F11을 눌러보자. 'Loaded Type Libraries'라는 탭이 하나 추가되는 것을 볼 수 있다.
[Load New Type Library]
우클릭->Load type library 또는 단축키 Ins를 누르면 위와 같은 창이 뜨면서 원하는 타입 라이브러리를 추가할 수 있다. 상당히 많은 라이브러리들이 있는데, 여기서 자기가 원하는 타입이나 struct가 선언되어 있는 라이브러리를 선택해서 로드하기만 하면 직접 struct 구조를 생성해 줄 필요 없이 그대로 사용 가능하다. 이제 위의 ntapi를 로드한 후, struct 탭에서 해당 struct를 생성하거나 변수에 타입을 지정해보자.
[자동으로 로드되는 타입들]
놀랍게도 위와 같이 자동으로 struct가 생성되고 반영된다.
나는 지금까지 무슨 삽질을 하고 있었던 것인가... 역시 머리가 나쁘면 몸이 고생한다.
'Reversing' 카테고리의 다른 글
디버깅 중인 프로세스 덤프하기 (0) | 2019.05.08 |
---|---|
IDAPython을 이용하여 GetProcAddress 네이밍 자동화하기 (0) | 2018.12.06 |
IsDebuggerPresent와 바이너리 패치 (0) | 2017.05.24 |
64비트 Windows에서 32비트 악성코드 분석 시 유의할 점 (0) | 2017.01.04 |
[ARM] Reversing.kr HateIntel 분석 (0) | 2016.04.22 |