Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CodeCut — 객체 파일 경계를 찾기 위한 Ghidra 플러그인입니다. | Kitploit
도구/GitHubGitHub/jhuapl/codecut
Static AnalysisReverse EngineeringBinary AnalysisMachine Learning
GitHubjhuapl/codecut

CodeCut

객체 파일 경계를 찾기 위한 Ghidra 플러그인입니다.

저장소 보기
131237개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Ghidra용 CodeCut 플러그인

DeepCut / CodeCut GUI용 Ghidra 플러그인

작동 원리

CodeCut을 사용하면 Ghidra에서 함수를 오브젝트 파일에 할당한 다음 오브젝트 파일 수준에서 바이너리와 상호 작용할 수 있습니다. 함수는 Ghidra 데이터베이스의 Namespace 필드를 설정하여 오브젝트 파일에 할당됩니다. DeepCut은 초기 오브젝트 파일 경계를 설정하려고 시도하며, 사용자는 CodeCut Table 창에서 이를 조정할 수 있습니다.

왜 유용한가?

대부분의 바이너리는 여러 소스 코드 파일에서 비롯됩니다. 리버스 엔지니어링 시 RE 분석가는 어떤 함수들이 서로 관련되어 있고 따라서 동일한 소스 파일에 속했을 가능성이 높은지에 대한 감각을 자주 키우게 됩니다. CodeCut을 사용하면 분석가는 "이 함수 블록이 OS 함수라고 생각한다"와 같은 가설을 세울 수 있습니다. 이제 해당 영역에 탐색되지 않은 함수가 있으면 디스어셈블리와 디컴파일에서 단순히 FUN_XXXXXXXX 대신 OS::FUN_XXXXXXXX로 표시됩니다. 이는 컨텍스트에서 볼 때 함수가 어떤 용도로 사용될 수 있는지 더 빠르게 이해하는 데 도움이 됩니다.

플러그인 설치

일반적인 Ghidra 확장 프로그램 설치 절차를 따르세요. CodeCut 및 DeepCut 확장 프로그램 zip을 $GHIDRA_INSTALL_DIR/Extensions에 복사한 다음 기본 Ghidra 창에서 File -> Install Extensions을 선택하고 CodeCut 및 DeepCut 상자를 선택하세요. Ghidra는 재시작이 필요하다고 알려줄 것입니다. 이제 Ghidra는 플러그인이 기본 버전의 주/부 버전(major/minor)과 일치하기만 하면 되고 패치 버전은 필요하지 않으므로, 우리는 짝수 주/부 버전만 릴리스할 계획입니다.

참고: 재시작 후 CodeBrowser 창을 로드하면 Ghidra가 새 플러그인을 발견했으며 구성할지 묻는 메시지를 표시합니다. 이 창에는 CodeCut만 나타납니다. DeepCut은 일회성(one-shot) 분석기이기 때문입니다(여전히 설치되어 있음).

네이티브 Python 경로 및 Python 종속성 구성

CodeCut과 DeepCut은 모두 네이티브 PyGhidra 확장 프로그램에 의존하며 Jython과 호환되지 않습니다. CodeCut은 모듈 이름 추측에 네이티브 Python을 사용합니다. DeepCut의 모델 추론은 네이티브 Python에서 실행됩니다.

네이티브 Python 종속성

CodeCut:

  • nltk

DeepCut:

  • torch
  • torch-geometric
  • networkx
  • scipy

종속성을 설치하려면 다음을 실행하세요:

root@kitploit:~
pip install nltk
pip install torch torch-geometric networkx scipy

PyGhidra에 연결된 Python 설치를 사용하세요.

DeepCut 분석 실행

DeepCut은 초기 자동 분석 후에 일회성(one-shot) 분석기로 실행하는 것이 가장 좋습니다. Analysis -> One Shot -> Deepcut을 선택하세요. DeepCut이 실행된 후 Symbol Table 보기의 Namespace 필드를 확인하여 결과를 볼 수 있습니다.

CodeCut 사용

DeepCut이 실행된 후에는 CodeCut Table 보기에서 오브젝트 파일 수준으로 상호 작용할 수 있습니다. Window -> CodeCut Table을 선택하여 테이블을 표시하세요. CodeCut 테이블은 기본적으로 각 모듈에 대한 심볼 테이블의 결합된 집합입니다.

