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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Ponce — IDA 2016 플러그인 콘테스트 우승작! 기호 실행이 단 한 번의 클릭으로 가능합니다! | Kitploit
도구/GitHubGitHub/illera88/ponce
Reverse EngineeringDebuggersMalware AnalysisCTFBinary Analysis
GitHubillera88/ponce

Ponce

IDA 2016 플러그인 콘테스트 우승작! 기호 실행이 단 한 번의 클릭으로 가능합니다!

저장소 보기
1.6k851년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Windows 빌드 OSX 빌드 Linux 빌드

Ponce

Ponce (발음: [ 'poN θe ] 폰-세)는 IDA Pro 플러그인으로, 사용자가 바이너리에 대해 쉽고 직관적인 방식으로 오염 분석(taint analysis)과 기호 실행(symbolic execution)을 수행할 수 있게 해줍니다. Ponce를 사용하면 최첨단 기호 실행의 모든 기능을 단 한 번의 클릭으로 사용할 수 있습니다. 전체가 C/C++로 작성되었습니다.

왜?

기호 실행은 보안 커뮤니티에서 새로운 개념이 아닙니다. 수년 동안 존재해 왔지만, 2015년경이 되어서야 Triton 및 Angr와 같은 오픈 소스 프로젝트가 이러한 필요를 해결하기 위해 만들어졌습니다. 이러한 프로젝트의 가용성에도 불구하고, 최종 사용자는 종종 특정 사용 사례를 직접 구현해야 하는 상황에 놓입니다.

우리는 리버스 엔지니어링에 가장 많이 사용되는 디스어셈블러/디버거 내에서 기호 실행 및 오염 분석을 구현하는 IDA 플러그인인 Ponce를 만들어 이러한 필요를 해결했습니다.

설치

Ponce는 IDA 버전 >= 7.0에서 x86 및 x64 바이너리 모두에서 작동합니다. 플러그인 설치는 최신 빌드에서 해당 파일을 IDA 설치 디렉토리의 plugins\ 폴더에 복사하기만 하면 됩니다.

호환성 문제를 피하기 위해 IDA 버전에 맞게 컴파일된 Ponce 바이너리를 사용해야 합니다.

OS 지원

Ponce는 Windows, Linux, OSX에서 기본적으로 작동합니다!

사용 사례

  • 익스플로잇 개발: Ponce를 사용하면 메모리 및 레지스터의 어떤 부분을 제어할 수 있는지, 그리고 ROP 가젯으로 활용할 수 있는 주소를 쉽게 확인할 수 있어 훨씬 효율적으로 익스플로잇을 개발할 수 있습니다.
  • 악성코드 분석: Ponce의 또 다른 용도는 악성코드 코드 분석과 관련이 있습니다. 특정 악성코드 패밀리가 지원하는 명령을 분석하는 것은 알려진 간단한 명령을 기호화하고 명령이 확인되는 모든 조건을 부정하여 쉽게 결정할 수 있습니다.
  • 프로토콜 리버싱: 가장 흥미로운 Ponce 사용 사례 중 하나는 제어된 사용자 입력에 필요한 매직 넘버, 헤더 또는 전체 프로토콜을 인식할 가능성입니다. 예를 들어, Ponce는 특정 명령줄 바이너리에 대해 허용되는 모든 인수를 나열하거나 특정 파일 파서에 필요한 파일 형식을 추출하는 데 도움을 줄 수 있습니다.
  • CTF: Ponce는 CTF 중 바이너리 리버스 엔지니어링 속도를 높여줍니다. Ponce가 IDA에 완전히 통합되어 있으므로 설정 시간에 대해 걱정할 필요가 없습니다. 바로 사용할 수 있습니다!

플러그인은 처음 실행될 때 자동으로 실행되며 초기 구성을 안내합니다. 구성은 구성 파일에 저장되므로 구성 창에 대해 다시 걱정할 필요가 없습니다.

사용 모드

  • 오염 엔진(Tainting engine): 이 엔진은 바이너리 실행의 각 단계에서 메모리 및 레지스터의 어떤 부분이 사용자 입력에 의해 제어 가능한지 결정하는 데 사용됩니다.
  • 기호 엔진(Symbolic engine): 이 엔진은 바이너리 실행 경로의 각 단계에서 레지스터 및 메모리 일부의 기호 상태를 유지합니다.

예제

조건 부정 및 주입

다음 gif에서는 자동 오염 사용과 조건을 부정하고 디버깅 중에 메모리에 주입하는 방법을 볼 수 있습니다:

  • 기호 엔진을 선택하고 argv를 기호화하는 옵션을 설정합니다.
  • crackMe를 성공시키기 위해 만족해야 하는 조건을 식별합니다.
  • 입력 바이트가 키와 비교될 때마다 해결책을 부정하고 주입합니다.
  • 마지막으로 메모리에 주입된 elite 키를 얻고 Win 코드에 도달합니다.

crackMe 소스 코드는 여기에서 확인할 수 있습니다.

crackmexor_negate_and_inject

오염 엔진을 사용하여 사용자 제어 입력 추적

이 예제에서는 cmake와 함께 오염 엔진을 사용하는 것을 볼 수 있습니다. 우리는:

  • cmake에 파일을 인수로 전달하여 파일을 파싱하게 합니다.
  • 오염 엔진을 사용하도록 선택합니다.
  • fread()가 파일에서 읽는 버퍼를 오염시킵니다.
  • 디버거 제어 하에 실행을 재개하여 오염 입력이 이동되는 위치를 확인합니다.
  • Ponce는 오염된 함수의 이름을 변경합니다. 이는 단순히 실행된 함수가 아니라 사용자가 어떤 식으로든 영향을 미치는 함수입니다.

cmake_tainting_fread

부정, 주입 및 복원 사용

다음 예제에서는 스냅샷 엔진을 사용하고 있습니다:

  • 파일을 인수로 전달합니다.
  • 기호 엔진을 사용하도록 선택합니다.
  • fread()가 파일에서 읽는 버퍼를 오염시킵니다.
  • 파일에서 읽은 버퍼를 파싱하는 함수에서 스냅샷을 만듭니다.
  • 조건이 평가될 때 이를 부정하고, 해결책을 메모리에 주입한 후 스냅샷을 복원합니다.
  • 해결책이 "유효"하므로 기존 조건을 만족시킵니다.

fread_test_negate_restore_inject 예제 소스 코드는 여기에서 확인할 수 있습니다.

사용법

이 섹션에서는 다양한 Ponce 옵션과 키보드 단축키를 설명합니다:

  • 구성 및 오염/기호 창 접근: 편집 > Ponce > 설정 표시 (Ctrl+Shift+P 및 Ctrl+Alt+T)

2016-09-15 11_39_08-configuracion

  • Ponce 추적 활성화/비활성화 (Ctrl+Shift+E)

2016-09-15 11_31_34-

  • 레지스터 기호화/오염 (Ctrl+Shift+R)

2016-09-15 11_32_32-

  • 메모리 기호화/오염. IDA View 또는 Hex View에서 수행 가능 (Ctrl+Shift+M)

2016-09-15 11_32_52-ida - testproject idb testproject exe c__users_default default-pc_documents_vi2016-09-15 11_33_10-taint _ symbolize memory range

2016-09-15 12_09_11-inicio

  • 수식 풀기 (Ctrl+Shift+S)

2016-09-15 11_35_11-

  • 부정 및 주입 (Ctrl+Shift+N)

2016-09-15 11_34_44-

  • 부정, 주입 및 스냅샷 복원 (Ctrl+Shift+I)

2016-09-15 11_47_19-

  • 실행 스냅샷 생성 (Ctrl+Shift+C)

2016-09-15 11_37_40-

  • 실행 스냅샷 복원 (Ctrl+Shift+S)

2016-09-15 11_38_10-

  • 실행 스냅샷 삭제 (Ctrl+Shift+D)

2016-09-15 11_38_23-

  • 네이티브 실행 (Ctrl+Shift+F9)

2016-09-15 12_07_10-

Triton

Ponce는 Triton 프레임워크에 의존하여 시맨틱, 오염 분석 및 기호 실행을 제공합니다. Triton은 Quarkslab이 후원하고 주로 Jonathan Salwan이 유지 관리하는 풍부한 라이브러리를 갖춘 훌륭한 오픈 소스 프로젝트입니다. Triton에 대한 Jonathan의 작업에 감사하고 지지합니다. 최고입니다! :)

빌드

Ponce v0.3부터는 빌드 컴파일 프로세스를 CMake로 전환했습니다. 이를 통해 Linux, Windows, OSX에서 구성과 빌드 방식을 통합했습니다. 이제 기호 또는 오염 명령어에 대한 피드백을 의사 코드로 제공하는 기능을 지원합니다. 이 기능을 사용하려면 IDA SDK include 폴더에 hexrays.hpp를 추가해야 합니다. hexrays.hpp는 IDA 설치 경로의 plugins/hexrays_sdk/에서 찾을 수 있습니다. hex-rays 디컴파일러를 구매하지 않은 경우 -DBUILD_HEXRAYS_SUPPORT=OFF를 사용하여 Ponce를 빌드할 수 있습니다. CI 환경으로 Github Actions를 사용합니다. 빌드 프로세스를 이해하려면 액션 파일을 확인하세요.

FAQ

왜 이름이 Ponce인가요?

Juan Ponce de León (1474 – 1521년 7월)은 스페인 탐험가이자 정복자였습니다. 그는 미국의 플로리다를 발견했습니다. IDA 플러그인은 바이너리의 다양한 경로를 발견하고 탐색하며 정복하는 데 도움을 줄 것입니다.

Ponce를 사용하여 Windows, OS X, Linux 바이너리를 분석할 수 있나요?

네, Windows IDA에서 Ponce를 기본적으로 사용하거나 Linux 또는 OS X 상자에 원격으로 연결하여 사용할 수 있습니다. 다음 Ponce 버전에서는 Linux 및 OS X IDA 버전을 기본적으로 지원할 예정입니다.

Ponce는 초당 몇 개의 명령어를 처리할 수 있나요?

테스트에서 초당 3000개의 명령어를 처리했습니다. 속도를 높이기 위해 IDA에서 제공하는 PIN 트레이서를 사용할 계획입니다.

뭔가 작동하지 않아요!

이슈를 열어주세요. 최대한 빨리 해결하겠습니다 ;)

프로젝트가 마음에 들어요! 기여할 수 있나요?

물론입니다! 풀 리퀘스트를 보내고 열려 있는 이슈에 대해 작업해 주세요. 도움에 대해 맥주로 보답하겠습니다 ;)

한계

Concolic 실행과 Ponce에는 몇 가지 문제가 있습니다:

  • 기호 메모리 로드/쓰기: x = aray[symbolic_index]와 같이 메모리 값을 읽는 데 사용된 인덱스가 기호인 경우, 오염/기호화된 사용자 제어 입력을 추적하지 못하는 문제가 발생할 수 있습니다.

  • Triton은 부동 소수점 명령어에서 잘 작동하지 않습니다.

  • Concolic 실행은 실행된 명령어만 분석합니다. 즉, 다음과 같은 경우 기호 추적이 손실됩니다:

    root@kitploit:~
    int check(char myinput)  // Input is symbolic/tainted
    {
    int flag = 0;
    if (myinput == 'A')  //This condition is symbolic/tainted
      flag = 1
    else
      flag =- 1;
    return flag; // flag is not symbolic/tainted!
    }
    

저자

  • Alberto Garcia Illera (@algillera) [email protected]
  • Francisco Oca (@francisco_oca) [email protected]
도구 다운로드