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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
vi-bot — 클라이언트 측 봇 탐지 라이브러리로, 28개의 가중치 모듈, 행동 분석, 브라우저 지문 인식, 허니팟, 서버 측 검증을 제공합니다. 헤드리스 브라우저, Selenium, Puppeteer, Playwright 및 은밀 자동화 프레임워크를 탐지합니다. | Kitploit
도구/GitHubGitHub/mohamedlahmeri01/vi-bot
Defensive ToolsIDS/IPS EvasionWeb SecurityAnti-BotFingerprint SpoofingAnomaly Detection
GitHubmohamedlahmeri01/vi-bot

vi-bot

클라이언트 측 봇 탐지 라이브러리로, 28개의 가중치 모듈, 행동 분석, 브라우저 지문 인식, 허니팟, 서버 측 검증을 제공합니다. 헤드리스 브라우저, Selenium, Puppeteer, Playwright 및 은밀 자동화 프레임워크를 탐지합니다.

저장소 보기
211개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

BotDetect v2 — 프로덕션 봇 탐지 라이브러리

BotDetect 로고

클라이언트 측 봇 및 자동화 탐지 라이브러리로, 가중치 기반 점수 산정, 행동 분석, 브라우저 지문 인식, 설정 가능한 임계값을 제공합니다. 헤드리스 브라우저, Selenium, Puppeteer, Playwright, CDP 기반 도구, 스텔스 자동화 프레임워크를 탐지합니다.

v2.1.0 — 탐지 방지 허니팟, GPU 안정적 캔버스 지문 인식, 향상된 행동 분석, 지연 초기화, 서버 측 변조 탐지, 요청 지문 바인딩, 속도 제한.


목차

  • 기능
  • 아키텍처
  • 빠른 시작
  • 클라이언트 측 API
  • 서버 측 통합
  • 탐지 모듈
  • 설정
  • 프로덕션 체크리스트
  • 테스트

기능

  • 28개의 탐지 모듈 — 자동화 프레임워크, 헤드리스 브라우저, 지문 인식, 행동 분석, 허니팟, 스택 트레이스 트랩 포함
  • 가중치 기반 점수 시스템 — 각 신호에 구성 가능한 가중치 할당, 최종 점수는 서버에서 계산
  • 세 가지 판정 수준: human, suspicious, bot 및 해당 마찰 조치 (monitor, challenge, block)
  • 서버 측 검증 — 논스 게이트, 재생 방지, 작업 증명 서명
  • 스택 트레이스 트랩 — DOM API를 몽키패치하여 자동화 도구 호출 스택 캡처
  • 행동 분석 — 마우스 곡률, 키 입력 타이밍 분산, 스크롤 가속도, 터치 동역학
  • 탐지 방지 허니팟 — 무작위 CSS 은닉, 미끼 필드, 현실적인 필드 이름
  • 서버 측 변조 탐지 — 신호 무결성 검증, 게이밍 시도 탐지
  • 요청 지문 바인딩 — PoW 토큰을 HTTP 요청 속성에 바인딩
  • 속도 제한 — 모든 검증 엔드포인트에 대해 세션별 속도 제한
  • 스크립트 미지원 탐지 — 탐지 페이로드를 전혀 보내지 않는 클라이언트 식별
  • 알려진 크롤러 허용 목록 — 20개 이상의 합법적인 봇을 점수 산정에서 제외

아키텍처

root@kitploit:~
Browser                                  Your Server
┌──────────────────────────┐            ┌──────────────────────┐
│ Collector (singleton)    │  POST      │ Express Middleware    │
│  ├─ 28 detection modules│  signals   │  ├─ NonceManager      │
│  ├─ BehaviorTracker     │  + nonce   │  ├─ RateLimiter       │
│  ├─ HoneypotTraps       │───────────▶│  ├─ TamperDetector    │
│  ├─ Stack trace traps   │            │  ├─ computeVerdict()  │
│  └─ IframeContext       │            │  └─ Proof-of-Work     │
│                         │  verdict   │                        │
│  ↓ collect() →          │  + proof   │  Returns:             │
│  DetectionResult[]      │◀───────────│  { verdict, score,    │
└──────────────────────────┘            │    confidence, proof, │
                                        │    tamperScore }      │
                                        └──────────────────────┘
                                              │
                                              ▼
                                        Session-gated endpoint
                                        (login, checkout, etc.)
                                        validates proof before
                                        granting access