CodeCut Table 창에서 Analysis -> Guess Module Names을 선택하여 CodeCut이 (문자열 참조를 기반으로) 모듈 이름을 추측하도록 할 수 있습니다. 이는 대상 실행 파일에 디버그 문자열이 많을 때 유용합니다. 이름 추측 스크립트는 먼저 소스 파일 이름을 찾으려고 시도한 다음, 여러 번 반복되는 문자열(바이그램 및 트라이그램 포함)로 대체합니다.

오브젝트를 마우스 오른쪽 버튼으로 클릭하고 Split Namespace Here / **Combine Namespaces.**을 선택하여 오브젝트 파일을 분할/결합할 수 있습니다. 함수를 끌어서 놓아 오브젝트 파일 간에 이동(오브젝트 파일 경계 변경)할 수 있습니다.

재컴파일 가능한 C로 내보내기

CodeCut에는 CodeCut 테이블에서 모듈을 마우스 오른쪽 버튼으로 클릭할 때 Export 메뉴 아래에 전체 모듈 또는 모듈의 하위 범위를 재컴파일 가능한 C로 내보내는 두 가지 옵션이 포함되어 있습니다. 이 기능은 EXPERIMENTAL(실험적)로 표시되어 있으며 충분히 테스트되지 않았습니다.

CodeCut 그래프

CodeCut에는 이제 바이너리 내 모듈의 상호 작용/계층 구조를 볼 수 있는 그래프 옵션이 있습니다. CodeCut Table에서 함수를 마우스 오른쪽 버튼으로 클릭하고 Add Namespace to Graph를 선택하여 네임스페이스를 그래프 보기에 추가하세요. 마우스 오른쪽 버튼을 클릭하고 Show Namespaces in Graph Filter를 선택하여 그래프에서 모듈을 제거할 수 있습니다.

제한 사항

클릭 위치 주의

오른쪽의 모듈 이름을 마우스 오른쪽 버튼으로 클릭할 수 있는 것처럼 보이지만, CodeCut은 실제로 테이블에서 강조 표시된 함수에 주의를 기울입니다. 예를 들어 object3의 함수가 강조 표시된 상태에서 왼쪽의 회색 object2 상자를 마우스 오른쪽 버튼으로 클릭하고 Combine/Split 또는 Rename Namespaces를 클릭하면 CodeCut은 object3에서 강조 표시한 함수 기준으로 작업을 수행합니다.

주소 범위 특이 사항

CodeCut은 시작 주소별로 네임스페이스를 정렬하려고 시도합니다. CodeCut이 모듈을 순서 없이 나열하는 것처럼 보일 수 있지만, 이는 일반적으로 Ghidra의 디스어셈블리 불규칙성 때문입니다. 예를 들어 다음과 같은 메모리 맵이 있다고 가정해 보겠습니다:

root@kitploit:~
object2:  0x00010000 - 0x00018000
object3:  0x00018004 - 0x00020000
...
object50: 0x00480000 - 0x00480a00

0x00480000의 함수가 0x00016008 주소로 분기하거나 점프한다고 가정해 보겠습니다. 이는 새로운 함수 진입점이어야 하지만, 하나의 함수만 이를 사용한다면 Ghidra는 이를 함수 진입점으로 표시하지 않고 FUN_00480000의 일부로 간주할 수 있습니다. 이는 object50의 실제 범위가 0x00016008 - 0x00480a00임을 의미합니다. 따라서 object50은 테이블에서 object2와 object3 사이에 나타납니다. CodeCut은 이 문제를 디버깅하는 데 도움이 되도록 모듈 범위를 Ghidra의 애플리케이션 로그로 출력합니다. 이 경우 0x00016008을 함수로 정의하면 object50의 경계가 올바른 값이 되고 object50은 테이블의 올바른 위치에 나타납니다.

나중에 함수 정의하기

DeepCut 분석이 실행된 후 정의되는 함수는 기본적으로 Global 네임스페이스에 추가됩니다. 향후에는 이를 가장 가까운 네임스페이스에 자동으로 추가하는 기능을 추가하거나 단일 함수를 특정 네임스페이스에 더 쉽게 직접 할당할 수 있는 메커니즘을 제공할 계획입니다.

빌드

구체적인 빌드 지침은 DeepCut 및 CodeCut 하위 폴더에 제공되어 있습니다.

도구 다운로드