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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PANO — 그래프 기반 OSINT 조사 플랫폼으로, 타임라인 분석, 엔터티 관리, AI 기반 변환 기능을 통해 이메일, 사용자 이름, 이미지, 위치 간의 숨겨진 연결을 발견합니다. | Kitploit
도구/GitHubGitHub/alw1ez/pano
OSINT (Open Source Intelligence)ReconnaissanceInformation GatheringAI Security
GitHubalw1ez/pano

PANO

그래프 기반 OSINT 조사 플랫폼으로, 타임라인 분석, 엔터티 관리, AI 기반 변환 기능을 통해 이메일, 사용자 이름, 이미지, 위치 간의 숨겨진 연결을 발견합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PANO - 분석 및 네트워크 운영을 위한 플랫폼

PANO Logo

License: CC BY-NC Python 3.11+ PySide6 Platform

PANO는 그래프 시각화, 타임라인 분석 및 AI 기반 도구를 결합하여 데이터에서 숨겨진 연결과 패턴을 발견할 수 있도록 도와주는 강력한 OSINT 조사 플랫폼입니다.

시작하기 • 기능 • 문서 • 기여하기


https://github.com/user-attachments/assets/6b95e97a-ffdd-4056-b12b-f268d8e5d565

https://github.com/user-attachments/assets/af0c0f65-7b79-417c-a678-a789d42a6003

https://github.com/user-attachments/assets/568b4c28-be78-4559-a607-899fca2f9613

https://github.com/user-attachments/assets/6aa191eb-09de-41d5-b96f-4a2e32d6a0c2

https://github.com/user-attachments/assets/96377b80-e137-4eb4-9387-a0db4e49c2c1

https://github.com/user-attachments/assets/4228bda0-6c13-4ea9-bc07-d87abe367e10

🚀 시작하기

  1. 저장소를 클론합니다:

    root@kitploit:~
    git clone https://github.com/ALW1EZ/PANO.git
    cd PANO
    
  2. 애플리케이션을 실행합니다:

    • Linux: ./start_pano.sh
    • Windows: start_pano.bat

시작 스크립트는 자동으로 다음을 수행합니다:

  • 업데이트 확인
  • Python 환경 설정
  • 의존성 설치
  • PANO 실행

이메일 조회 변환을 사용하려면 먼저 GHunt로 로그인해야 합니다. 시작 스크립트를 통해 pano를 실행한 후;

  1. 수동으로 venv 선택
    • Linux: source venv/bin/activate
    • Windows: call venv\Scripts\activate
  2. 로그인 방법은 여기를 참조하세요.

💡 빠른 시작 가이드

  1. 조사 생성: 새 조사를 시작하거나 기존 조사를 로드합니다.
  2. 엔터티 추가: 사이드바에서 엔터티를 그래프로 드래그합니다.
  3. 연결 발견: 변환을 사용하여 자동으로 관계를 찾습니다.
  4. 분석: 타임라인 및 지도 보기를 사용하여 패턴을 이해합니다.
  5. 저장: 나중에 사용할 수 있도록 조사를 내보냅니다.

🔍 기능

🕸️ 핵심 기능

  • 대화형 그래프 시각화

    • 드래그 앤 드롭 엔터티 생성
    • 다양한 레이아웃 알고리즘 (원형, 계층형, 방사형, 힘 기반)
    • 동적 관계 매핑
    • 시각적 노드 및 엣지 스타일링
  • 타임라인 분석

    • 시간순 이벤트 시각화
    • 대화형 타임라인 탐색
    • 이벤트 필터링 및 그룹화
    • 시간적 관계 분석
  • 지도 통합

    • 지리 데이터 시각화
    • 위치 기반 분석
    • 대화형 지도 기능
    • 좌표 플롯 및 추적

🎯 엔터티 관리

  • 지원되는 엔터티 유형
    • 📧 이메일 주소
    • 👤 사용자 이름
    • 🌐 웹사이트
    • 🖼️ 이미지
    • 📍 위치
    • ⏰ 이벤트
    • 📝 텍스트 콘텐츠
    • 🔧 사용자 정의 엔터티 유형

🔄 변환 시스템

  • 이메일 분석

    • Google 계정 조사
    • 캘린더 이벤트 추출
    • 위치 기록 분석
    • 연결된 서비스 발견
  • 사용자 이름 분석

    • 플랫폼 간 사용자 이름 검색
    • 소셜 미디어 프로필 발견
    • 플랫폼 상관 관계
    • 웹 존재 분석
  • 이미지 분석

    • 역 이미지 검색
    • 시각적 콘텐츠 분석
    • 메타데이터 추출
    • 관련 이미지 발견

