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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
python-haystack — 프로세스 힙 분석 프레임워크 - Windows/Linux - 레코드 유형 추론 및 포렌식 | Kitploit
도구/GitHubGitHub/trolldbois/python-haystack
Memory ForensicsReverse EngineeringForensicsDigital ForensicsBinary Analysis
GitHubtrolldbois/python-haystack

python-haystack

프로세스 힙 분석 프레임워크 - Windows/Linux - 레코드 유형 추론 및 포렌식

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

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

python-haystack 메모리 포렌식 ################################

|travis| |coverage| |landscape| |pypi| |docs|

빠른 시작:

빠른 사용 가이드 <docs/Haystack_basic_usage.ipynb>_ 는 docs/ 폴더에 있습니다.

Haystack-reverse CLI <docs/Haystack_reverse_CLI.ipynb>_ 는 docs/ 폴더에 있습니다.

더 많은 문서 <http://python-haystack.readthedocs.io/en/latest/>_

소개:

python-haystack은 할당된 메모리에서 C 구조체 검색 및 리버싱에 초점을 맞춘 힙 분석 프레임워크입니다.

첫 번째 함수/API는 SEARCH 함수입니다. 이를 통해 프로세스 메모리 덤프 또는 라이브 프로세스 메모리에서 알려진 레코드 유형을 검색할 수 있습니다.

두 번째 함수/API는 python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_ 확장의 REVERSE 함수입니다. 이는 분석가가 프로세스 힙에 존재하는 메모리 레코드 유형을 리버스 엔지니어링하는 데 도움을 주기 위한 것입니다. 메모리에서 고전적인 C 구조체의 재구성 및 분류에 중점을 둡니다. 유형 정의를 재생성하려고 시도합니다.

스크립트 및 메모리 핸들러 형식:

메모리 덤프 형식을 처리하기 위한 몇 가지 진입점이 존재합니다.

haystack-live-dump로 생성된 메모리 덤프 폴더

  • haystack-find-heap은 Windows HEAP의 세부 정보를 표시합니다.
  • haystack-search 검색 CLI
  • haystack-show 특정 주소의 특정 레코드 유형을 표시하는 CLI

다음 URL을 사용하여 메모리 핸들러/덤프를 지정할 수 있습니다:

  • dir:///path/to/my/haystack/fump/folder: haystack 덤프 형식 사용
  • dmp:///path/to/my/minidump/file: minidump 형식 사용 (마이크로소프트?)
  • frida://name_or_pid_of_process_to_attach_to: frida를 사용하여 라이브 프로세스 메모리에 액세스
  • live://name_or_pid_of_process_to_attach_to: 라이브 프로세스 ptrace
  • rekall://: rekall 이미지 로드
  • volatility://: volatility 이미지 로드
  • cuckoo://: Cuckoo가 생성한 메모리 덤프 로드 (베타, 패치 필요할 수 있음)

메모리 덤프를 얻는 방법:

Windows에서 가장 간단한 방법은 Minidump를 얻는 것입니다. Microsoft Sysinternals 도구 모음은 CLI(procdump.exe) 또는 GUI(Process Explorer)를 제공합니다. 이 중 하나(전체 메모리 덤프 옵션 포함)를 사용하면 haystack-minidump-xxx 진입점 목록과 함께 사용할 수 있는 파일이 생성됩니다.

기술적으로 다양한 타사 도구를 사용할 수 있지만, haystack은 실제로 메모리 매핑 정보가 필요합니다. 따라서 haystack-live-dump라는 덤핑 도구가 포함되어 있습니다:

.. code-block:: bash

root@kitploit:~
# haystack-live-dump <pid> myproc.dump

라이브 프로세스의 경우

  • haystack-live-dump: 프로세스 메모리 덤프를 폴더에 캡처 (haystack 형식)

Rekall 메모리 덤프의 경우

  • haystack-rekall-dump: 특정 프로세스를 haystack 프로세스 덤프로 덤프

Volatility 메모리 덤프의 경우

  • haystack-volatility-dump: 특정 프로세스를 haystack 프로세스 덤프로 덤프