핵심 원칙: 브라우저는 원시 DetectionResult[] 신호만 수집합니다. 서버는 비밀 가중치 테이블을 사용하여 최종 판정을 계산합니다. 클라이언트가 계산한 판정은 절대 신뢰하지 않습니다.


빠른 시작

1. 빌드

root@kitploit:~
npm install
npm run build

dist/에 출력:

  • botdetect.min.js (폴리필 포함, ~151 KB)
  • botdetect-clean.min.js (최신 브라우저 전용, ~74 KB)

2. 페이지에 포함

root@kitploit:~
<script src="/path/to/botdetect.min.js"></script>
<script>
  BotDetect.collector.enableTraps();
  BotDetect.collector.enableBehavioralTracking();
  BotDetect.collector.enableHoneypots();
</script>

3. 서버 측 검증 설정

root@kitploit:~
cd server
npm install express cors express-session
node example-integration.js

4. 민감한 작업 시 신호 전송

root@kitploit:~
async function onLogin() {
  const { nonce } = await (await fetch('/api/botdetect/nonce')).json();
  BotDetect.collector.setNonce(nonce);

  const signals = await BotDetect.collector.collect();

  const resp = await fetch('/api/botdetect/verify', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ signals, nonce })
  });
  const { verdict, score, proof, friction } = await resp.json();

  document.getElementById('botdetect-proof').value = proof;
  document.getElementById('login-form').submit();
}

5. 서버에서 검증

root@kitploit:~
app.post('/api/login', (req, res) => {
  const bd = req.session.botdetect;
  if (!bd) return res.status(403).json({ error: 'no_verification' });
  if (bd.verdict === 'bot') return res.status(403).json({ error: 'access_denied' });
  if (bd.verdict === 'suspicious') return challengeCaptcha(req, res);
  res.json({ success: true });
});

클라이언트 측 API

Collector (싱글턴)

root@kitploit:~
import Collector from './collector/Collector';
// 또는 전역: BotDetect.collector

Detector (디버그 전용)

root@kitploit:~
import Detector from './detector/Detector';

경고: analyze()는 브라우저에서 전적으로 실행됩니다. 프로덕션 결정에 절대 사용하지 마십시오.

타입

root@kitploit:~
interface DetectionResult {
  name: string;      // 모듈 이름
  score: number;     // 0.0 – 1.0
  weight: number;    // 1 – 10 (중요도)
  detail?: string;   // 사람이 읽을 수 있는 설명
}

interface DetectionVerdict {
  verdict: 'bot' | 'suspicious' | 'human';
  score: number;       // 0.0 – 1.0
  confidence: number;  // 0.0 – 1.0
  signals: DetectionResult[];
  threshold: number;
  friction: 'monitor' | 'challenge' | 'block';
}

interface CollectorConfig {
  detectionTimeoutMs: number;   // 모듈당 타임아웃 (기본값: 3000)
  enableTraps: boolean;
  enableBehavioralTracking: boolean;
  enableHoneypots: boolean;
  thresholds: { strict: number; balanced: number; relaxed: number };
}

서버 측 통합

Express 미들웨어

root@kitploit:~
const { createBotDetectEndpoint } = require('./server');

const { router, generateProofOfWork, cleanup } = createBotDetectEndpoint({
  secretSalt: process.env.BOTDETECT_SALT,
  scoring: {
    threshold: 'balanced',       // 'strict' | 'balanced' | 'relaxed' | number
    minSignals: 2,
    signalBoostThreshold: 0.8,
    frictionThresholds: { monitor: 0.2, challenge: 0.5, block: 0.8 }
  },
  nonce: { ttl: 300000 },              // 5분 논스 만료
  noScript: { timeout: 10000 },         // 10초 스크립트 미지원 윈도우
  rateLimit: { maxRequests: 10, windowMs: 60000 },
  noScriptPaths: ['/api/login', '/api/checkout', '/api/register']
});

app.use('/api', router);

엔드포인트

엔드포인트메서드목적
/api/botdetect/nonceGET일회용 논스 발급
/api/botdetect/verify

