mirror of
https://github.com/ChinaRan0/DeepSeekSelfTool.git
synced 2025-05-05 02:07:04 +00:00
Add files via upload
This commit is contained in:
commit
61c79c2cc9
933
DeepSeekSelfTool.py
Normal file
933
DeepSeekSelfTool.py
Normal file
@ -0,0 +1,933 @@
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
import requests
|
||||
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
|
||||
QTextEdit, QPushButton, QLabel, QHBoxLayout,
|
||||
QSplitter, QScrollArea, QTabWidget, QFrame, QSizePolicy,QComboBox)
|
||||
from PyQt5.QtCore import Qt, QSize, QThread, pyqtSignal
|
||||
from PyQt5.QtGui import QFont, QColor, QPalette, QLinearGradient
|
||||
import config
|
||||
# 配置参数(需要用户自行修改)
|
||||
DEEPSEEK_API_KEY = config.DEEPSEEK_API_KEY
|
||||
API_ENDPOINT = "https://api.deepseek.com/v1/chat/completions"
|
||||
|
||||
os.environ["QT_IM_MODULE"] = "none"
|
||||
|
||||
class AnalysisThread(QThread):
|
||||
analysis_complete = pyqtSignal(str, bool)
|
||||
|
||||
def __init__(self, http_data, parent=None):
|
||||
super().__init__(parent)
|
||||
self.http_data = http_data
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""请进行网络安全分析。请严格按照以下步骤执行:
|
||||
1. 分析以下HTTP请求的各个组成部分
|
||||
2. 识别是否存在SQL注入、XSS、CSRF、反序列化、文件上传、路径遍历、OWASPTop10、等常见攻击特征
|
||||
3. 检查User-Agent等头部信息是否可疑
|
||||
4. 最终结论:是否为攻击流量(是/否)
|
||||
|
||||
请用中文按以下格式响应:
|
||||
【分析结果】是/否
|
||||
【依据】简明扼要列出技术依据
|
||||
|
||||
HTTP请求数据:
|
||||
{self.http_data}"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
is_attack = "【分析结果】是" in result
|
||||
self.analysis_complete.emit(result, is_attack)
|
||||
|
||||
except Exception as e:
|
||||
self.analysis_complete.emit(f"错误发生: {str(e)}", False)
|
||||
|
||||
class DecodingThread(QThread):
|
||||
decoding_complete = pyqtSignal(str)
|
||||
|
||||
def __init__(self, encoded_str, parent=None):
|
||||
super().__init__(parent)
|
||||
self.encoded_str = encoded_str
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""请完整分析并解码以下字符串,要求:
|
||||
1. 识别所有可能的编码方式(包括嵌套编码)
|
||||
2. 通过自己重新编码,确认自己解码正确
|
||||
3. 展示完整的解码过程
|
||||
4. 输出最终解码结果
|
||||
|
||||
原始字符串:{self.encoded_str}
|
||||
|
||||
请用中文按以下格式响应:
|
||||
【编码分析】列出检测到的编码类型及层级
|
||||
【解码过程】逐步展示解码步骤
|
||||
【最终结果】解码后的明文内容"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
self.decoding_complete.emit(result)
|
||||
|
||||
except Exception as e:
|
||||
self.decoding_complete.emit(f"解码错误: {str(e)}")
|
||||
|
||||
class ProcessAnalysisThread(QThread):
|
||||
process_complete = pyqtSignal(str)
|
||||
|
||||
def __init__(self, process_data, parent=None):
|
||||
super().__init__(parent)
|
||||
self.process_data = process_data
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""你是一个Windows/Linux进程分析工程师,要求:
|
||||
1. 用户将输出tasklist或者ps aux的结果
|
||||
2. 帮助用户分析输出你所有认识的进程信息
|
||||
3. 识别可能的恶意进程
|
||||
4. 识别杀毒软件进程
|
||||
5. 识别其他软件进程
|
||||
|
||||
tasklist或者ps aux的结果:{self.process_data}
|
||||
|
||||
按优先级列出需要关注的进程
|
||||
【可疑进程】
|
||||
【杀软进程】
|
||||
【第三方软件进程】
|
||||
给出具体操作建议:
|
||||
• 安全进程的可终止性评估
|
||||
"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
self.process_complete.emit(result)
|
||||
|
||||
except Exception as e:
|
||||
self.process_complete.emit(f"进程分析错误: {str(e)}")
|
||||
|
||||
class JsAuditThread(QThread):
|
||||
audit_complete = pyqtSignal(str)
|
||||
|
||||
def __init__(self, js_code, parent=None):
|
||||
super().__init__(parent)
|
||||
self.js_code = js_code
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""请对以下JavaScript代码进行完整的安全审计,要求:
|
||||
1. 识别XSS、CSRF、不安全的DOM操作、敏感信息泄露、eval使用等安全问题
|
||||
2. 检查第三方库的安全性和版本漏洞
|
||||
3. 分析代码逻辑漏洞
|
||||
4. 提供修复建议
|
||||
|
||||
请用中文按以下格式响应:
|
||||
【高危漏洞】列出高危安全问题及位置
|
||||
【中低危问题】列出中低风险问题
|
||||
【修复建议】提供具体修复方案
|
||||
|
||||
JavaScript代码:
|
||||
{self.js_code}"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
self.audit_complete.emit(result)
|
||||
|
||||
except Exception as e:
|
||||
self.audit_complete.emit(f"审计错误: {str(e)}")
|
||||
|
||||
class HttpToPythonThread(QThread):
|
||||
conversion_complete = pyqtSignal(str)
|
||||
|
||||
def __init__(self, http_request, parent=None):
|
||||
super().__init__(parent)
|
||||
self.http_request = http_request
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""你是一个专业Python开发助手,请将以下HTTP请求转换为规范的Python代码(使用requests库)。按以下步骤处理:
|
||||
要求:
|
||||
1.用户输入:完整请求头(包含Content-Type和Authorization)
|
||||
2.用户输入:完整的请求题(包含请求方法、URL和参数)
|
||||
3.用户输入:请求体的内容(如果有)
|
||||
4.默认不进行SSL验证
|
||||
5.输出:完整的Python代码,包含请求头、请求体和请求方法
|
||||
|
||||
请用中文按以下格式响应:
|
||||
【Python代码】输出转换后的Python代码,不使用markdown格式,不要有其他多余的输出
|
||||
|
||||
这是用户输入的内容:
|
||||
{self.http_request}"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
self.conversion_complete.emit(result)
|
||||
|
||||
except Exception as e:
|
||||
self.conversion_complete.emit(f"转换错误: {str(e)}")
|
||||
|
||||
class TextProcessThread(QThread):
|
||||
process_complete = pyqtSignal(str)
|
||||
|
||||
def __init__(self, source_text, sample_text, parent=None):
|
||||
super().__init__(parent)
|
||||
self.source_text = source_text
|
||||
self.sample_text = sample_text
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""写python代码,请根据提供的样本格式,将源文本转换为与样本相同的格式。要求:
|
||||
1. 分析样本文本的结构和格式特征
|
||||
2. 保持源文本的核心内容不变
|
||||
3. 按照样本的格式要求重新组织内容
|
||||
4. 确保转换后的文本与样本格式完全一致
|
||||
5.最后输出转换两文本的python代码脚本,不要有其他多余的输出。
|
||||
|
||||
样本文本:
|
||||
{self.sample_text}
|
||||
|
||||
源文本:
|
||||
{self.source_text}
|
||||
|
||||
请直接输出python脚本,不要包含任何解释或说明。不使用markdown格式"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
self.process_complete.emit(result)
|
||||
|
||||
except Exception as e:
|
||||
self.process_complete.emit(f"文本处理错误: {str(e)}")
|
||||
|
||||
class RegexGenThread(QThread):
|
||||
regex_complete = pyqtSignal(str)
|
||||
|
||||
def __init__(self, source_text, sample_text, parent=None):
|
||||
super().__init__(parent)
|
||||
self.source_text = source_text
|
||||
self.sample_text = sample_text
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""请根据提供的样本格式,通过源文本生成正则表达式为与样本相同的内容。要求:
|
||||
1. 分析样本文本的结构和格式特征
|
||||
2. 保持源文本的核心内容不变
|
||||
3. 生成多个正则表达式
|
||||
4. 保证可以通过正则表达式匹配到样本文件中的内容
|
||||
|
||||
样本文本:
|
||||
{self.sample_text}
|
||||
|
||||
源文本:
|
||||
{self.source_text}
|
||||
|
||||
请直接输出生成的多个正则表达式,不要包含任何解释或说明,不要使用markdown格式输出"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
self.regex_complete.emit(result)
|
||||
|
||||
except Exception as e:
|
||||
self.regex_complete.emit(f"正则表达式生成错误: {str(e)}")
|
||||
class WebShellAnalysisThread(QThread):
|
||||
analysis_complete = pyqtSignal(str, bool)
|
||||
|
||||
def __init__(self, file_content, parent=None):
|
||||
super().__init__(parent)
|
||||
self.file_content = file_content
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""请分析以下文件内容是否为WebShell或内存马。要求:
|
||||
1. 检查PHP/JSP/ASP等WebShell特征(如加密函数、执行系统命令、文件操作)
|
||||
2. 识别内存马特征(如无文件落地、进程注入、异常网络连接)
|
||||
3. 分析代码中的可疑功能(如命令执行、文件上传、信息收集)
|
||||
4. 检查混淆编码、加密手段等规避技术
|
||||
5. 最终结论:是否为恶意软件(是/否)
|
||||
|
||||
请用中文按以下格式响应:
|
||||
【分析结果】是/否
|
||||
【恶意类型】WebShell/内存马/其他
|
||||
【技术特征】列出检测到的技术指标
|
||||
【风险等级】高/中/低
|
||||
|
||||
文件内容:
|
||||
{self.file_content}"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.3
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
is_malicious = "【分析结果】是" in result
|
||||
self.analysis_complete.emit(result, is_malicious)
|
||||
|
||||
except Exception as e:
|
||||
self.analysis_complete.emit(f"错误发生: {str(e)}", False)
|
||||
class TranslationThread(QThread):
|
||||
translation_complete = pyqtSignal(str)
|
||||
|
||||
def __init__(self, text, source_lang, target_lang, parent=None):
|
||||
super().__init__(parent)
|
||||
self.text = text
|
||||
self.source_lang = source_lang
|
||||
self.target_lang = target_lang
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
prompt = f"""请将以下文本从{self.source_lang}专业地翻译成{self.target_lang}。要求:
|
||||
1. 保持技术术语准确性(特别是网络安全相关词汇)
|
||||
2. 保留代码格式和变量名
|
||||
3. 正确处理专业缩写(如XSS、SQLi等)
|
||||
4. 输出仅需翻译结果,无需额外说明
|
||||
|
||||
待翻译内容:
|
||||
{self.text}"""
|
||||
|
||||
payload = {
|
||||
"model": "deepseek-chat",
|
||||
"messages": [{"role": "user", "content": prompt}],
|
||||
"temperature": 0.1
|
||||
}
|
||||
|
||||
response = requests.post(API_ENDPOINT, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
result = response.json()['choices'][0]['message']['content']
|
||||
self.translation_complete.emit(result)
|
||||
|
||||
except Exception as e:
|
||||
self.translation_complete.emit(f"翻译错误: {str(e)}")
|
||||
|
||||
class CyberSecurityApp(QMainWindow):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.init_ui()
|
||||
self.setStyleSheet(self.get_stylesheet())
|
||||
|
||||
def init_ui(self):
|
||||
self.setWindowTitle('DeepSeek 安全分析平台 公众号:知攻善防实验室 By:ChinaRan404')
|
||||
self.setGeometry(300, 300, 1200, 800)
|
||||
self.setMinimumSize(QSize(1200, 800))
|
||||
|
||||
main_widget = QWidget()
|
||||
self.setCentralWidget(main_widget)
|
||||
|
||||
self.tab_widget = QTabWidget()
|
||||
main_layout = QHBoxLayout(main_widget)
|
||||
main_layout.addWidget(self.tab_widget)
|
||||
|
||||
self.create_traffic_analysis_tab()
|
||||
self.create_js_audit_tab()
|
||||
self.create_process_analysis_tab()
|
||||
self.create_http_conversion_tab()
|
||||
self.create_text_processing_tab()
|
||||
self.create_regex_gen_tab()
|
||||
self.create_webshell_tab() # 添加这行
|
||||
self.create_translation_tab()
|
||||
|
||||
def create_scroll_textedit(self, placeholder="", read_only=True):
|
||||
frame = QFrame()
|
||||
layout = QVBoxLayout(frame)
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
text_edit = QTextEdit()
|
||||
text_edit.setPlaceholderText(placeholder)
|
||||
text_edit.setReadOnly(read_only)
|
||||
text_edit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||
|
||||
scroll_area = QScrollArea()
|
||||
scroll_area.setWidgetResizable(True)
|
||||
scroll_area.setWidget(text_edit)
|
||||
|
||||
layout.addWidget(scroll_area)
|
||||
return frame, text_edit
|
||||
|
||||
def create_traffic_analysis_tab(self):
|
||||
tab = QWidget()
|
||||
splitter = QSplitter(Qt.Horizontal)
|
||||
layout = QHBoxLayout(tab)
|
||||
layout.addWidget(splitter)
|
||||
|
||||
# 左侧分析区域
|
||||
left_panel = QWidget()
|
||||
left_layout = QVBoxLayout(left_panel)
|
||||
left_layout.addWidget(QLabel("网络流量智能分析系统", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
_, self.traffic_input = self.create_scroll_textedit("粘贴HTTP请求数据...", False)
|
||||
left_layout.addWidget(QLabel("请输入HTTP请求数据:"))
|
||||
left_layout.addWidget(self.traffic_input)
|
||||
|
||||
self.analyze_btn = QPushButton("开始智能分析", clicked=self.start_traffic_analysis)
|
||||
left_layout.addWidget(self.analyze_btn)
|
||||
|
||||
_, self.traffic_result = self.create_scroll_textedit()
|
||||
left_layout.addWidget(QLabel("AI分析结果:"))
|
||||
left_layout.addWidget(self.traffic_result)
|
||||
|
||||
# 右侧解码区域
|
||||
right_panel = QWidget()
|
||||
right_layout = QVBoxLayout(right_panel)
|
||||
right_layout.addWidget(QLabel("AI全智能解码", font=QFont("Arial", 16)))
|
||||
|
||||
_, self.decode_input = self.create_scroll_textedit("输入需要解码的字符串...", False)
|
||||
right_layout.addWidget(QLabel("待解码内容:"))
|
||||
right_layout.addWidget(self.decode_input)
|
||||
|
||||
self.decode_btn = QPushButton("AI智能解码", clicked=self.start_decoding)
|
||||
right_layout.addWidget(self.decode_btn)
|
||||
|
||||
_, self.decode_result = self.create_scroll_textedit()
|
||||
right_layout.addWidget(QLabel("解码结果:"))
|
||||
right_layout.addWidget(self.decode_result)
|
||||
|
||||
splitter.addWidget(left_panel)
|
||||
splitter.addWidget(right_panel)
|
||||
self.tab_widget.addTab(tab, "流量分析")
|
||||
|
||||
def create_js_audit_tab(self):
|
||||
tab = QWidget()
|
||||
layout = QVBoxLayout(tab)
|
||||
layout.addWidget(QLabel("JavaScript代码安全审计", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
_, self.js_input = self.create_scroll_textedit("粘贴JavaScript代码...", False)
|
||||
layout.addWidget(QLabel("输入待审计代码:"))
|
||||
layout.addWidget(self.js_input)
|
||||
|
||||
self.js_audit_btn = QPushButton("开始安全审计", clicked=self.start_js_audit)
|
||||
layout.addWidget(self.js_audit_btn)
|
||||
|
||||
_, self.js_result = self.create_scroll_textedit()
|
||||
layout.addWidget(QLabel("审计结果:"))
|
||||
layout.addWidget(self.js_result)
|
||||
|
||||
self.tab_widget.addTab(tab, "JS审计")
|
||||
|
||||
def create_process_analysis_tab(self):
|
||||
tab = QWidget()
|
||||
layout = QVBoxLayout(tab)
|
||||
layout.addWidget(QLabel("进程分析系统", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
_, self.process_input = self.create_scroll_textedit("粘贴tasklist或ps aux信息...", False)
|
||||
layout.addWidget(QLabel("输入进程列表:"))
|
||||
layout.addWidget(self.process_input)
|
||||
|
||||
self.process_btn = QPushButton("开始进程分析", clicked=self.start_process_analysis)
|
||||
layout.addWidget(self.process_btn)
|
||||
|
||||
_, self.process_result = self.create_scroll_textedit()
|
||||
layout.addWidget(QLabel("分析结果:"))
|
||||
layout.addWidget(self.process_result)
|
||||
|
||||
self.tab_widget.addTab(tab, "进程分析")
|
||||
|
||||
def create_http_conversion_tab(self):
|
||||
tab = QWidget()
|
||||
layout = QVBoxLayout(tab)
|
||||
layout.addWidget(QLabel("HTTP转Python代码", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
_, self.http_input = self.create_scroll_textedit("粘贴HTTP请求...", False)
|
||||
layout.addWidget(QLabel("输入HTTP请求:"))
|
||||
layout.addWidget(self.http_input)
|
||||
|
||||
self.convert_btn = QPushButton("开始转换", clicked=self.start_http_conversion)
|
||||
layout.addWidget(self.convert_btn)
|
||||
|
||||
_, self.conversion_result = self.create_scroll_textedit()
|
||||
layout.addWidget(QLabel("转换结果:"))
|
||||
layout.addWidget(self.conversion_result)
|
||||
|
||||
self.tab_widget.addTab(tab, "HTTP转Python")
|
||||
|
||||
def create_text_processing_tab(self):
|
||||
tab = QWidget()
|
||||
layout = QVBoxLayout(tab)
|
||||
layout.addWidget(QLabel("AI文本格式转换", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
columns = QWidget()
|
||||
column_layout = QHBoxLayout(columns)
|
||||
|
||||
# 左侧输入
|
||||
left = QWidget()
|
||||
left_layout = QVBoxLayout(left)
|
||||
_, self.text_source = self.create_scroll_textedit("源文本...", False)
|
||||
left_layout.addWidget(QLabel("源文本:"))
|
||||
left_layout.addWidget(self.text_source)
|
||||
_, self.text_sample = self.create_scroll_textedit("样本格式...", False)
|
||||
left_layout.addWidget(QLabel("样本格式:"))
|
||||
left_layout.addWidget(self.text_sample)
|
||||
|
||||
# 右侧结果
|
||||
right = QWidget()
|
||||
right_layout = QVBoxLayout(right)
|
||||
self.text_process_btn = QPushButton("开始转换", clicked=self.start_text_processing)
|
||||
right_layout.addWidget(self.text_process_btn)
|
||||
_, self.text_result = self.create_scroll_textedit()
|
||||
right_layout.addWidget(QLabel("转换结果:"))
|
||||
right_layout.addWidget(self.text_result)
|
||||
|
||||
column_layout.addWidget(left)
|
||||
column_layout.addWidget(right)
|
||||
layout.addWidget(columns)
|
||||
|
||||
self.tab_widget.addTab(tab, "文本处理")
|
||||
|
||||
def create_regex_gen_tab(self):
|
||||
tab = QWidget()
|
||||
layout = QVBoxLayout(tab)
|
||||
layout.addWidget(QLabel("正则表达式生成", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
columns = QWidget()
|
||||
column_layout = QHBoxLayout(columns)
|
||||
|
||||
# 左侧输入
|
||||
left = QWidget()
|
||||
left_layout = QVBoxLayout(left)
|
||||
_, self.regex_source = self.create_scroll_textedit("源文本...", False)
|
||||
left_layout.addWidget(QLabel("源文本:"))
|
||||
left_layout.addWidget(self.regex_source)
|
||||
_, self.regex_sample = self.create_scroll_textedit("样本格式...", False)
|
||||
left_layout.addWidget(QLabel("样本格式:"))
|
||||
left_layout.addWidget(self.regex_sample)
|
||||
|
||||
# 右侧结果
|
||||
right = QWidget()
|
||||
right_layout = QVBoxLayout(right)
|
||||
self.regex_btn = QPushButton("生成正则表达式", clicked=self.start_regex_generation)
|
||||
right_layout.addWidget(self.regex_btn)
|
||||
_, self.regex_result = self.create_scroll_textedit()
|
||||
right_layout.addWidget(QLabel("生成结果:"))
|
||||
right_layout.addWidget(self.regex_result)
|
||||
|
||||
column_layout.addWidget(left)
|
||||
column_layout.addWidget(right)
|
||||
layout.addWidget(columns)
|
||||
|
||||
self.tab_widget.addTab(tab, "正则生成")
|
||||
def create_webshell_tab(self):
|
||||
tab = QWidget()
|
||||
layout = QVBoxLayout(tab)
|
||||
layout.addWidget(QLabel("WebShell/内存马检测系统", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
_, self.webshell_input = self.create_scroll_textedit("粘贴文件内容或内存dump数据...", False)
|
||||
layout.addWidget(QLabel("输入待检测内容:"))
|
||||
layout.addWidget(self.webshell_input)
|
||||
|
||||
self.webshell_btn = QPushButton("开始深度检测", clicked=self.start_webshell_analysis)
|
||||
layout.addWidget(self.webshell_btn)
|
||||
|
||||
_, self.webshell_result = self.create_scroll_textedit()
|
||||
layout.addWidget(QLabel("检测结果:"))
|
||||
layout.addWidget(self.webshell_result)
|
||||
|
||||
self.tab_widget.addTab(tab, "WebShell检测")
|
||||
def create_translation_tab(self):
|
||||
tab = QWidget()
|
||||
layout = QVBoxLayout(tab)
|
||||
layout.addWidget(QLabel("AI多语言专业翻译", font=QFont("Arial", 20, QFont.Bold)))
|
||||
|
||||
# 语言选择栏
|
||||
lang_control = QWidget()
|
||||
lang_layout = QHBoxLayout(lang_control)
|
||||
|
||||
self.source_lang = QComboBox()
|
||||
self.source_lang.addItems(["自动检测", "中文", "英文", "日文", "韩文", "德文", "法文"])
|
||||
lang_layout.addWidget(QLabel("源语言:"))
|
||||
lang_layout.addWidget(self.source_lang)
|
||||
|
||||
self.target_lang = QComboBox()
|
||||
self.target_lang.addItems(["中文", "英文", "日文", "韩文", "德文", "法文"])
|
||||
lang_layout.addWidget(QLabel("目标语言:"))
|
||||
lang_layout.addWidget(self.target_lang)
|
||||
|
||||
layout.addWidget(lang_control)
|
||||
|
||||
# 文本输入输出区域
|
||||
trans_columns = QWidget()
|
||||
trans_layout = QHBoxLayout(trans_columns)
|
||||
|
||||
# 左侧输入
|
||||
_, self.trans_input = self.create_scroll_textedit("输入待翻译内容...", False)
|
||||
trans_layout.addWidget(QLabel("原文:"))
|
||||
trans_layout.addWidget(self.trans_input)
|
||||
|
||||
# 右侧输出
|
||||
_, self.trans_output = self.create_scroll_textedit(read_only=True)
|
||||
trans_layout.addWidget(QLabel("译文:"))
|
||||
trans_layout.addWidget(self.trans_output)
|
||||
|
||||
layout.addWidget(trans_columns)
|
||||
|
||||
# 操作按钮
|
||||
self.trans_btn = QPushButton("开始翻译", clicked=self.start_translation)
|
||||
layout.addWidget(self.trans_btn)
|
||||
|
||||
self.tab_widget.addTab(tab, "AI翻译")
|
||||
def start_webshell_analysis(self):
|
||||
content = self.webshell_input.toPlainText().strip()
|
||||
if not content:
|
||||
self.show_status("请输入检测内容", "red")
|
||||
return
|
||||
|
||||
self.webshell_btn.setEnabled(False)
|
||||
self.webshell_result.setPlainText("深度分析中...")
|
||||
|
||||
self.webshell_thread = WebShellAnalysisThread(content)
|
||||
self.webshell_thread.analysis_complete.connect(self.show_webshell_result)
|
||||
self.webshell_thread.start()
|
||||
def start_translation(self):
|
||||
text = self.trans_input.toPlainText().strip()
|
||||
if not text:
|
||||
self.show_status("请输入需要翻译的内容", "red")
|
||||
return
|
||||
|
||||
source_lang = self.source_lang.currentText()
|
||||
target_lang = self.target_lang.currentText()
|
||||
|
||||
self.trans_btn.setEnabled(False)
|
||||
self.trans_output.setPlainText("翻译中...")
|
||||
|
||||
self.trans_thread = TranslationThread(text, source_lang, target_lang)
|
||||
self.trans_thread.translation_complete.connect(self.show_translation_result)
|
||||
self.trans_thread.start()
|
||||
def show_webshell_result(self, result, is_malicious):
|
||||
self.webshell_btn.setEnabled(True)
|
||||
bg_color = "#ff4757" if is_malicious else "#2ed573"
|
||||
border_color = "#e94560" if is_malicious else "#7bed9f"
|
||||
|
||||
self.webshell_result.setStyleSheet(f"""
|
||||
QTextEdit {{
|
||||
background-color: {bg_color};
|
||||
color: white;
|
||||
border: 2px solid {border_color};
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
}}
|
||||
""")
|
||||
self.webshell_result.setHtml(f"<pre>{result}</pre>")
|
||||
status = "发现恶意软件!" if is_malicious else "未发现恶意特征"
|
||||
self.show_status(status, "#e94560" if is_malicious else "#2ed573")
|
||||
def show_translation_result(self, result):
|
||||
self.trans_btn.setEnabled(True)
|
||||
self.trans_output.setPlainText(result)
|
||||
self.show_status("翻译完成", "#2ed573")
|
||||
def get_stylesheet(self):
|
||||
return """
|
||||
QMainWindow {
|
||||
background-color: #1a1a2e;
|
||||
}
|
||||
QLabel {
|
||||
color: #e94560;
|
||||
padding: 5px;
|
||||
}
|
||||
QTextEdit {
|
||||
background-color: #16213e;
|
||||
color: #e6e6e6;
|
||||
border: 2px solid #0f3460;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
font-family: 'Menlo';
|
||||
}
|
||||
QPushButton {
|
||||
background-color: #e94560;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 12px 24px;
|
||||
border-radius: 5px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #ff6b6b;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #ff4757;
|
||||
}
|
||||
QScrollArea {
|
||||
background-color: #16213e;
|
||||
border: 1px solid #0f3460;
|
||||
border-radius: 5px;
|
||||
}
|
||||
QTabWidget::pane {
|
||||
border: 1px solid #0f3460;
|
||||
background-color: #16213e;
|
||||
}
|
||||
QTabBar::tab {
|
||||
background: #1a1a2e;
|
||||
color: #e94560;
|
||||
padding: 10px;
|
||||
border: 1px solid #0f3460;
|
||||
border-bottom-color: #16213e;
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
QTabBar::tab:selected {
|
||||
background: #16213e;
|
||||
border-bottom-color: #e94560;
|
||||
}
|
||||
"""
|
||||
|
||||
def start_traffic_analysis(self):
|
||||
http_data = self.traffic_input.toPlainText().strip()
|
||||
if not http_data:
|
||||
self.show_status("请输入有效的HTTP请求数据", "red")
|
||||
return
|
||||
|
||||
self.analyze_btn.setEnabled(False)
|
||||
self.traffic_result.setPlainText("分析中...")
|
||||
|
||||
self.analysis_thread = AnalysisThread(http_data)
|
||||
self.analysis_thread.analysis_complete.connect(self.show_traffic_result)
|
||||
self.analysis_thread.start()
|
||||
|
||||
def show_traffic_result(self, result, is_attack):
|
||||
self.analyze_btn.setEnabled(True)
|
||||
bg_color = "#ff4757" if is_attack else "#2ed573"
|
||||
border_color = "#e94560" if is_attack else "#7bed9f"
|
||||
|
||||
self.traffic_result.setStyleSheet(f"""
|
||||
QTextEdit {{
|
||||
background-color: {bg_color};
|
||||
color: white;
|
||||
border: 2px solid {border_color};
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
}}
|
||||
""")
|
||||
self.traffic_result.setHtml(f"<pre>{result}</pre>")
|
||||
status = "检测到恶意流量!" if is_attack else "流量正常"
|
||||
self.show_status(status, "#e94560" if is_attack else "#2ed573")
|
||||
|
||||
def start_decoding(self):
|
||||
text = self.decode_input.toPlainText().strip()
|
||||
if not text:
|
||||
self.show_status("请输入需要解码的内容", "red")
|
||||
return
|
||||
|
||||
self.decode_btn.setEnabled(False)
|
||||
self.decode_result.setPlainText("解码中...")
|
||||
|
||||
self.decoding_thread = DecodingThread(text)
|
||||
self.decoding_thread.decoding_complete.connect(self.show_decoding_result)
|
||||
self.decoding_thread.start()
|
||||
|
||||
def show_decoding_result(self, result):
|
||||
self.decode_btn.setEnabled(True)
|
||||
self.decode_result.setPlainText(result)
|
||||
self.show_status("解码完成", "#2ed573")
|
||||
|
||||
def start_js_audit(self):
|
||||
js_code = self.js_input.toPlainText().strip()
|
||||
if not js_code:
|
||||
self.show_status("请输入JavaScript代码", "red")
|
||||
return
|
||||
|
||||
self.js_audit_btn.setEnabled(False)
|
||||
self.js_result.setPlainText("审计中...")
|
||||
|
||||
self.js_audit_thread = JsAuditThread(js_code)
|
||||
self.js_audit_thread.audit_complete.connect(self.show_js_audit_result)
|
||||
self.js_audit_thread.start()
|
||||
|
||||
def show_js_audit_result(self, result):
|
||||
self.js_audit_btn.setEnabled(True)
|
||||
self.js_result.setPlainText(result)
|
||||
self.show_status("代码审计完成", "#2ed573")
|
||||
|
||||
def start_process_analysis(self):
|
||||
process_data = self.process_input.toPlainText().strip()
|
||||
if not process_data:
|
||||
self.show_status("请输入进程信息", "red")
|
||||
return
|
||||
|
||||
self.process_btn.setEnabled(False)
|
||||
self.process_result.setPlainText("分析中...")
|
||||
|
||||
self.process_thread = ProcessAnalysisThread(process_data)
|
||||
self.process_thread.process_complete.connect(self.show_process_result)
|
||||
self.process_thread.start()
|
||||
|
||||
def show_process_result(self, result):
|
||||
self.process_btn.setEnabled(True)
|
||||
self.process_result.setPlainText(result)
|
||||
self.show_status("进程分析完成", "#2ed573")
|
||||
|
||||
def start_http_conversion(self):
|
||||
http_request = self.http_input.toPlainText().strip()
|
||||
if not http_request:
|
||||
self.show_status("请输入HTTP请求", "red")
|
||||
return
|
||||
|
||||
self.convert_btn.setEnabled(False)
|
||||
self.conversion_result.setPlainText("转换中...")
|
||||
|
||||
self.http_thread = HttpToPythonThread(http_request)
|
||||
self.http_thread.conversion_complete.connect(self.show_conversion_result)
|
||||
self.http_thread.start()
|
||||
|
||||
def show_conversion_result(self, result):
|
||||
self.convert_btn.setEnabled(True)
|
||||
self.conversion_result.setPlainText(result)
|
||||
self.show_status("转换完成", "#2ed573")
|
||||
|
||||
def start_text_processing(self):
|
||||
source_text = self.text_source.toPlainText().strip()
|
||||
sample_text = self.text_sample.toPlainText().strip()
|
||||
if not source_text or not sample_text:
|
||||
self.show_status("请输入源文本和样本格式", "red")
|
||||
return
|
||||
|
||||
self.text_process_btn.setEnabled(False)
|
||||
self.text_result.setPlainText("处理中...")
|
||||
|
||||
self.text_thread = TextProcessThread(source_text, sample_text)
|
||||
self.text_thread.process_complete.connect(self.show_text_result)
|
||||
self.text_thread.start()
|
||||
|
||||
def show_text_result(self, result):
|
||||
self.text_process_btn.setEnabled(True)
|
||||
self.text_result.setPlainText(result)
|
||||
self.show_status("文本处理完成", "#2ed573")
|
||||
|
||||
def start_regex_generation(self):
|
||||
source_text = self.regex_source.toPlainText().strip()
|
||||
sample_text = self.regex_sample.toPlainText().strip()
|
||||
if not source_text or not sample_text:
|
||||
self.show_status("请输入源文本和样本格式", "red")
|
||||
return
|
||||
|
||||
self.regex_btn.setEnabled(False)
|
||||
self.regex_result.setPlainText("生成中...")
|
||||
|
||||
self.regex_thread = RegexGenThread(source_text, sample_text)
|
||||
self.regex_thread.regex_complete.connect(self.show_regex_result)
|
||||
self.regex_thread.start()
|
||||
|
||||
def show_regex_result(self, result):
|
||||
self.regex_btn.setEnabled(True)
|
||||
self.regex_result.setPlainText(result)
|
||||
self.show_status("正则表达式生成完成", "#2ed573")
|
||||
|
||||
def show_status(self, message, color):
|
||||
self.statusBar().showMessage(message)
|
||||
self.statusBar().setStyleSheet(f"color: {color}; font-weight: bold;")
|
||||
|
||||
if __name__ == '__main__':
|
||||
if os.name == 'nt':
|
||||
print("当前系统是 Windows")
|
||||
sys.argv += ['-platform', 'windows']
|
||||
|
||||
elif os.name == 'posix':
|
||||
print("当前系统是 macOS")
|
||||
sys.argv += ['-platform', 'cocoa']
|
||||
app = QApplication(sys.argv)
|
||||
app.setStyle('Fusion')
|
||||
|
||||
palette = app.palette()
|
||||
gradient = QLinearGradient(0, 0, 0, 400)
|
||||
gradient.setColorAt(0, QColor(22, 33, 62))
|
||||
gradient.setColorAt(1, QColor(26, 26, 46))
|
||||
palette.setBrush(QPalette.Window, gradient)
|
||||
app.setPalette(palette)
|
||||
|
||||
window = CyberSecurityApp()
|
||||
window.show()
|
||||
sys.exit(app.exec_())
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
PyQt5==5.15.11
|
||||
PyQt5_sip==12.15.0
|
||||
Requests==2.32.3
|
Loading…
x
Reference in New Issue
Block a user