🤖 AI 통합

  • PANAI
    • 자연어 조사 도우미
    • 자동 엔터티 추출 및 관계 매핑
    • 패턴 인식 및 이상 탐지
    • 다국어 지원
    • 문맥 인식 제안
    • 타임라인 및 그래프 분석

🧩 핵심 구성 요소

📦 엔터티

엔터티는 PANO의 기본 구성 요소입니다. 연결 및 분석할 수 있는 개별 정보 조각을 나타냅니다:

  • 내장 유형

    • 📧 이메일: 서비스 감지가 포함된 이메일 주소
    • 👤 사용자 이름: 소셜 미디어 및 플랫폼 사용자 이름
    • 🌐 웹사이트: 메타데이터가 포함된 웹 페이지
    • 🖼️ 이미지: EXIF 및 분석이 포함된 이미지
    • 📍 위치: 지리적 좌표 및 주소
    • ⏰ 이벤트: 시간 기반 발생
    • 📝 텍스트: 일반 텍스트 콘텐츠
  • 속성 시스템

    • 타입 안전 속성 검증
    • 자동 속성 getter
    • 동적 속성 업데이트
    • 사용자 정의 속성 유형
    • 메타데이터 지원

⚡ 변환

변환은 엔터티를 처리하여 새로운 정보와 관계를 발견하는 자동화된 작업입니다:

  • 작업 유형

    • 🔍 발견: 기존 엔터티에서 새 엔터티 찾기
    • 🔗 상관 관계: 관련 엔터티 연결
    • 📊 분석: 엔터티 데이터에서 인사이트 추출
    • 🌐 OSINT: 오픈 소스 인텔리전스 수집
    • 🔄 강화: 기존 엔터티에 데이터 추가
  • 특징

    • 비동기 작업 지원
    • 진행 상황 추적
    • 오류 처리
    • 속도 제한
    • 결과 검증

🛠️ 헬퍼

헬퍼는 특정 조사 작업을 위한 전용 UI를 갖춘 특수 도구입니다:

  • 사용 가능한 헬퍼

    • 🔍 교차 검증: 진술 및 증언 분석
    • 👤 초상화 제작기: 얼굴 합성물 생성
    • 📸 미디어 분석기: 고급 이미지 처리 및 분석
    • 🔍 베이스 검색기: 관심 장소 주변 검색
    • 🔄 번역기: 언어 간 텍스트 번역
  • 헬퍼 특징

    • 사용자 정의 Qt 인터페이스
    • 실시간 업데이트
    • 그래프 통합
    • 데이터 시각화
    • 내보내기 기능

👥 기여하기

우리는 기여를 환영합니다! PANO에 기여하려면:

  1. https://github.com/ALW1EZ/PANO/ 저장소를 포크합니다.
  2. 포크에서 변경 사항을 적용합니다.
  3. 변경 사항을 철저히 테스트합니다.
  4. 메인 브랜치로 풀 리퀘스트를 생성합니다.
  5. PR 설명에 다음을 포함하세요:
    • 변경 사항이 무엇을 하는지
    • 왜 이러한 변경을 했는지
    • 수행한 테스트
    • 해당하는 경우 스크린샷

참고: 개발에는 단일 main 브랜치를 사용합니다. 모든 풀 리퀘스트는 main 브랜치로 직접 생성해야 합니다.

📖 개발 가이드

개발 문서를 펼치려면 클릭

시스템 요구 사항

  • 운영 체제: Windows 또는 Linux
  • Python 3.11+
  • PySide6 (GUI용)
  • 온라인 기능을 위한 인터넷 연결

사용자 정의 엔터티

엔터티는 PANO의 핵심 데이터 구조입니다. 각 엔터티는 특정 속성과 동작을 가진 정보 조각을 나타냅니다. 사용자 정의 엔터티를 생성하려면:

  1. entities 폴더에 새 파일을 생성합니다 (예: entities/phone_number.py)
  2. 엔터티 클래스를 구현합니다:
root@kitploit:~
from dataclasses import dataclass
from typing import ClassVar, Dict, Any
from .base import Entity

@dataclass
class PhoneNumber(Entity):
    name: ClassVar[str] = "Phone Number"
    description: ClassVar[str] = "A phone number entity with country code and validation"
    
    def init_properties(self):
        """Initialize phone number properties"""
        self.setup_properties({
            "number": str,
            "country_code": str,
            "carrier": str,
            "type": str,  # mobile, landline, etc.
            "verified": bool
        })
    
    def update_label(self):
        """Update the display label"""
        self.label = self.format_label(["country_code", "number"])

사용자 정의 변환

📄 라이선스

이 프로젝트는 Creative Commons Attribution-NonCommercial (CC BY-NC) 라이선스에 따라 라이선스가 부여됩니다.