덤프 형식을 쉽게 재현할 수 있습니다. 각 메모리 맵이 별도의 파일에 포함된 폴더/아카이브입니다:

  • 시작/끝 주소로 명명된 파일의 메모리 콘텐츠 (0x000700000-0x000800000)
  • 메모리 매핑 메타데이터를 포함하는 'mappings' 파일. (mappings)

또는 원하는 형식에 대한 haystack.abc.IMemoryMapping 구현을 코딩할 수 있습니다.

그렇지 않으면, 이미 Volatility 또는 Rekall의 시스템 메모리 덤프가 있는 경우 haystack-rekall-xxx 또는 haystack-volatility-xxx 진입점 패밀리를 사용하여 특정 프로세스 메모리를 파일로 추출할 수 있습니다.

Windows 힙 속성 확인:

진입점 haystack-find-heap은 Windows HEAP의 세부 정보를 표시합니다. 다음을 지원해야 합니다:

  • Windows XP 32비트
  • Windows XP 64비트
  • Windows 7 32비트
  • Windows 7 64비트

그리고 Look Aside List(LAL) 및 Low Fragmentation Heap(LFH) 프론트엔드의 세부 정보를 표시합니다.

때로는 단일 프로세스가 두 유형의 HEAP(32비트 및 64비트)을 혼합할 수 있다는 사실에 놀랄 수도 있습니다.

알려진 구조체 검색:

특정 레코드를 검색하려면 먼저 해당 레코드 유형을 정의해야 합니다. C 헤더 파일에서 Python ctypes 정의로 가는 기본 단계를 설명하는 [빠른 사용 가이드](docs/Haystack basic usage.ipynb)가 제공됩니다. 또는 기존 Python ctypes 레코드를 사용하여 직접 수행할 수 있습니다.

검색 API는 haystack-xxx-search 스크립트 패밀리를 통해 사용할 수 있을 뿐만 아니라 API로도 제공되므로 자체 코드에 검색을 포함할 수 있습니다.

간단히 말해, haystack 검색은 프로그램 메모리의 모든 오프셋을 반복하여 해당 특정 레코드 유형에 대한 '유효한' 오프셋을 찾으려고 시도합니다.

레코드의 유효성은 다음과 같은 유형 제약 조건에 의해 결정됩니다:

  • 포인터 필드는 유효한 주소 공간 값을 가져야 함
  • 사용자 정의 유형 제약 조건 (아래 '제약 조건 파일' 섹션 참조)
  • 등.

.. code-block:: bash

$ python haystack/cli.py dir:///home/user/project/python-haystack/test/src/test-ctypes6.32.dump ctypes6_gen32.struct_usual

제약 조건 파일:

다음 제약 조건이 지원됩니다:

  • IgnoreMember: 이 필드의 값은 무시됩니다. 포인터 필드를 무시하는 데 유용합니다.
  • NotNull: 이 필드의 값은 0이 아니어야 합니다.
  • RangeValue(x,y): 필드는 x와 y 사이의 값을 가져야 합니다.
  • PerfectMatch('hello world'): 필드(문자열)는 'hello world'와 일치해야 합니다.
  • [1,2,3]: 필드가 가져야 하는 값 목록
  • [1, RangeValue(12,16), 42]: 필드 값은 1, 12-16 또는 42여야 합니다.

예시:

.. code-block:: python

root@kitploit:~
[struct_name]
myfield: [1,0xff]
ptr_field: NotNull

haystack/allocators/win32/winxpheap32.constraints를 살펴보세요. 여기에는 Windows XP HEAP x32의 제약 조건이 정의되어 있습니다.

당연히 제약 조건이 많을수록 결과가 더 좋아집니다.

동적 제약 조건 정의:

haystack.abc.interface.IRecordTypeDynamicConstraintsValidator 클래스를 구현하고 이를 ModuleConstraints.set_dynamic_constraints에 전달하여 Python 코드를 사용하여 더 복잡한 제약 조건을 만들 수도 있습니다.

명령줄 예시:

sslsnoop 저장소는 v0.30 이상 릴리스와 호환되도록 업데이트가 필요합니다 - 보류 중

