security/화이트햇

IDA에서 사용자 정의 구조체 생성하기

민사민서 2024. 1. 6. 19:32

왜 필요한가?

파일 스트림에서 Buffer로 0x36만큼 읽어오는 것으로 보아 Buffer는 최소 0x36 크기의 구조체

하지만 IDA가 인식한 버퍼의 크기는 2B*5 = 10B. 구조체를 제대로 인식 못 함

 

=> 구조체 만듦으로써 디컴파일 코드의 가독성 증가, 분석 용이

 

구조체 만들기

1. Structure → Add Struct Type (Insert 키) 하여 bmp_header 이름의 구조체 추가

 

2. bmp_header 클릭 후 d 키 눌러 구조체 내 변수(field) 추가

 

3. convert to array 기능을 이용해 1byte * 0x36 개의 변수를 만든다

 

4. 디컴파일 화면으로 돌아가 buffer 변수의 타입을 새로 생성한 구조체 타입으로 바꿔줌 (y 이용)

 

5. structure 화면으로 돌아가, 아는 정보들을 바탕으로 1바이트 변수들을 묶어 renaming 해주면 됨

    - d 버튼 눌러서 자료형 db -> dw/dd 등으로 바꿔주고(합치고)

    - n 버튼 눌러서 renaming 한다

 

    - 만약 d 눌렀는데 원하는 자료형 안나오면 alt+d 눌러서 추가 (8Byte DWORD 자료형과 같이)

 

6. 코드가 훨씬 보기 편해졌음

 

기타 IDA 단축키들

  • CTRL+F5: 바이너리 전체 디컴파일, c 파일로 추출 가능
  • u 로 undefine 후 d 로 다시 define
  • shift+/ : 계산기 뜸
  • alt+b : 바이트 단위 검색, 파일 시그니쳐 바이트 등을 검색할 수 있음
  • synchronize with 기능 : hexray 디컴파일 코드와 assembly 코드 같이 볼 수 있음