다음 권한이 있습니다:

  • ✅ 공유: 자료를 복사 및 재배포
  • ✅ 수정: 자료를 리믹스, 변형 및 기반으로 새 작업 생성

다음 조건에 따라:

  • ℹ️ 저작자 표시: 적절한 저작자 표시를 해야 함
  • 🚫 비상업적: 상업적 사용 금지
  • 🔓 추가 제한 없음

🙏 감사의 말

이 프로젝트를 가능하게 해준 모든 라이브러리 저자와 기여자에게 특별히 감사드립니다.

👨‍💻 제작자

ALW1EZ가 AI ❤️로 제작

도구 다운로드

변환은 엔터티를 처리하고 새로운 인사이트나 관계를 생성하는 작업입니다. 사용자 정의 변환을 생성하려면:

  1. transforms 폴더에 새 파일을 생성합니다 (예: transforms/phone_lookup.py)
  2. 변환 클래스를 구현합니다:
root@kitploit:~
from dataclasses import dataclass
from typing import ClassVar, List
from .base import Transform
from entities.base import Entity
from entities.phone_number import PhoneNumber
from entities.location import Location
from ui.managers.status_manager import StatusManager

@dataclass
class PhoneLookup(Transform):
    name: ClassVar[str] = "Phone Number Lookup"
    description: ClassVar[str] = "Lookup phone number details and location"
    input_types: ClassVar[List[str]] = ["PhoneNumber"]
    output_types: ClassVar[List[str]] = ["Location"]
    
    async def run(self, entity: PhoneNumber, graph) -> List[Entity]:
        if not isinstance(entity, PhoneNumber):
            return []
            
        status = StatusManager.get()
        operation_id = status.start_loading("Phone Lookup")
        
        try:
            # Your phone number lookup logic here
            # Example: query an API for phone number details
            location = Location(properties={
                "country": "Example Country",
                "region": "Example Region",
                "carrier": "Example Carrier",
                "source": "PhoneLookup transform"
            })
            
            return [location]
            
        except Exception as e:
            status.set_text(f"Error during phone lookup: {str(e)}")
            return []
            
        finally:
            status.stop_loading(operation_id)

사용자 정의 헬퍼

헬퍼는 전용 UI 인터페이스를 통해 추가 조사 기능을 제공하는 특수 도구입니다. 사용자 정의 헬퍼를 생성하려면:

  1. helpers 폴더에 새 파일을 생성합니다 (예: helpers/data_analyzer.py)
  2. 헬퍼 클래스를 구현합니다:
root@kitploit:~
from PySide6.QtWidgets import (
    QWidget, QVBoxLayout, QHBoxLayout, QPushButton,
    QTextEdit, QLabel, QComboBox
)
from .base import BaseHelper
from qasync import asyncSlot

class DummyHelper(BaseHelper):
    """A dummy helper for testing"""
    
    name = "Dummy Helper" 
    description = "A dummy helper for testing"
    
    def setup_ui(self):
        """Initialize the helper's user interface"""
        # Create input text area
        self.input_label = QLabel("Input:")
        self.input_text = QTextEdit()
        self.input_text.setPlaceholderText("Enter text to process...")
        self.input_text.setMinimumHeight(100)
        
        # Create operation selector
        operation_layout = QHBoxLayout()
        self.operation_label = QLabel("Operation:")
        self.operation_combo = QComboBox()
        self.operation_combo.addItems(["Uppercase", "Lowercase", "Title Case"])
        operation_layout.addWidget(self.operation_label)
        operation_layout.addWidget(self.operation_combo)
        
        # Create process button
        self.process_btn = QPushButton("Process")
        self.process_btn.clicked.connect(self.process_text)
        
        # Create output text area
        self.output_label = QLabel("Output:")
        self.output_text = QTextEdit()
        self.output_text.setReadOnly(True)
        self.output_text.setMinimumHeight(100)
        
        # Add widgets to main layout
        self.main_layout.addWidget(self.input_label)
        self.main_layout.addWidget(self.input_text)
        self.main_layout.addLayout(operation_layout)
        self.main_layout.addWidget(self.process_btn)
        self.main_layout.addWidget(self.output_label)
        self.main_layout.addWidget(self.output_text)
        
        # Set dialog size
        self.resize(400, 500)
        
    @asyncSlot()
    async def process_text(self):
        """Process the input text based on selected operation"""
        text = self.input_text.toPlainText()
        operation = self.operation_combo.currentText()
        
        if operation == "Uppercase":
            result = text.upper()
        elif operation == "Lowercase":
            result = text.lower()
        else:  # Title Case
            result = text.title()
            
        self.output_text.setPlainText(result)