서버 응답 형식

root@kitploit:~
{
  "verdict": "human",
  "score": 0.125,
  "confidence": 0.85,
  "tamperScore": 0,
  "friction": "monitor",
  "threshold": 0.5,
  "proof": "a1b2c3d4e5f6..."
}

서버 측 점수 산정 (Node.js)

root@kitploit:~
const { computeVerdict, RateLimiter, NonceManager } = require('./scoring');

const verdict = computeVerdict(signals, {
  threshold: 'balanced',
  minSignals: 2,
  signalBoostThreshold: 0.8,
  frictionThresholds: { monitor: 0.2, challenge: 0.5, block: 0.8 }
});

// verdict.tamperScore > 0 이면 신호 변조 감지

탐지 모듈

자동화 프레임워크 (가중치 5–7)

Playwright 전용 (가중치 3–4)

모듈탐지 대상가중치
playwrightWebKitWebKit 자동화 아티팩트4
playwrightOrientation방향 + chrome.runtime 불일치3

행동 분석 (가중치 7)

모듈분석 신호가중치
behavioralAnalysis마우스 곡률 + 직선 비율, 키 입력 CV + 버스트 패턴 + KPM, 스크롤 가속도 + 방향 변화, 터치 힘 분산 + 반경7

브라우저 지문 인식 (가중치 3–4)

Navigator 및 OS 속성 (가중치 5)

모듈확인 항목가중치
navigatorInconsistencies11개 확인: languages, plugins, mimeTypes, platform, UA, cookies, DNT, touch, hardwareConcurrency, deviceMemory, connection5

화면 및 성능 (가중치 3)

모듈탐지 대상가중치

활성 트랩 및 허니팟 (가중치 8–9)

모듈탐지 대상가중치
honeypotTraps무작위 숨김 필드 + 미끼 + 카나리 엔드포인트9
stackTraceTraps// 호출자 스택 분석

네트워크 및 컨텍스트 (가중치 1–2)

허용 목록 (가중치 0)

모듈탐지 대상가중치
verifiedBots20개 이상의 알려진 크롤러 (Googlebot, Bingbot, Yandex, Facebook, Twitter 등) — -1 반환, 점수 산정에서 제외0

설정

Collector

root@kitploit:~
const collector = Collector.getInstance({
  detectionTimeoutMs: 1000,    // 더 빠른 UX를 위해 낮춤
  enableTraps: true,
  enableBehavioralTracking: true,
  enableHoneypots: true,
  thresholds: {
    strict: 0.3,     // 공격적 (로그인, 체크아웃)
    balanced: 0.5,   // 기본값
    relaxed: 0.7     // 관대함 (콘텐츠 탐색)
  }
});

Detector (디버그 전용)

root@kitploit:~
const detector = Detector.getInstance({
  threshold: 'balanced',      // 'strict' | 'balanced' | 'relaxed' | number
  minSignals: 2,              // 부스트 전 최소 신호 수
  signalBoostThreshold: 0.8,  // 이 값 이상의 신호는 추가 가중치 획득
  failPolicy: 'open',         // 'open' = 오류 시 human, 'closed' = 오류 시 bot
  frictionThresholds: {
    monitor: 0.2,
    challenge: 0.5,
    block: 0.8
  }
});

서버

root@kitploit:~
createBotDetectEndpoint({
  secretSalt: process.env.BOTDETECT_SALT,  // 비밀로 유지
  scoring: { threshold: 'balanced' },
  nonce: { ttl: 300000, cleanupInterval: 60000 },
  noScript: { timeout: 10000 },
  rateLimit: { maxRequests: 10, windowMs: 60000 },
  requestFingerprint: true,                // PoW를 요청 속성에 바인딩
  noScriptPaths: ['/api/login', '/api/checkout']
});

프로덕션 체크리스트

보안

  • secretSalt를 환경 변수에 저장, 코드에 절대 포함하지 않음
  • HTTPS + HSTS 활성화
  • CORS를 도메인으로 제한
  • 논스 TTL을 5분 이하로 설정
  • 세션 비밀 정기적 교체
  • 엔드포인트별 속도 제한 설정
  • 요청 지문 바인딩 활성화