예를 들어, 다음은 session_state 구조체와 가리키는 하위 구조체를 조작 가능한 Python 객체로 덤프합니다. pid 4042인 ssh 클라이언트 또는 서버가 있다고 가정해 보겠습니다:

.. code-block:: bash

root@kitploit:~
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state search > instance.pickled
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state refresh 0xb8b70d18 > instance.pickled
$ sudo haystack-live-search --pickled <pid> <your ctypes Structure> search

그래픽 사용자 인터페이스:

현재 작동하지 않습니다

또한 그래픽 UI 시도인 python-haystack-gui <https://github.com/trolldbois/python-haystack-gui>_ 도 있습니다.

Python API 예시:

빠른 사용 가이드 <docs/Haystack_basic_usage.ipynb>_ 를 참조하세요.

자체 구조체를 정의하는 방법:

가장 쉬운 방법은 ctypeslib를 사용하여 C 헤더에서 ctypes 레코드를 생성하는 것입니다. 또는 Python ctypes 레코드를 수동으로 정의합니다.

확장 예시:

@ Pypi 저장소의 sslsnoop을 참조하세요. openssl 및 nss 구조체가 생성됩니다.

@ 내 GitHub의 ctypes-kernel을 참조하세요. Linux 커널 구조체가 빌드 커널 트리에서 생성됩니다. (VMM은 까다롭습니다)

자주 묻지 않는 질문 (FAQ):

무엇을 하나요?:

기본 기능은 프로세스 메모리에서 특정 C 레코드를 검색하는 것입니다. 확장된 리버스 엔지니어링 기능은 메모리/힙 분석에서 구조체를 리버싱하는 것을 목표로 합니다.

구조체가 유효한지 어떻게 알 수 있나요?:

레코드 필드의 예상 값에 일부 제약 조건을 추가합니다. 포인터는 항상 유효한 메모리 공간으로 제한됩니다.

아이디어는 어디서 왔나요?:

원래는 passe-partout <http://www.hsc.fr/ressources/breves/passe-partout.html.fr>_ 에서 비롯되었습니다. 2011년 3월에 시작한 이후로 몇 가지 다른 관련 이전 작업을 발견했습니다. 대부분은 docs/ 폴더에 있습니다. 다른 관련 작업으로는 Immunity의 mona.py, 일부 Mandiant 자료 등이 있습니다... 요약하자면, 이것은 아마도 독창적인 아이디어는 아닙니다. 하지만 그럼에도 불구하고 sslsnoop PoC를 위한 라이브 메모리 추출용 작동 가능한 독립 라이브러리를 찾을 수 없었기 때문에.... 관련 작업 <https://github.com/trolldbois/python-haystack/wiki/State-of-art-reference>_

의존성은 무엇인가요?:

  • Linux의 python-ptrace
  • win32의 winappdbg (작동 여부는 확실하지 않음, 피드백 환영)
  • python-numpy
  • python-networkx
  • python-levenshtein
  • 기타 여러...

기타

http://ntinfo.biz/ xntsv32

.. |pypi| image:: https://img.shields.io/pypi/v/haystack.svg?style=flat-square&label=latest%20stable%20version :target: https://pypi.python.org/pypi/haystack :alt: Latest version released on PyPi

.. |coverage| image:: https://img.shields.io/coveralls/trolldbois/python-haystack/master.svg?style=flat-square&label=coverage :target: https://coveralls.io/github/trolldbois/python-haystack?branch=master :alt: Test coverage

.. |travis| image:: https://img.shields.io/travis/trolldbois/python-haystack/master.svg?style=flat-square&label=travis-ci :target: http://travis-ci.org/trolldbois/python-haystack :alt: Build status of the master branch on Mac/Linux

.. |landscape| image:: https://landscape.io/github/trolldbois/python-haystack/master/landscape.svg?style=flat :target: https://landscape.io/github/trolldbois/python-haystack/master :alt: Code Health

.. |docs| image:: https://readthedocs.org/projects/python-haystack/badge/?version=latest :target: https://readthedocs.org/projects/python-haystack/badge/?version=latest :alt: Documentation status

도구 다운로드