🔒 내부용 · 비배포 (포트폴리오에는 일반화 버전만 공개)
0한눈에
- 대상: 코드 레벨 보안 분석 도구의 함수 추상화(정규화) 단계.
- 증상: 변수명·타입만 다른 사실상 동일한 함수가 매번 다른 시그니처로 추상화되어 유사성 분석 정확도가 저하.
- 핵심 해결: 익명 함수 명명을 함수 내용 기반 해시값으로 대체해 고유·일관된 함수명 부여.
1왜 문제였나
도구는 소스를 함수 단위로 추상화한 뒤 시그니처를 비교해 유사 코드·취약점을 탐지한다. 그런데 동일 로직 함수가 일관되게 추상화되지 않으면 같은 함수가 서로 다른 것으로 인식돼 매칭이 깨진다. 특히 익명 함수는 매번 다른 이름으로 처리되어, 동일 함수임에도 별개로 잡히는 게 가장 컸다.
2진행 순서
- C++ / Java 등 여러 언어 소스로 심층 테스트하며 불일치 케이스 수집
- 원인 규명: 구문 분석기가 특정 키워드(
final, Map<> 등)를 처리하지 못함 + 내부 정규식 로직 결함
- 해결: 익명 함수가 매번 다른 이름으로 처리되는 문제를, 함수 내용 기반 해시값으로 고유·일관된 함수명으로 대체하는 로직 개발
- 적용 후 추상화 정확성·일관성, 유사 코드 탐지 개선 확인
원인이 하나가 아니었다. 파서(키워드/제네릭 처리)와 정규식 로직 두 갈래를 분리해 각각 확인해야 했다.
같은 내용이면 항상 같은 해시 → 같은 함수명. 익명 함수의 "매번 다른 이름" 문제가 구조적으로 해소.
3온보딩 포인트
- 추상화 정확도 = 유사성/취약점 분석 정확도. 함수명 일관성이 매칭 품질을 좌우한다.
- 다언어(C++/Java) 테스트가 필수: 키워드·제네릭(
final, Map<>) 같은 언어 특성에서 파서가 깨진다.
- 식별자 기반 명명 대신 내용 기반 해시 명명을 쓰면 변수명·타입·익명 여부와 무관하게 동일 로직을 안정적으로 동일시할 수 있다.
4공개(포트폴리오)와의 차이
공개 버전(human/portfolio/items/function-abstraction-hashgen.html)은 내부 도구·코드네임 등 식별정보를 제거하고 "코드 유사성 분석 도구"로 일반화해 문제·접근·임팩트 중심으로 정리했다. 이 내부 문서는 본인 참고/온보딩용으로 도구·구현 디테일을 더 직접적으로 기술한다.