성능

  • detectionTimeoutMs 튜닝 (1000–2000ms 권장)
  • 최신 브라우저용 클린 번들(botdetect-clean.min.js) 사용
  • 민감한 작업 전에 유휴 시간에 탐지 사전 로드
  • 프로덕션에서 수집 지연 시간 모니터링 (performance.measure)

모니터링

  • tamperScore > 0 이벤트 기록 (신호 게이밍 시도)
  • 시간 경과에 따른 friction === 'block' 비율 추적
  • 속도 제한 임계값 위반 시 알림
  • 분기별 탐지 효과 검토 (봇은 진화함)

테스트

root@kitploit:~
npm test              # 6개 스위트에 걸친 74개의 Jest 테스트
npm run typecheck     # TypeScript strict 모드
npm run lint          # ESLint
npm run build         # Webpack 프로덕션 번들

라이선스

Apache — Lahmeri Mohamed Amine

도구 다운로드
메서드반환값설명
getInstance(config?)Collector싱글턴 접근자
configure(config)void런타임 설정 업데이트
getConfig()CollectorConfig현재 설정
init()void지연 초기화: 트랩, 추적, 허니팟
enableTraps()voidDOM API에 스택 트레이스 트랩 설치
enableBehavioralTracking()void마우스/키보드/스크롤 모니터링 시작
enableHoneypots(container?)void허니팟 필드 설치
collect()Promise<DetectionResult[]>모든 탐지 실행
setNonce(nonce)void서버 발급 논스 저장
getSessionId()string고유 세션 식별자
getFingerprint()string세션 지문 해시
resetBehavioralData()void행동 데이터 초기화
destroy()void모든 리스너와 DOM 요소 정리
메서드반환값설명
getInstance(config?)Detector싱글턴 접근자
configure(config)void설정 업데이트
analyze(results)DetectionVerdict점수 + 분류 (로컬 디버그 전용)
handleError(error)DetectionVerdict실패 시 폴백 판정
POST
신호 제출, 서명된 판정 수신
/api/botdetect/midcyclePOST세션 중 재검증
모듈탐지 대상가중치
webdrivernavigator.webdriver, selenium 속성, getter 설명자5
chromeDriverwindow의 중복 내장, document의 cache_6
fakeCreateElement위조된 document.createElement7
toStringSpoofedFunction.prototype.toString 변조6
cdpDetectioncdc_*, __playwright__, __puppeteer__ 전역, chrome.runtime7
stealthDetection네이티브 함수 무결성 (Notification, Navigator, Permissions, plugins, languages, canvas)5
inconsistentCloneError구조적 복제 알고리즘 불일치5
iframeChromeRuntimeiframe 컨텍스트의 chrome.runtime5
inconsistentChromeObjectiframe과 메인 창 간 chrome 객체 불일치4
모듈탐지 대상가중치
canvasFingerprint캔버스 렌더링 차이, 픽셀 합계, 빈 캔버스 비율4
webglFingerprintSwiftShader, llvmpipe, Brian Paul 렌더러, 셰이더 정밀도4
fingerprintConsistency교차 확인: canvas + WebGL + screen + navigator 일관성4
audioFingerprintAudioContext 샘플 레이트, 주파수 데이터 이상3
fontEnumeration제한된 폰트 세트 (≤15 기본 폰트 → 헤드리스)3
timingAnomaliesperformance.now() 해상도, 루프 타이밍, rAF 지연, eval 지연 시간3
screenAnomalies0 크기, 색상 깊이, 가용 공간 불일치3
performanceAnomalies탐색 타이밍, 메모리, 시간 원점, performance.now()3
navigationFlowPerformance entries, pushState 추적, 리퍼러 누락3
querySelector
getElementById
eval
8
모듈탐지 대상가중치
webrtcCheck로컬 IP 노출, ICE 후보 이상2
hardwareConcurrencyCPU 코어 수 vs 메모리 비율, 비현실적 값2
hiddenScroll헤드리스에서 숨겨진 스크롤바 (데스크톱 전용)2
noHovermq호버 미디어 쿼리 미지원 (데스크톱 전용)1
webGLDisabledWebGL 비활성화, SwiftShader1
inconsistentPermissions불일치하는 권한 API 상태4