본문 바로가기
study

Decompiler - IDA Pro에서 32bit-ARM 악성코드 파일의 Syscall 자동검색 IDAPython 코드

by ms-eo 2025. 11. 18.

[선행 지식]

  • IDA Pro
  • 바이너리 형태의 실행파일을 분석해 고급 언어로 Decompile 하는 도구
  • 여러 아키텍처의 바이너리 파일을 분석해서 C나 C++같은 언어로 변환
  • IDAPython
  • IDA는 Python으로 제작된 프로그램으로, 파이썬을 이용해 스크립트를 제작하여 고급 분석이 가능
  • IDA를 위해 제작된 Import 함수들이 존재함 => API처럼 사용하면 됨
  • Syscall = System Call
  • 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인퍼테이스
  • 하드웨어를 직접적으로 사용하는 read, write, open 등의 행위를 사용자가 직접 수행할 경우 컴퓨터에 치명적 오류가 생길 수 있음

사용자가 직접 작성하는 C, Python 등의 고급 언어는 직접 read, write 등의 행위를 수행할 수 없음

사용자는 API를 이용해 read, write 등의 행위를 요청해야 함 => System Call을 통해 요청 => 커널 단에서 syscall 수행한 뒤 결과값을 사용자에게 돌려줌

Syscall Table은 각 syscall 정보를 숫자 값으로 저장하고 있는 테이블

ex) 사용자가 User Space에서 write API를 이용해 write("hello world") 요청 -> 커널에서 write에 할당된 syscall을 syscall table에서 검색 > 찾은 값으로 write 수행 > 결과값을 User Space에 돌려줌

  • 악성코드가 syscall을 사용하는 이유
    • 악성코드는 분석자의 분석을 방해하기 위한 안티 리버싱 방법을 사용함
      • read, write, send, recv 같은 API들은 바이너리의 String 추출이나 IDA같은 디컴파일러에서 분석 시, 바로 API와 연관된 String 확인 가능 => 분석자의 분석이 용이해짐
    • 분석자의 분석을 방해하기 위한 목적으로 string이 잘 보이는 API 사용 대신 syscall을 직접 사용함
    • ex) close() ----->>>> syscall(3)

[IDAPython - idapython_arm32_syscall_AutoExtract.py 활용법]

  1. IDA에 분석이 필요한 32bit ARM 악성코드 업로드

* 맨 아래 커맨드 작성 창이 IDC가 아닌 Python으로 설정되어 있어야 함

* Python이 설정되어 있지 않을 경우 IDA 디렉터리에 Python3이 깔려 있는지, 정확한 경로에 있는지 확인

* IDA의 파이썬 버전이 2로 되어 있을 경우 idapyswitch를 이용해 3로 변경해줘야 함

2. IDAPython 스크립트 실행 창 (Shift+F12) 열기

  • Scripting language가 Python으로 설정되어 있는지, Tab Size가 4로 설정되어 있는지 확인

3. idapython_arm32_syscall_AutoExtract.py 소스코드 붙여넣기

( 해당 파일은 댓글로 요청하면 드리겠습니다)

  • 붙여넣은 후 "Run" 클릭

4. 실행 결과 확인

  • Output 결과창에서 Syscall 자동 추출 결과 확인
  • 어느 함수의 어느 address에서 어떤 syscall을 사용했는지 알 수 있음 > 분석에 다양하게 활용 가능

ex) 어느 함수에서 파일 오픈 시도가 있는지 확인 -> open syscall 검색

어느 함수에서 네트워크 전송 시도가 있는지 확인 -> recv syscall 검색

결론 : 안티 리버싱 목적으로 사용하는 syscall 직접 접근 방식을 사용하는 악성코드를 IDA에서 분석 시, 해당 IDAPython 코드를 이용해 빠르게 분석 가능