Skip to main content

심볼 없는 바이너리에서 함수 윤곽 잡기

스트립된 바이너리는 함수명/디버그 정보가 사라져 흐름 추론이 핵심입니다. Ghidra/IDA에서 자동 분석이 흔들릴 때, 아래 루틴으로 윤곽을 잡으면 속도가 붙습니다.

1) 진입점 → 호출 그래프 거슬러 올라가기

  • main이 안 잡히면 _start에서 __libc_start_main의 인자 추적
  • 호출 그래프에서 입출력/네트워크/암호화처럼 특징적 API로 역추적

2) 문자열/상수 앵커 사용

  • strings에서 URL, 포맷 스트링, 에러 메시지를 찾고 XREF 역탐색
  • 매직 넘버(예: 0x9E3779B9, 0x1B873593)는 해시/암호 알고리즘 힌트

3) 함수 경계 재정의

  • 프로로그 패턴이 깨진 경우 스택 프레임/ret 위치로 범위 조정
  • 인라이닝이 많으면 기능 블록 단위로 이름을 붙여가며 확장

4) 동적 분석으로 보강

  • Frida/LLDB로 분기 조건과 인자 값을 로깅 → 정적 분석 가설 검증

심볼이 없어도 “앵커 → 주변 확장 → 동적 검증” 흐름이면 충분히 해석 가능합니다.