commit 61c79c2cc9aed3eb642a763a8d1aa77956ff59a0 Author: 宗宸·谢尔比 <88515720+ChinaRan0@users.noreply.github.com> Date: Fri Jan 31 22:00:28 2025 +0800 Add files via upload diff --git a/DeepSeekSelfTool.py b/DeepSeekSelfTool.py new file mode 100644 index 0000000..279563d --- /dev/null +++ b/DeepSeekSelfTool.py @@ -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"
{result}
") + 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"
{result}
") + 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_()) \ No newline at end of file diff --git a/config.py b/config.py new file mode 100644 index 0000000..47f3aae --- /dev/null +++ b/config.py @@ -0,0 +1 @@ +DEEPSEEK_API_KEY="" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..165ff1b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +PyQt5==5.15.11 +PyQt5_sip==12.15.0 +Requests==2.32.3