dia-gov commited on
Commit
ed304f6
·
verified ·
1 Parent(s): 164e07f

Upload 17 files

Browse files
Dockerfile ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use a slim Python base image
2
+ FROM python:3.9-slim
3
+
4
+ # Set the working directory
5
+ WORKDIR /app
6
+
7
+ # Create a non-root user and switch to it
8
+ RUN useradd -m appuser
9
+ USER appuser
10
+
11
+ # Copy project files
12
+ COPY . /app
13
+
14
+ # Install dependencies
15
+ RUN pip install --no-cache-dir -r requirements.txt
16
+
17
+ # Expose the Gradio default port
18
+ EXPOSE 7860
19
+
20
+ # Set environment variables for API keys
21
+ ENV OPENAI_API_KEY=${OPENAI_API_KEY}
22
+ ENV HUGGINGFACE_API_KEY=${HUGGINGFACE_API_KEY}
23
+
24
+ # Command to start the Gradio app
25
+ CMD ["python", "src/frontend/archive_gui.py"]
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2025 DEFENSE INTELLIGENCE AGENCY • PROJECT RED SWORD
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README.md ADDED
@@ -0,0 +1,335 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ sdk: docker
4
+ emoji: 🚀
5
+ colorFrom: red
6
+ colorTo: green
7
+ pinned: true
8
+ thumbnail: >-
9
+ https://cdn-uploads.huggingface.co/production/uploads/670eca1fff5c46c7f23c32cd/LYKAb16YcsterJNlegp7j.png
10
+ short_description: Advanced Automated Cybersecurity Framewor
11
+ ---
12
+
13
+ # Classified Materials Warning
14
+
15
+ **WARNING: This repository contains classified materials. Unauthorized access, use, disclosure, or dissemination of the information contained herein is strictly prohibited and may result in severe legal consequences.**
16
+
17
+ **DISCLAIMER: All users must adhere to the handling and usage guidelines for classified materials as outlined by the relevant authorities. Failure to comply with these guidelines may result in disciplinary action, including termination of access and legal prosecution.**
18
+
19
+ **NOTICE: Unauthorized access or misuse of classified information is a violation of federal law and may result in criminal prosecution. All activities within this repository are monitored and logged.**
20
+
21
+ # Project Red Sword: Cybersecurity Framework
22
+
23
+ Project Red Sword is an advanced cybersecurity framework designed to address and mitigate modern cyber threats. It integrates a wide variety of security tools, including advanced attack strategies, threat intelligence sources, and AI-driven techniques for proactive defense and post-exploitation. This repository aims to provide cutting-edge techniques, automation, and integrations for both offensive and defensive cybersecurity tasks.
24
+
25
+ ## Project Overview
26
+
27
+ The Red Sword framework combines powerful cybersecurity tools and techniques into a single integrated platform. Some of the features include:
28
+ - AI-driven attack simulations and threat detection.
29
+ - A wide range of post-exploitation modules.
30
+ - Real-time attack and exploit automation.
31
+ - AI-powered fuzzing, exploit generation, and vulnerability scanning.
32
+ - Integration with major intelligence and FOIA sources.
33
+ - Full integration with tools like Sn1per, Empire, and custom modules for advanced penetration testing.
34
+ - Real-time threat intelligence and monitoring.
35
+ - Advanced data exfiltration techniques.
36
+ - Polymorphic and encrypted exploit payloads.
37
+
38
+ ## Setup
39
+
40
+ This framework requires Python 3.8+ and the following dependencies. It can be deployed easily in Hugging Face Spaces or similar environments.
41
+
42
+ ### Install Requirements
43
+
44
+ You can install the necessary requirements using the provided `requirements.txt` file.
45
+
46
+ ```bash
47
+ pip install -r requirements.txt
48
+ ```
49
+
50
+ ### Environment Variables
51
+
52
+ Some modules may require environment-specific credentials. You can set them up by creating a `.env` file or exporting them directly to your environment.
53
+
54
+ Example:
55
+ ```bash
56
+ OPENAI_API_KEY=your-openai-api-key
57
+ HUGGINGFACE_API_KEY=your-huggingface-api-key
58
+ ```
59
+
60
+ ### Deploying on Hugging Face Spaces
61
+
62
+ This project is designed to be deployed within Hugging Face Spaces, providing a seamless platform for model integration and AI-powered attack simulations.
63
+
64
+ 1. **Clone the repository:**
65
+
66
+ ```bash
67
+ git clone https://huggingface.co/spaces/your-username/project-red-sword
68
+ cd project-red-sword
69
+ ```
70
+
71
+ 2. **Run the Space:**
72
+
73
+ After cloning, you can launch the project directly using the Hugging Face Space interface.
74
+
75
+ ### Features and Modules
76
+
77
+ The framework includes a wide array of functionalities:
78
+
79
+ 1. **AI-Driven Attack and Defense**: Integrates with OpenAI and custom models for AI-powered cybersecurity operations.
80
+ 2. **Real-Time Threat Detection and Evasion**: Implements automated detection and evasion strategies.
81
+ 3. **Post-Exploitation Modules**: Includes advanced tools like keylogging, data exfiltration, and system persistence.
82
+ 4. **Web Scraping and Reconnaissance**: Collects intelligence from public repositories and sources like FOIA.
83
+ 5. **Penetration Testing Modules**: Integrates with Sn1per, Metasploit, and other tools for comprehensive testing.
84
+
85
+ ### Key Modules:
86
+
87
+ - **AI Model Integrations**: For attack prediction and threat intelligence.
88
+ - **Post-Exploitation**: Keylogging, privilege escalation, system persistence.
89
+ - **Exploit Discovery**: Zero-day and zero-click exploit generation.
90
+ - **Custom Tools**: Including a custom script generator for Hak5 devices and other third-party platforms.
91
+ - **Real-Time Threat Intelligence**: Provides up-to-date threat data and analysis.
92
+ - **Real-Time Monitoring**: Monitors data exfiltration and detects anomalies.
93
+ - **Data Exfiltration**: Secure data extraction techniques.
94
+ - **Exploit Payloads**: Polymorphic and encrypted payload generation.
95
+
96
+ ### Example Usage
97
+
98
+ ```python
99
+ # Example of using a custom exploit generation module
100
+ from red_sword.modules.exploits import exploit_generator
101
+
102
+ # Generate a custom exploit for a vulnerability
103
+ exploit_code = exploit_generator(target='target_system')
104
+ print(exploit_code)
105
+ ```
106
+
107
+ ### Testing
108
+
109
+ The framework includes various tests, both unit and integration, to ensure everything works smoothly.
110
+
111
+ To run tests, you can use:
112
+
113
+ ```bash
114
+ pytest
115
+ ```
116
+
117
+ This will run all available tests in the `tests` directory and check for any issues.
118
+
119
+ ### Contributing
120
+
121
+ We welcome contributions to Project Red Sword. If you'd like to contribute, please follow these steps:
122
+
123
+ 1. Fork the repository.
124
+ 2. Clone your fork locally.
125
+ 3. Create a new branch.
126
+ 4. Make your changes and commit them.
127
+ 5. Push your changes to your fork.
128
+ 6. Open a pull request with a description of the changes you've made.
129
+
130
+ ### License
131
+
132
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
133
+
134
+ ---
135
+
136
+ ## Deployment
137
+
138
+ You can deploy this framework to Hugging Face Spaces by following the Hugging Face documentation and deploying the Space via the Hugging Face platform.
139
+
140
+ 1. Go to [Hugging Face Spaces](https://huggingface.co/spaces).
141
+ 2. Click on **Create New Space**.
142
+ 3. Choose your preferred environment and language.
143
+ 4. Upload the repository files.
144
+ 5. Run and test the framework.
145
+
146
+ ## Security Considerations
147
+
148
+ This framework contains advanced attack and penetration testing features, including exploit generation and post-exploitation modules. It should only be used in controlled environments for ethical and legal testing purposes. Always ensure compliance with local laws and regulations regarding cybersecurity.
149
+
150
+ ---
151
+
152
+ ### References:
153
+
154
+ - **OpenAI API**: [https://beta.openai.com/docs](https://beta.openai.com/docs)
155
+ - **Hugging Face Spaces**: [https://huggingface.co/spaces](https://huggingface.co/spaces)
156
+ - **Project Red Sword**: This framework is a continuation of best practices in cybersecurity, focusing on automation, AI integration, and exploit management.
157
+
158
+ ---
159
+
160
+ If you encounter any issues or need further support, please open an issue on the GitHub repository or reach out to us via the Hugging Face Space contact form.
161
+
162
+ ---
163
+
164
+ ### Detailed Setup and Usage Instructions
165
+
166
+ #### Prerequisites
167
+
168
+ - Python 3.8+
169
+ - Docker (for containerized deployment)
170
+ - AWS CLI, Azure CLI, Google Cloud SDK, or DigitalOcean CLI (for cloud deployment)
171
+
172
+ #### Installation
173
+
174
+ 1. **Clone the repository:**
175
+
176
+ ```bash
177
+ git clone https://github.com/your-repo/project-red-sword.git
178
+ cd project-red-sword
179
+ ```
180
+
181
+ 2. **Install Python dependencies:**
182
+
183
+ ```bash
184
+ pip install -r requirements.txt
185
+ ```
186
+
187
+ 3. **Set up environment variables:**
188
+
189
+ Create a `.env` file in the root directory and add your API keys:
190
+
191
+ ```bash
192
+ OPENAI_API_KEY=your-openai-api-key
193
+ HUGGINGFACE_API_KEY=your-huggingface-api-key
194
+ ```
195
+
196
+ #### Running the Application
197
+
198
+ To run the application locally, use the following command:
199
+
200
+ ```bash
201
+ python app.py
202
+ ```
203
+
204
+ #### Docker Deployment
205
+
206
+ 1. **Build the Docker image:**
207
+
208
+ ```bash
209
+ docker build -t project-red-sword .
210
+ ```
211
+
212
+ 2. **Run the Docker container:**
213
+
214
+ ```bash
215
+ docker run -p 7860:7860 project-red-sword
216
+ ```
217
+
218
+ #### Cloud Deployment
219
+
220
+ ##### AWS Deployment
221
+
222
+ 1. **Build the Docker image:**
223
+
224
+ ```bash
225
+ docker build -t project-red-sword .
226
+ ```
227
+
228
+ 2. **Push the Docker image to AWS ECR:**
229
+
230
+ ```bash
231
+ aws ecr get-login-password --region YOUR_AWS_REGION | docker login --username AWS --password-stdin YOUR_AWS_ACCOUNT_ID.dkr.ecr.YOUR_AWS_REGION.amazonaws.com
232
+ aws ecr create-repository --repository-name project-red-sword || echo "Repository already exists."
233
+ docker tag project-red-sword:latest YOUR_AWS_ACCOUNT_ID.dkr.ecr.YOUR_AWS_REGION.amazonaws.com/project-red-sword
234
+ docker push YOUR_AWS_ACCOUNT_ID.dkr.ecr.YOUR_AWS_REGION.amazonaws.com/project-red-sword
235
+ ```
236
+
237
+ 3. **Deploy to AWS Elastic Beanstalk:**
238
+
239
+ ```bash
240
+ eb init -p docker project-red-sword --region YOUR_AWS_REGION
241
+ eb create project-red-sword-env
242
+ ```
243
+
244
+ ##### Azure Deployment
245
+
246
+ 1. **Build the Docker image:**
247
+
248
+ ```bash
249
+ docker build -t project-red-sword .
250
+ ```
251
+
252
+ 2. **Push the Docker image to Azure ACR:**
253
+
254
+ ```bash
255
+ az acr login --name YOUR_AZURE_ACR_NAME
256
+ az acr create --resource-group YOUR_RESOURCE_GROUP --name YOUR_AZURE_ACR_NAME --sku Basic || echo "Registry already exists."
257
+ docker tag project-red-sword:latest YOUR_AZURE_ACR_NAME.azurecr.io/project-red-sword
258
+ docker push YOUR_AZURE_ACR_NAME.azurecr.io/project-red-sword
259
+ ```
260
+
261
+ 3. **Deploy to Azure App Service:**
262
+
263
+ ```bash
264
+ az webapp create --resource-group YOUR_RESOURCE_GROUP --plan YOUR_APP_SERVICE_PLAN --name YOUR_APP_NAME --deployment-container-image-name YOUR_AZURE_ACR_NAME.azurecr.io/project-red-sword:latest
265
+ ```
266
+
267
+ ##### Google Cloud Deployment
268
+
269
+ 1. **Build the Docker image:**
270
+
271
+ ```bash
272
+ docker build -t project-red-sword .
273
+ ```
274
+
275
+ 2. **Push the Docker image to Google Container Registry:**
276
+
277
+ ```bash
278
+ gcloud auth configure-docker
279
+ docker tag project-red-sword gcr.io/YOUR_PROJECT_ID/project-red-sword
280
+ docker push gcr.io/YOUR_PROJECT_ID/project-red-sword
281
+ ```
282
+
283
+ 3. **Deploy to Google Kubernetes Engine:**
284
+
285
+ ```bash
286
+ kubectl apply -f google-k8s.yaml
287
+ ```
288
+
289
+ ##### DigitalOcean Deployment
290
+
291
+ 1. **Build the Docker image:**
292
+
293
+ ```bash
294
+ docker build -t project-red-sword .
295
+ ```
296
+
297
+ 2. **Deploy to DigitalOcean:**
298
+
299
+ ```bash
300
+ doctl auth init
301
+ doctl apps create --spec digitalocean-app.yaml
302
+ ```
303
+
304
+ ## Recent Updates and Changes
305
+
306
+ ### New Dashboards and Functionalities
307
+
308
+ We have recently added several new dashboards and functionalities to the Project Red Sword framework. These updates include:
309
+
310
+ 1. **Advanced Connection Methods**: Added a new dashboard for managing advanced connection methods, including reverse shells and other advanced techniques.
311
+ 2. **Real-Time Threat Intelligence**: Enhanced the real-time threat intelligence dashboard with new visualizations and data sources.
312
+ 3. **Predictive Analytics**: Added a new dashboard for predictive analytics, utilizing machine learning algorithms to predict potential threats and vulnerabilities.
313
+ 4. **Automated Incident Response**: Developed a new dashboard for automated incident response, allowing for quick response and containment of security incidents.
314
+ 5. **AI Red Teaming**: Integrated AI-powered red teaming capabilities into a new dashboard, enabling advanced attack simulations and vulnerability identification.
315
+ 6. **Blockchain Logger**: Added a new dashboard for blockchain-based logging, providing immutable logs and audit trails for security events and incidents.
316
+ 7. **Advanced Decryption**: Developed a new dashboard for advanced decryption capabilities, allowing for secure decryption of sensitive data.
317
+ 8. **Advanced Malware Analysis**: Enhanced the advanced malware analysis dashboard with new tools and techniques for analyzing and reverse engineering malware.
318
+ 9. **Advanced Social Engineering**: Added a new dashboard for advanced social engineering attacks, including phishing, spear phishing, and whaling attacks.
319
+ 10. **Alerts and Notifications**: Developed a new dashboard for managing alerts and notifications, providing real-time updates on security events and incidents.
320
+ 11. **APT Simulation**: Added a new dashboard for simulating advanced persistent threats (APTs), allowing for comprehensive testing of the framework's defenses.
321
+ 12. **Cloud Exploitation**: Enhanced the cloud exploitation dashboard with new tools and techniques for exploiting vulnerabilities in cloud environments.
322
+ 13. **Custom Dashboards**: Developed customizable dashboards to provide tailored security insights and metrics.
323
+ 14. **Dark Web Scraper**: Added a new dashboard for scraping and indexing the dark web, providing valuable intelligence on emerging threats and vulnerabilities.
324
+ 15. **Data Exfiltration**: Enhanced the data exfiltration dashboard with new techniques for secure data extraction.
325
+ 16. **Data Visualization**: Developed new visualizations for data analysis, including charts, graphs, and status indicators.
326
+ 17. **Device Fingerprinting**: Added a new dashboard for device fingerprinting, allowing for the collection and analysis of device information.
327
+ 18. **Exploit Payloads**: Enhanced the exploit payloads dashboard with new techniques for generating polymorphic and encrypted payloads.
328
+ 19. **Fuzzing Engine**: Added a new dashboard for the fuzzing engine, allowing for comprehensive fuzz testing of targets.
329
+ 20. **IoT Exploitation**: Enhanced the IoT exploitation dashboard with new tools and techniques for exploiting vulnerabilities in IoT devices.
330
+ 21. **Machine Learning AI**: Developed a new dashboard for machine learning AI, providing advanced capabilities for threat detection and analysis.
331
+ 22. **MITM Stingray**: Added a new dashboard for managing MITM Stingray operations, including interception and analysis of network traffic.
332
+ 23. **Network Exploitation**: Enhanced the network exploitation dashboard with new tools and techniques for exploiting network vulnerabilities.
333
+ 24. **Vulnerability Scanner**: Added a new dashboard for the vulnerability scanner, providing comprehensive scanning and reporting of vulnerabilities.
334
+ 25. **Wireless Exploitation**: Enhanced the wireless exploitation dashboard with new tools and techniques for exploiting wireless vulnerabilities.
335
+ 26. **Zero Day Exploits**: Added a new dashboard for managing zero-day exploits, including identification and deployment of exploits.
app.py ADDED
@@ -0,0 +1,601 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import io
2
+ import random
3
+ import logging
4
+ from typing import List, Tuple
5
+ import re
6
+ import os
7
+
8
+ import aiohttp
9
+ import panel as pn
10
+ from PIL import Image
11
+ from transformers import CLIPModel, CLIPProcessor
12
+
13
+ from modules.real_time_threat_intelligence import RealTimeThreatIntelligence
14
+ from modules.real_time_monitoring import RealTimeMonitoring
15
+ from modules.threat_intelligence import ThreatIntelligence
16
+ from modules.predictive_analytics import PredictiveAnalytics
17
+ from modules.automated_incident_response import AutomatedIncidentResponse
18
+ from modules.ai_red_teaming import AIRedTeaming
19
+ from modules.apt_simulation import APTSimulation
20
+ from modules.machine_learning_ai import MachineLearningAI
21
+ from modules.data_visualization import DataVisualization
22
+ from modules.blockchain_logger import BlockchainLogger
23
+ from modules.cloud_exploitation import CloudExploitation
24
+ from modules.iot_exploitation import IoTExploitation
25
+ from modules.quantum_computing import QuantumComputing
26
+ from modules.edge_computing import EdgeComputing
27
+ from modules.serverless_computing import ServerlessComputing
28
+ from modules.microservices_architecture import MicroservicesArchitecture
29
+ from modules.cloud_native_applications import CloudNativeApplications
30
+ from modules.advanced_decryption import AdvancedDecryption
31
+ from modules.advanced_malware_analysis import AdvancedMalwareAnalysis
32
+ from modules.advanced_social_engineering import AdvancedSocialEngineering
33
+ from modules.alerts_notifications import AlertsNotifications
34
+ from modules.device_fingerprinting import DeviceFingerprinting
35
+ from modules.exploit_payloads import ExploitPayloads
36
+ from modules.fuzzing_engine import FuzzingEngine
37
+ from modules.mitm_stingray import MITMStingray
38
+ from modules.network_exploitation import NetworkExploitation
39
+ from modules.vulnerability_scanner import VulnerabilityScanner
40
+ from modules.wireless_exploitation import WirelessExploitation
41
+ from modules.zero_day_exploits import ZeroDayExploits
42
+
43
+ from modules.device_control import DeviceControl
44
+ from modules.windows_control import WindowsControl
45
+ from modules.macos_control import MacOSControl
46
+ from modules.linux_control import LinuxControl
47
+ from modules.android_control import AndroidControl
48
+ from modules.ios_control import iOSControl
49
+ from modules.advanced_device_control import AdvancedDeviceControl
50
+
51
+ from backend.code_parser import CodeParser
52
+ from backend.pipeline_manager import PipelineManager
53
+
54
+ import pika
55
+ from kafka import KafkaProducer, KafkaConsumer
56
+
57
+ from modules.otp_interceptor import OTPInterceptor
58
+
59
+ pn.extension(design="bootstrap", sizing_mode="stretch_width")
60
+
61
+ ICON_URLS = {
62
+ "brand-github": "https://github.com/holoviz/panel",
63
+ "brand-twitter": "https://twitter.com/Panel_Org",
64
+ "brand-linkedin": "https://www.linkedin.com/company/panel-org",
65
+ "message-circle": "https://discourse.holoviz.org/",
66
+ "brand-discord": "https://discord.gg/AXRHnJU6sP",
67
+ }
68
+
69
+ # Configure logging
70
+ logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
71
+
72
+
73
+ async def random_url(_):
74
+ retries = 3
75
+ for _ in range(retries):
76
+ try:
77
+ pet = random.choice(["cat", "dog"])
78
+ api_url = f"https://api.the{pet}api.com/v1/images/search"
79
+ async with aiohttp.ClientSession() as session:
80
+ async with session.get(api_url) as resp:
81
+ resp.raise_for_status()
82
+ return (await resp.json())[0]["url"]
83
+ except aiohttp.ClientError as e:
84
+ logging.error(f"API request failed: {e}")
85
+ except Exception as e:
86
+ logging.error(f"Unexpected error: {e}")
87
+ return None
88
+
89
+
90
+ @pn.cache
91
+ def load_processor_model(
92
+ processor_name: str, model_name: str
93
+ ) -> Tuple[CLIPProcessor, CLIPModel]:
94
+ processor = CLIPProcessor.from_pretrained(processor_name)
95
+ model = CLIPModel.from_pretrained(model_name)
96
+ return processor, model
97
+
98
+
99
+ async def open_image_url(image_url: str) -> Image:
100
+ retries = 3
101
+ for _ in range(retries):
102
+ try:
103
+ async with aiohttp.ClientSession() as session:
104
+ async with session.get(image_url) as resp:
105
+ resp.raise_for_status()
106
+ return Image.open(io.BytesIO(await resp.read()))
107
+ except aiohttp.ClientError as e:
108
+ logging.error(f"HTTP request failed: {e}")
109
+ except Exception as e:
110
+ logging.error(f"Unexpected error: {e}")
111
+ return None
112
+
113
+
114
+ def get_similarity_scores(class_items: List[str], image: Image) -> List[float]:
115
+ processor, model = load_processor_model(
116
+ "openai/clip-vit-base-patch32", "openai/clip-vit-base-patch32"
117
+ )
118
+ inputs = processor(
119
+ text=class_items,
120
+ images=[image],
121
+ return_tensors="pt", # pytorch tensors
122
+ )
123
+ outputs = model(**inputs)
124
+ logits_per_image = outputs.logits_per_image
125
+ class_likelihoods = logits_per_image.softmax(dim=1).detach().numpy()
126
+ return class_likelihoods[0]
127
+
128
+
129
+ async def process_inputs(class_names: List[str], image_url: str):
130
+ """
131
+ High level function that takes in the user inputs and returns the
132
+ classification results as panel objects.
133
+ """
134
+ try:
135
+ main.disabled = True
136
+ if not image_url:
137
+ yield "##### ⚠️ Provide an image URL"
138
+ return
139
+
140
+ # Check if image_url is a valid URL
141
+ if not re.match(r'^(http|https)://', image_url):
142
+ yield "##### ⚠️ Invalid URL provided"
143
+ return
144
+
145
+ if not class_names:
146
+ yield "##### ⚠️ Provide class names"
147
+ return
148
+
149
+ yield "##### ⚙ Fetching image and running model..."
150
+ try:
151
+ pil_img = await open_image_url(image_url)
152
+ if pil_img is None:
153
+ yield "##### 😔 Something went wrong, please try a different URL!"
154
+ return
155
+ img = pn.pane.Image(pil_img, height=400, align="center")
156
+ except Exception as e:
157
+ logging.error(f"Error processing image URL: {e}")
158
+ yield f"##### 😔 Something went wrong, please try a different URL!"
159
+ return
160
+
161
+ class_items = class_names.split(",")
162
+ class_likelihoods = get_similarity_scores(class_items, pil_img)
163
+
164
+ # build the results column
165
+ results = pn.Column("##### 🎉 Here are the results!", img)
166
+
167
+ for class_item, class_likelihood in zip(class_items, class_likelihoods):
168
+ row_label = pn.widgets.StaticText(
169
+ name=class_item.strip(), value=f"{class_likelihood:.2%}", align="center"
170
+ )
171
+ row_bar = pn.indicators.Progress(
172
+ value=int(class_likelihood * 100),
173
+ sizing_mode="stretch_width",
174
+ bar_color="secondary",
175
+ margin=(0, 10),
176
+ design=pn.theme.Material,
177
+ )
178
+ results.append(pn.Column(row_label, row_bar))
179
+ yield results
180
+ finally:
181
+ main.disabled = False
182
+
183
+
184
+ # create widgets
185
+ randomize_url = pn.widgets.Button(name="Randomize URL", align="end")
186
+
187
+ image_url = pn.widgets.TextInput(
188
+ name="Image URL to classify",
189
+ value=pn.bind(random_url, randomize_url),
190
+ )
191
+ class_names = pn.widgets.TextInput(
192
+ name="Comma separated class names",
193
+ placeholder="Enter possible class names, e.g. cat, dog",
194
+ value="cat, dog, parrot",
195
+ )
196
+
197
+ input_widgets = pn.Column(
198
+ "##### 😊 Click randomize or paste a URL to start classifying!",
199
+ pn.Row(image_url, randomize_url),
200
+ class_names,
201
+ )
202
+
203
+ # add interactivity
204
+ interactive_result = pn.panel(
205
+ pn.bind(process_inputs, image_url=image_url, class_names=class_names),
206
+ height=600,
207
+ )
208
+
209
+ # add footer
210
+ footer_row = pn.Row(pn.Spacer(), align="center")
211
+ for icon, url in ICON_URLS.items():
212
+ href_button = pn.widgets.Button(icon=icon, width=35, height=35)
213
+ href_button.js_on_click(code=f"window.open('{url}')")
214
+ footer_row.append(href_button)
215
+ footer_row.append(pn.Spacer())
216
+
217
+ # create dashboard
218
+ main = pn.WidgetBox(
219
+ input_widgets,
220
+ interactive_result,
221
+ footer_row,
222
+ )
223
+
224
+ title = "Panel Demo - Image Classification"
225
+ pn.template.BootstrapTemplate(
226
+ title=title,
227
+ main=main,
228
+ main_max_width="min(50%, 698px)",
229
+ header_background="#F08080",
230
+ ).servable(title=title)
231
+
232
+ # Initialize real-time threat intelligence and monitoring modules
233
+ try:
234
+ threat_intelligence = RealTimeThreatIntelligence(api_key=os.getenv("REAL_TIME_THREAT_INTELLIGENCE_API_KEY"))
235
+ monitoring = RealTimeMonitoring(threat_intelligence_module=threat_intelligence)
236
+ except Exception as e:
237
+ logging.error(f"Error initializing real-time threat intelligence and monitoring modules: {e}")
238
+
239
+ # Initialize and integrate new modules in the main function
240
+ try:
241
+ advanced_threat_intelligence = ThreatIntelligence()
242
+ predictive_analytics = PredictiveAnalytics()
243
+ automated_incident_response = AutomatedIncidentResponse()
244
+ ai_red_teaming = AIRedTeaming()
245
+ apt_simulation = APTSimulation()
246
+ machine_learning_ai = MachineLearningAI()
247
+ data_visualization = DataVisualization()
248
+ blockchain_logger = BlockchainLogger()
249
+ cloud_exploitation = CloudExploitation()
250
+ iot_exploitation = IoTExploitation()
251
+ quantum_computing = QuantumComputing()
252
+ edge_computing = EdgeComputing()
253
+ serverless_computing = ServerlessComputing()
254
+ microservices_architecture = MicroservicesArchitecture()
255
+ cloud_native_applications = CloudNativeApplications()
256
+ advanced_decryption = AdvancedDecryption()
257
+ advanced_malware_analysis = AdvancedMalwareAnalysis()
258
+ advanced_social_engineering = AdvancedSocialEngineering()
259
+ alerts_notifications = AlertsNotifications(smtp_server="smtp.example.com", smtp_port=587, smtp_user="user@example.com", smtp_password="password")
260
+ device_fingerprinting = DeviceFingerprinting()
261
+ exploit_payloads = ExploitPayloads()
262
+ fuzzing_engine = FuzzingEngine()
263
+ mitm_stingray = MITMStingray(interface="wlan0")
264
+ network_exploitation = NetworkExploitation()
265
+ vulnerability_scanner = VulnerabilityScanner()
266
+ wireless_exploitation = WirelessExploitation()
267
+ zero_day_exploits = ZeroDayExploits()
268
+ device_control = DeviceControl()
269
+ windows_control = WindowsControl()
270
+ macos_control = MacOSControl()
271
+ linux_control = LinuxControl()
272
+ android_control = AndroidControl()
273
+ ios_control = iOSControl()
274
+ advanced_device_control = AdvancedDeviceControl()
275
+ code_parser = CodeParser("sample_code")
276
+ pipeline_manager = PipelineManager()
277
+ otp_interceptor = OTPInterceptor(
278
+ email_config={
279
+ 'host': 'your_email_host',
280
+ 'username': 'your_email_username',
281
+ 'password': 'your_email_password'
282
+ },
283
+ twilio_config={
284
+ 'account_sid': 'your_twilio_account_sid',
285
+ 'auth_token': 'your_twilio_auth_token'
286
+ }
287
+ )
288
+ except Exception as e:
289
+ logging.error(f"Error initializing modules: {e}")
290
+
291
+ # Integrate the ThreatIntelligence module with RealTimeMonitoring
292
+ try:
293
+ monitoring.threat_intelligence_module = advanced_threat_intelligence
294
+ except Exception as e:
295
+ logging.error(f"Error integrating ThreatIntelligence module with RealTimeMonitoring: {e}")
296
+
297
+ # Add real-time threat data analysis using the ThreatIntelligence module
298
+ async def analyze_threat_data():
299
+ try:
300
+ threat_data = await advanced_threat_intelligence.get_threat_intelligence()
301
+ analyzed_data = advanced_threat_intelligence.process_data(threat_data)
302
+ return analyzed_data
303
+ except Exception as e:
304
+ logging.error(f"Error analyzing threat data: {e}")
305
+
306
+ # Update the RealTimeThreatIntelligence initialization to include the ThreatIntelligence module
307
+ try:
308
+ threat_intelligence_module = RealTimeThreatIntelligence(api_key="YOUR_API_KEY")
309
+ threat_intelligence_module.threat_intelligence = advanced_threat_intelligence
310
+ except Exception as e:
311
+ logging.error(f"Error updating RealTimeThreatIntelligence initialization: {e}")
312
+
313
+ # Add real-time threat data monitoring using the ThreatIntelligence module
314
+ async def monitor_threat_data():
315
+ try:
316
+ threat_data = await advanced_threat_intelligence.get_threat_intelligence()
317
+ for threat in threat_data:
318
+ if threat["severity"] > 0.8:
319
+ monitoring.trigger_alert(threat)
320
+ except Exception as e:
321
+ logging.error(f"Error monitoring threat data: {e}")
322
+
323
+ # Integrate the AutomatedIncidentResponse module with RealTimeMonitoring
324
+ try:
325
+ monitoring.automated_incident_response = automated_incident_response
326
+ except Exception as e:
327
+ logging.error(f"Error integrating AutomatedIncidentResponse module with RealTimeMonitoring: {e}")
328
+
329
+ # Integrate the AIRedTeaming module with RealTimeMonitoring
330
+ try:
331
+ monitoring.ai_red_teaming = ai_red_teaming
332
+ except Exception as e:
333
+ logging.error(f"Error integrating AIRedTeaming module with RealTimeMonitoring: {e}")
334
+
335
+ # Integrate the APTSimulation module with RealTimeMonitoring
336
+ try:
337
+ monitoring.apt_simulation = apt_simulation()
338
+ except Exception as e:
339
+ logging.error(f"Error integrating APTSimulation module with RealTimeMonitoring: {e}")
340
+
341
+ # Integrate the PredictiveAnalytics module with RealTimeMonitoring
342
+ try:
343
+ monitoring.predictive_analytics = predictive_analytics
344
+ except Exception as e:
345
+ logging.error(f"Error integrating PredictiveAnalytics module with RealTimeMonitoring: {e}")
346
+
347
+ # Integrate the MachineLearningAI module with RealTimeMonitoring
348
+ try:
349
+ monitoring.machine_learning_ai = machine_learning_ai
350
+ except Exception as e:
351
+ logging.error(f"Error integrating MachineLearningAI module with RealTimeMonitoring: {e}")
352
+
353
+ # Integrate the DataVisualization module with RealTimeMonitoring
354
+ try:
355
+ monitoring.data_visualization = data_visualization
356
+ except Exception as e:
357
+ logging.error(f"Error integrating DataVisualization module with RealTimeMonitoring: {e}")
358
+
359
+ # Integrate the CloudExploitation module with RealTimeMonitoring
360
+ try:
361
+ monitoring.cloud_exploitation = cloud_exploitation
362
+ except Exception as e:
363
+ logging.error(f"Error integrating CloudExploitation module with RealTimeMonitoring: {e}")
364
+
365
+ # Integrate the IoTExploitation module with RealTimeMonitoring
366
+ try:
367
+ monitoring.iot_exploitation = iot_exploitation
368
+ except Exception as e:
369
+ logging.error(f"Error integrating IoTExploitation module with RealTimeMonitoring: {e}")
370
+
371
+ # Integrate the QuantumComputing module with RealTimeMonitoring
372
+ try:
373
+ monitoring.quantum_computing = quantum_computing
374
+ except Exception as e:
375
+ logging.error(f"Error integrating QuantumComputing module with RealTimeMonitoring: {e}")
376
+
377
+ # Integrate the EdgeComputing module with RealTimeMonitoring
378
+ try:
379
+ monitoring.edge_computing = edge_computing
380
+ except Exception as e:
381
+ logging.error(f"Error integrating EdgeComputing module with RealTimeMonitoring: {e}")
382
+
383
+ # Integrate the ServerlessComputing module with RealTimeMonitoring
384
+ try:
385
+ monitoring.serverless_computing = serverless_computing
386
+ except Exception as e:
387
+ logging.error(f"Error integrating ServerlessComputing module with RealTimeMonitoring: {e}")
388
+
389
+ # Integrate the MicroservicesArchitecture module with RealTimeMonitoring
390
+ try:
391
+ monitoring.microservices_architecture = microservices_architecture
392
+ except Exception as e:
393
+ logging.error(f"Error integrating MicroservicesArchitecture module with RealTimeMonitoring: {e}")
394
+
395
+ # Integrate the CloudNativeApplications module with RealTimeMonitoring
396
+ try:
397
+ monitoring.cloud_native_applications = cloud_native_applications
398
+ except Exception as e:
399
+ logging.error(f"Error integrating CloudNativeApplications module with RealTimeMonitoring: {e}")
400
+
401
+ # Integrate the DeviceControl module with RealTimeMonitoring
402
+ try:
403
+ monitoring.device_control = device_control
404
+ except Exception as e:
405
+ logging.error(f"Error integrating DeviceControl module with RealTimeMonitoring: {e}")
406
+
407
+ # Integrate the WindowsControl module with RealTimeMonitoring
408
+ try:
409
+ monitoring.windows_control = windows_control
410
+ except Exception as e:
411
+ logging.error(f"Error integrating WindowsControl module with RealTimeMonitoring: {e}")
412
+
413
+ # Integrate the MacOSControl module with RealTimeMonitoring
414
+ try:
415
+ monitoring.macos_control = macos_control
416
+ except Exception as e:
417
+ logging.error(f"Error integrating MacOSControl module with RealTimeMonitoring: {e}")
418
+
419
+ # Integrate the LinuxControl module with RealTimeMonitoring
420
+ try:
421
+ monitoring.linux_control = linux_control
422
+ except Exception as e:
423
+ logging.error(f"Error integrating LinuxControl module with RealTimeMonitoring: {e}")
424
+
425
+ # Integrate the AndroidControl module with RealTimeMonitoring
426
+ try:
427
+ monitoring.android_control = android_control
428
+ except Exception as e:
429
+ logging.error(f"Error integrating AndroidControl module with RealTimeMonitoring: {e}")
430
+
431
+ # Integrate the iOSControl module with RealTimeMonitoring
432
+ try:
433
+ monitoring.ios_control = ios_control
434
+ except Exception as e:
435
+ logging.error(f"Error integrating iOSControl module with RealTimeMonitoring: {e}")
436
+
437
+ # Integrate the AdvancedDeviceControl module with RealTimeMonitoring
438
+ try:
439
+ monitoring.advanced_device_control = advanced_device_control
440
+ except Exception as e:
441
+ logging.error(f"Error integrating AdvancedDeviceControl module with RealTimeMonitoring: {e}")
442
+
443
+ # Add tool tips and advanced help options for all functions
444
+ def add_tool_tips():
445
+ tool_tips = {
446
+ "advanced_threat_intelligence": "Provides advanced threat intelligence capabilities.",
447
+ "predictive_analytics": "Utilizes predictive analytics for threat detection.",
448
+ "automated_incident_response": "Automates incident response processes.",
449
+ "ai_red_teaming": "AI-driven red teaming for security testing.",
450
+ "apt_simulation": "Simulates advanced persistent threats.",
451
+ "machine_learning_ai": "Machine learning-based AI for threat detection.",
452
+ "data_visualization": "Visualizes data for better insights.",
453
+ "blockchain_logger": "Logs data using blockchain technology.",
454
+ "cloud_exploitation": "Exploits vulnerabilities in cloud environments.",
455
+ "iot_exploitation": "Exploits vulnerabilities in IoT devices.",
456
+ "quantum_computing": "Utilizes quantum computing for security.",
457
+ "edge_computing": "Secures edge computing environments.",
458
+ "serverless_computing": "Secures serverless computing environments.",
459
+ "microservices_architecture": "Secures microservices architectures.",
460
+ "cloud_native_applications": "Secures cloud-native applications.",
461
+ "advanced_decryption": "Advanced decryption capabilities.",
462
+ "advanced_malware_analysis": "Analyzes and detects advanced malware.",
463
+ "advanced_social_engineering": "Detects and prevents social engineering attacks.",
464
+ "alerts_notifications": "Sends alerts and notifications.",
465
+ "device_fingerprinting": "Identifies devices using fingerprinting.",
466
+ "exploit_payloads": "Manages exploit payloads.",
467
+ "fuzzing_engine": "Fuzzing engine for vulnerability detection.",
468
+ "mitm_stingray": "Manages MITM Stingray attacks.",
469
+ "network_exploitation": "Exploits network vulnerabilities.",
470
+ "vulnerability_scanner": "Scans for vulnerabilities.",
471
+ "wireless_exploitation": "Exploits wireless vulnerabilities.",
472
+ "zero_day_exploits": "Manages zero-day exploits.",
473
+ "device_control": "Controls various device functions.",
474
+ "windows_control": "Controls Windows devices.",
475
+ "macos_control": "Controls macOS devices.",
476
+ "linux_control": "Controls Linux devices.",
477
+ "android_control": "Controls Android devices.",
478
+ "ios_control": "Controls iOS devices.",
479
+ "advanced_device_control": "Provides advanced device control features.",
480
+ "code_parser": "Parses and analyzes code.",
481
+ "pipeline_manager": "Manages pipelines for various tasks."
482
+ }
483
+ return tool_tips
484
+
485
+ tool_tips = add_tool_tips()
486
+
487
+ # Add a continue button for the AI chatbot to continue incomplete responses
488
+ continue_button = pn.widgets.Button(name="Continue", button_type="primary")
489
+
490
+ # Add a download icon button for downloading zip files of projects
491
+ download_button = pn.widgets.Button(name="Download .zip", button_type="primary", icon="download")
492
+
493
+ # Update the dashboard to display real-time insights and analytics
494
+ dashboard = pn.Column(
495
+ "### Advanced Capabilities Dashboard",
496
+ pn.pane.Markdown("Welcome to the Advanced Capabilities Dashboard. Here you can monitor and manage advanced security features."),
497
+ advanced_threat_intelligence.render(),
498
+ predictive_analytics.render(),
499
+ automated_incident_response.render(),
500
+ ai_red_teaming.render(),
501
+ apt_simulation.render(),
502
+ machine_learning_ai.render(),
503
+ data_visualization.render(),
504
+ blockchain_logger.render(),
505
+ cloud_exploitation.render(),
506
+ iot_exploitation.render(),
507
+ quantum_computing.render(),
508
+ edge_computing.render(),
509
+ serverless_computing.render(),
510
+ microservices_architecture.render(),
511
+ cloud_native_applications.render(),
512
+ advanced_decryption.render(),
513
+ advanced_malware_analysis.render(),
514
+ advanced_social_engineering.render(),
515
+ alerts_notifications.render(),
516
+ device_fingerprinting.render(),
517
+ exploit_payloads.render(),
518
+ fuzzing_engine.render(),
519
+ mitm_stingray.render(),
520
+ network_exploitation.render(),
521
+ vulnerability_scanner.render(),
522
+ wireless_exploitation.render(),
523
+ zero_day_exploits.render(),
524
+ device_control.render(),
525
+ windows_control.render(),
526
+ macos_control.render(),
527
+ linux_control.render(),
528
+ android_control.render(),
529
+ ios_control.render(),
530
+ advanced_device_control.render(),
531
+ code_parser.render(),
532
+ pipeline_manager.render(),
533
+ otp_interceptor.intercept_email_otp(),
534
+ otp_interceptor.intercept_sms_otp(),
535
+ continue_button,
536
+ download_button
537
+ )
538
+
539
+ main.append(dashboard)
540
+
541
+ # Implement best practices for integrating message queues
542
+ def setup_message_queue():
543
+ try:
544
+ connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
545
+ channel = connection.channel()
546
+ channel.queue_declare(queue='task_queue', durable=True)
547
+ return channel
548
+ except Exception as e:
549
+ logging.error(f"Error setting up message queue: {e}")
550
+ return None
551
+
552
+ message_queue_channel = setup_message_queue()
553
+
554
+ def send_message_to_queue(message):
555
+ try:
556
+ if message_queue_channel:
557
+ message_queue_channel.basic_publish(
558
+ exchange='',
559
+ routing_key='task_queue',
560
+ body=message,
561
+ properties=pika.BasicProperties(
562
+ delivery_mode=2, # make message persistent
563
+ ))
564
+ logging.info(f"Sent message to queue: {message}")
565
+ else:
566
+ logging.error("Message queue channel is not available.")
567
+ except Exception as e:
568
+ logging.error(f"Error sending message to queue: {e}")
569
+
570
+ # Example usage of sending a message to the queue
571
+ send_message_to_queue("Test message")
572
+
573
+ def setup_kafka():
574
+ try:
575
+ producer = KafkaProducer(bootstrap_servers='localhost:9092')
576
+ consumer = KafkaConsumer('my_topic', bootstrap_servers='localhost:9092', auto_offset_reset='earliest', enable_auto_commit=True, group_id='my-group')
577
+ return producer, consumer
578
+ except Exception as e:
579
+ logging.error(f"Error setting up Kafka: {e}")
580
+ return None, None
581
+
582
+ def send_message_to_kafka(producer, topic, message):
583
+ try:
584
+ producer.send(topic, message.encode('utf-8'))
585
+ producer.flush()
586
+ logging.info(f"Sent message to Kafka topic {topic}: {message}")
587
+ except Exception as e:
588
+ logging.error(f"Error sending message to Kafka: {e}")
589
+
590
+ def receive_message_from_kafka(consumer):
591
+ try:
592
+ for message in consumer:
593
+ logging.info(f"Received message from Kafka: {message.value.decode('utf-8')}")
594
+ except Exception as e:
595
+ logging.error(f"Error receiving message from Kafka: {e}")
596
+
597
+ if __name__ == "__main__":
598
+ producer, consumer = setup_kafka()
599
+ if producer and consumer:
600
+ send_message_to_kafka(producer, 'my_topic', 'Test Kafka message')
601
+ receive_message_from_kafka(consumer)
c2_dashboard.py ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import panel as pn
2
+ from database.models import DocumentAnalysis
3
+ from sqlalchemy import create_engine
4
+ from sqlalchemy.orm import sessionmaker
5
+ from modules.data_visualization import DataVisualization
6
+ from modules.advanced_device_control import AdvancedDeviceControl
7
+ from modules.real_time_monitoring import RealTimeMonitoring
8
+
9
+ DATABASE_URL = "sqlite:///document_analysis.db"
10
+ engine = create_engine(DATABASE_URL)
11
+ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
12
+
13
+ class C2Dashboard:
14
+ def render(self):
15
+ return pn.Column(
16
+ "### Command and Control Dashboard",
17
+ pn.pane.Markdown("Welcome to the C2 Dashboard. Here you can manage and monitor your operations."),
18
+ pn.pane.Markdown("#### Detailed Metrics and Insights"),
19
+ pn.widgets.DataFrame(name="Metrics Data"),
20
+ pn.pane.Markdown("#### Visualizations"),
21
+ pn.widgets.DataFrame(name="Assets Data"),
22
+ pn.pane.Markdown("#### Message Boards"),
23
+ pn.widgets.DataFrame(name="Message Board Data"),
24
+ pn.pane.Markdown("#### Announcements"),
25
+ pn.widgets.DataFrame(name="Announcements Data"),
26
+ pn.pane.Markdown("#### Latest News on Exploits"),
27
+ pn.widgets.DataFrame(name="Latest News Data"),
28
+ pn.pane.Markdown("#### AI Interface"),
29
+ pn.widgets.DataFrame(name="AI Interface Data"),
30
+ pn.pane.Markdown("#### System Connections"),
31
+ pn.widgets.DataFrame(name="System Connections Data"),
32
+ pn.pane.Markdown("#### Logs"),
33
+ pn.widgets.DataFrame(name="Logs Data"),
34
+ pn.pane.Markdown("#### System Status"),
35
+ pn.widgets.DataFrame(name="System Status Data"),
36
+ pn.pane.Markdown("#### System Settings"),
37
+ pn.widgets.DataFrame(name="System Settings Data"),
38
+ pn.pane.Markdown("#### Attack Simulations"),
39
+ pn.widgets.DataFrame(name="Attack Simulations Data"),
40
+ pn.pane.Markdown("#### Fuzzing"),
41
+ pn.widgets.DataFrame(name="Fuzzing Data"),
42
+ pn.pane.Markdown("#### Asset Control"),
43
+ pn.widgets.DataFrame(name="Asset Control Data"),
44
+ pn.pane.Markdown("#### Reverse Shell Settings"),
45
+ pn.widgets.DataFrame(name="Reverse Shell Settings Data"),
46
+ pn.pane.Markdown("#### Advanced Connection Methods"),
47
+ pn.widgets.DataFrame(name="Advanced Connection Methods Data"),
48
+ pn.pane.Markdown("#### Real-Time Threat Intelligence"),
49
+ pn.widgets.DataFrame(name="Real-Time Threat Intelligence Data"),
50
+ pn.pane.Markdown("#### Predictive Analytics"),
51
+ pn.widgets.DataFrame(name="Predictive Analytics Data"),
52
+ pn.pane.Markdown("#### Automated Incident Response"),
53
+ pn.widgets.DataFrame(name="Automated Incident Response Data"),
54
+ pn.pane.Markdown("#### AI Red Teaming"),
55
+ pn.widgets.DataFrame(name="AI Red Teaming Data"),
56
+ pn.pane.Markdown("#### Blockchain Logger"),
57
+ pn.widgets.DataFrame(name="Blockchain Logger Data"),
58
+ pn.pane.Markdown("#### Advanced Decryption"),
59
+ pn.widgets.DataFrame(name="Advanced Decryption Data"),
60
+ pn.pane.Markdown("#### Advanced Malware Analysis"),
61
+ pn.widgets.DataFrame(name="Advanced Malware Analysis Data"),
62
+ pn.pane.Markdown("#### Advanced Social Engineering"),
63
+ pn.widgets.DataFrame(name="Advanced Social Engineering Data"),
64
+ pn.pane.Markdown("#### Alerts and Notifications"),
65
+ pn.widgets.DataFrame(name="Alerts and Notifications Data"),
66
+ pn.pane.Markdown("#### APT Simulation"),
67
+ pn.widgets.DataFrame(name="APT Simulation Data"),
68
+ pn.pane.Markdown("#### Cloud Exploitation"),
69
+ pn.widgets.DataFrame(name="Cloud Exploitation Data"),
70
+ pn.pane.Markdown("#### Custom Dashboards"),
71
+ pn.widgets.DataFrame(name="Custom Dashboards Data"),
72
+ pn.pane.Markdown("#### Dark Web Scraper"),
73
+ pn.widgets.DataFrame(name="Dark Web Scraper Data"),
74
+ pn.pane.Markdown("#### Data Exfiltration"),
75
+ pn.widgets.DataFrame(name="Data Exfiltration Data"),
76
+ pn.pane.Markdown("#### Data Visualization"),
77
+ pn.widgets.DataFrame(name="Data Visualization Data"),
78
+ pn.pane.Markdown("#### Device Fingerprinting"),
79
+ pn.widgets.DataFrame(name="Device Fingerprinting Data"),
80
+ pn.pane.Markdown("#### Exploit Payloads"),
81
+ pn.widgets.DataFrame(name="Exploit Payloads Data"),
82
+ pn.pane.Markdown("#### Fuzzing Engine"),
83
+ pn.widgets.DataFrame(name="Fuzzing Engine Data"),
84
+ pn.pane.Markdown("#### IoT Exploitation"),
85
+ pn.widgets.DataFrame(name="IoT Exploitation Data"),
86
+ pn.pane.Markdown("#### Machine Learning AI"),
87
+ pn.widgets.DataFrame(name="Machine Learning AI Data"),
88
+ pn.pane.Markdown("#### MITM Stingray"),
89
+ pn.widgets.DataFrame(name="MITM Stingray Data"),
90
+ pn.pane.Markdown("#### Network Exploitation"),
91
+ pn.widgets.DataFrame(name="Network Exploitation Data"),
92
+ pn.pane.Markdown("#### Vulnerability Scanner"),
93
+ pn.widgets.DataFrame(name="Vulnerability Scanner Data"),
94
+ pn.pane.Markdown("#### Wireless Exploitation"),
95
+ pn.widgets.DataFrame(name="Wireless Exploitation Data"),
96
+ pn.pane.Markdown("#### Zero Day Exploits"),
97
+ pn.widgets.DataFrame(name="Zero Day Exploits Data"),
98
+ pn.pane.Markdown("#### Settings Dashboards"),
99
+ pn.widgets.DataFrame(name="Settings Dashboards Data"),
100
+ pn.pane.Markdown("#### Tool Tips and Advanced Help Options"),
101
+ pn.widgets.DataFrame(name="Tool Tips and Advanced Help Options Data")
102
+ )
103
+
104
+ def save_dashboard_to_db(self, source, title, links, error):
105
+ session = SessionLocal()
106
+ try:
107
+ dashboard_result = DocumentAnalysis(
108
+ source=source,
109
+ title=title,
110
+ links=links,
111
+ error=error
112
+ )
113
+ session.add(dashboard_result)
114
+ session.commit()
115
+ except Exception as e:
116
+ print(f"Error saving dashboard to database: {e}")
117
+ finally:
118
+ session.close()
119
+
120
+ class MITMStingrayDashboard:
121
+ def __init__(self, mitm_stingray):
122
+ self.mitm_stingray = mitm_stingray
123
+ self.intercepted_data = []
124
+
125
+ def start_interception(self, event):
126
+ self.mitm_stingray.start()
127
+ self.intercepted_data.append("Interception started")
128
+
129
+ def stop_interception(self, event):
130
+ self.mitm_stingray.stop()
131
+ self.intercepted_data.append("Interception stopped")
132
+
133
+ def render(self):
134
+ return pn.Column(
135
+ "### MITM Stingray Dashboard",
136
+ pn.pane.Markdown("Monitor and manage MITM Stingray operations."),
137
+ pn.widgets.Button(name="Start Interception", button_type="primary", on_click=self.start_interception),
138
+ pn.widgets.Button(name="Stop Interception", button_type="danger", on_click=self.stop_interception),
139
+ pn.widgets.DataFrame(self.intercepted_data, name="Intercepted Data")
140
+ )
141
+
142
+ if __name__ == "__main__":
143
+ dashboard = C2Dashboard()
144
+ try:
145
+ dashboard.save_dashboard_to_db("c2_dashboard.py", "C2 Dashboard", "[]", None)
146
+ print("Dashboard saved to database.")
147
+ except Exception as e:
148
+ print(f"Error during dashboard operation: {e}")
code_analysis_report.txt ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Code Analysis Report for Project Red Sword
2
+
3
+ ## Overview
4
+
5
+ This report provides a detailed analysis of the codebase for Project Red Sword, identifying potential errors and vulnerabilities, and suggesting fixes and improvements.
6
+
7
+ ## Summary of Findings
8
+
9
+ 1. **Error Handling**: Several functions lack proper error handling, which can lead to unhandled exceptions and application crashes.
10
+ 2. **Input Validation**: There are instances where user inputs are not properly validated, which can lead to security vulnerabilities such as injection attacks.
11
+ 3. **Logging**: The application lacks comprehensive logging, making it difficult to trace issues and monitor the application's behavior.
12
+ 4. **Security**: Sensitive information such as API keys are hardcoded in the code, which is a security risk.
13
+ 5. **Dependencies**: The project is missing some necessary dependencies in the `requirements.txt` file.
14
+
15
+ ## Detailed Analysis
16
+
17
+ ### 1. Error Handling
18
+
19
+ #### `random_url` Function
20
+ - **Issue**: The function does not handle API errors properly.
21
+ - **Fix**: Add error handling for API errors using `try-except` blocks.
22
+
23
+ #### `open_image_url` Function
24
+ - **Issue**: The function does not handle HTTP errors properly.
25
+ - **Fix**: Add error handling for HTTP errors using `try-except` blocks.
26
+
27
+ #### `process_inputs` Function
28
+ - **Issue**: The function does not log exceptions, making it difficult to trace issues.
29
+ - **Fix**: Add logging for exceptions using the `logging` module.
30
+
31
+ ### 2. Input Validation
32
+
33
+ #### `process_inputs` Function
34
+ - **Issue**: The function does not check if `class_names` is empty.
35
+ - **Fix**: Add a check to ensure `class_names` is not empty.
36
+ - **Issue**: The function does not validate if `image_url` is a valid URL.
37
+ - **Fix**: Add a check to ensure `image_url` is a valid URL.
38
+
39
+ ### 3. Logging
40
+
41
+ - **Issue**: The application lacks comprehensive logging.
42
+ - **Fix**: Configure logging using the `logging` module and add logging statements throughout the codebase.
43
+
44
+ ### 4. Security
45
+
46
+ - **Issue**: Sensitive information such as API keys are hardcoded in the code.
47
+ - **Fix**: Use environment variables to store sensitive information and access them securely in the code.
48
+
49
+ ### 5. Dependencies
50
+
51
+ - **Issue**: The project is missing some necessary dependencies in the `requirements.txt` file.
52
+ - **Fix**: Add the following dependencies to the `requirements.txt` file:
53
+ - `aiohttp`
54
+ - `Pillow`
55
+ - `transformers`
56
+ - `panel`
57
+
58
+ ## Conclusion
59
+
60
+ By addressing the issues identified in this report, the Project Red Sword codebase will be more robust, secure, and maintainable. Proper error handling, input validation, logging, and secure handling of sensitive information are crucial for the application's reliability and security. Additionally, ensuring all necessary dependencies are included will prevent runtime errors and improve the development experience.
61
+
62
+ ## Updates
63
+
64
+ ### 1. Error Handling
65
+
66
+ #### `random_url` Function
67
+ - **Update**: Added error handling for API errors using `try-except` blocks.
68
+
69
+ #### `open_image_url` Function
70
+ - **Update**: Added error handling for HTTP errors using `try-except` blocks.
71
+
72
+ #### `process_inputs` Function
73
+ - **Update**: Added logging for exceptions using the `logging` module.
74
+
75
+ ### 2. Input Validation
76
+
77
+ #### `process_inputs` Function
78
+ - **Update**: Added a check to ensure `class_names` is not empty.
79
+ - **Update**: Added a check to ensure `image_url` is a valid URL.
80
+
81
+ ### 3. Logging
82
+
83
+ - **Update**: Configured logging using the `logging` module and added logging statements throughout the codebase.
84
+
85
+ ### 4. Security
86
+
87
+ - **Update**: Used environment variables to store sensitive information and access them securely in the code.
88
+
89
+ ### 5. Dependencies
90
+
91
+ - **Update**: Added the following dependencies to the `requirements.txt` file:
92
+ - `aiohttp`
93
+ - `Pillow`
94
+ - `transformers`
95
+ - `panel`
conversation-small-cll5buey.css ADDED
@@ -0,0 +1 @@
 
 
1
+ ._prosemirror-parent_15ceg_1 .ProseMirror[contenteditable]{outline:2px solid transparent;outline-offset:2px;outline-width:0}._prosemirror-parent_15ceg_1 .ProseMirror{word-wrap:break-word;font-feature-settings:"liga" 0,none;font-variant-ligatures:none;margin-bottom:.5rem;margin-top:.5rem;padding-left:0;padding-right:0;white-space:pre-wrap;white-space:break-spaces}._prosemirror-parent_15ceg_1.ProseMirror br{line-height:normal}._prosemirror-parent_15ceg_1.default-browser .placeholder:after{--tw-content:attr(data-placeholder);color:var(--text-secondary);content:var(--tw-content);cursor:text;pointer-events:none;position:relative}._prosemirror-parent_15ceg_1.default-browser .placeholder .ProseMirror-trailingBreak{display:none!important}._prosemirror-parent_15ceg_1.firefox .placeholder:before{--tw-content:attr(data-placeholder);color:var(--text-secondary);content:var(--tw-content);cursor:text;pointer-events:none;position:absolute}._prosemirror-parent_15ceg_1 p{white-space:pre-wrap}._prosemirror-parent_15ceg_1 .ProseMirror-separator{display:none!important}@keyframes _add-top-shadow_9ia9b_1{0%{border-bottom:1px solid transparent}1%,to{border-bottom:1px solid var(--border-sharp)}}._leadingBar_9ia9b_1{animation-range:0 1px;animation:_add-top-shadow_9ia9b_1 linear both}._leadingBarScrollAnimation_9ia9b_17{animation-timeline:scroll()}._primary_9ia9b_21{background-color:var(--bar-background-color,var(--main-surface-primary))}
devcontainer.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "tasks": {
3
+ "test": "pytest",
4
+ "build": "pip install -r requirements.txt && bash setup.sh",
5
+ "launch": "pip install -r requirements.txt && python app.py"
6
+ }
7
+ }
file_structure.txt ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ modules/
2
+ advanced_decryption.py
3
+ advanced_device_control.py
4
+ advanced_malware_analysis.py
5
+ advanced_social_engineering.py
6
+ ai_red_teaming.py
7
+ alerts_notifications.py
8
+ android_control.py
9
+ apt_simulation.py
10
+ automated_incident_response.py
11
+ blockchain_logger.py
12
+ c2_dashboard.py
13
+ cloud_exploitation.py
14
+ cloud_native_applications.py
15
+ data_exfiltration.py
16
+ data_visualization.py
17
+ device_control.py
18
+ device_fingerprinting.py
19
+ edge_computing.py
20
+ exploit_payloads.py
21
+ fuzzing_engine.py
22
+ ios_control.py
23
+ iot_exploitation.py
24
+ linux_control.py
25
+ machine_learning_ai.py
26
+ macos_control.py
27
+ microservices_architecture.py
28
+ mitm_stingray.py
29
+ network_exploitation.py
30
+ predictive_analytics.py
31
+ quantum_computing.py
32
+ real_time_monitoring.py
33
+ real_time_threat_intelligence.py
34
+ serverless_computing.py
35
+ threat_intelligence.py
36
+ vulnerability_scanner.py
37
+ windows_control.py
38
+ wireless_exploitation.py
39
+ zero_day_exploits.py
logo.png ADDED
main.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import subprocess
3
+
4
+ def start_all_services():
5
+ services = [
6
+ "cybersecurity_framework/advanced_attacks/attack_simulations/sql_injection.py",
7
+ "cybersecurity_framework/app_security/sast.py",
8
+ "cybersecurity_framework/app_security/dast.py",
9
+ "cybersecurity_framework/atp/sandbox.py",
10
+ "cybersecurity_framework/behavioral_analytics/uba.py",
11
+ "cybersecurity_framework/cloud_security/casb.py",
12
+ "cybersecurity_framework/deception_technology/honeypot.py",
13
+ "cybersecurity_framework/compliance/automated_reporting.py",
14
+ "cybersecurity_framework/network_security/firewall_rules.py",
15
+ "cybersecurity_framework/threat_hunting/hunt_for_iocs.py",
16
+ "cybersecurity_framework/threat_hunting/behavioral_hunting.py",
17
+ "cybersecurity_framework/edr/edr_agent.py",
18
+ "cybersecurity_framework/edr/edr_dashboard.py",
19
+ "cybersecurity_framework/forensics/memory_dump.py",
20
+ "cybersecurity_framework/forensics/disk_image.py",
21
+ "cybersecurity_framework/idps/network_monitor.py",
22
+ "cybersecurity_framework/idps/intrusion_prevention.py",
23
+ "cybersecurity_framework/malware_analysis/static_analysis.py",
24
+ "cybersecurity_framework/malware_analysis/dynamic_analysis.py",
25
+ "cybersecurity_framework/penetration_testing/reconnaissance.py",
26
+ "cybersecurity_framework/penetration_testing/exploit_execution.py",
27
+ "cybersecurity_framework/user_management/auth.py"
28
+ ]
29
+ for service in services:
30
+ subprocess.Popen(["python", service])
31
+ print("All services started!")
32
+
33
+ if __name__ == "__main__":
34
+ start_all_services()
manifest-5de69407.js ADDED
@@ -0,0 +1 @@
 
 
1
+ window.__remixManifest={"entry":{"module":"https://cdn.oaistatic.com/assets/f9y8kwmiihb6rbcc.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/86unh0t1vof357vs.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"https://cdn.oaistatic.com/assets/ab4tosc0d9yb4pl4.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/86unh0t1vof357vs.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/search.evals.permalink.$threadUserId.$threadId":{"id":"routes/search.evals.permalink.$threadUserId.$threadId","parentId":"routes/search","path":"evals/permalink/:threadUserId/:threadId","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/jj4ngcr9uw6pawy5.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/c_.$conversationId.canmore.$canmoreId":{"id":"routes/c_.$conversationId.canmore.$canmoreId","parentId":"root","path":"c/:conversationId/canmore/:canmoreId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":true,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/qarphnkmp7nm7jtn.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/cmi3o55uo12g5b1n.js","https://cdn.oaistatic.com/assets/hmjswdi4wh596fl1.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/i9e4j4zcx9a86onu.js","https://cdn.oaistatic.com/assets/l85aultbptwwqkjh.js","https://cdn.oaistatic.com/assets/f11hnjoh71zukblv.js","https://cdn.oaistatic.com/assets/fm123c2w7hxsrqz1.js","https://cdn.oaistatic.com/assets/neav6k36puk44vhv.js","https://cdn.oaistatic.com/assets/kl1di1ygk01ncha0.js","https://cdn.oaistatic.com/assets/dees1yidh14ps5a4.js","https://cdn.oaistatic.com/assets/o7gwkc6birigbyjy.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/search.evals.feather.completed-tasks":{"id":"routes/search.evals.feather.completed-tasks","parentId":"routes/search","path":"evals/feather/completed-tasks","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/jrqeuw84a4izxgt5.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/search.evals.feather.regressions":{"id":"routes/search.evals.feather.regressions","parentId":"routes/search","path":"evals/feather/regressions","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/fimtznoacxdyze1u.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/_conversation.c.$conversationId":{"id":"routes/_conversation.c.$conversationId","parentId":"routes/_conversation","path":"c/:conversationId","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/lr0bc7ws6ok3rbmo.js","imports":[],"css":[]},"routes/search.evals.batches.$batchId":{"id":"routes/search.evals.batches.$batchId","parentId":"routes/search","path":"evals/batches/:batchId","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/of5l24uitvhagxzi.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/aip.$pluginId.oauth.callback":{"id":"routes/aip.$pluginId.oauth.callback","parentId":"root","path":"aip/:pluginId/oauth/callback","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/9il5ipdqqu4y5bgs.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/ccc.$pluginId.oauth.callback":{"id":"routes/ccc.$pluginId.oauth.callback","parentId":"root","path":"ccc/:pluginId/oauth/callback","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/dxeuug0jvwibydrf.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/g.$gizmoId.c.$conversationId":{"id":"routes/g.$gizmoId.c.$conversationId","parentId":"root","path":"g/:gizmoId/c/:conversationId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/d12o0165k4d8mipp.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/l073i3o7wz5lnloz.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/hmjswdi4wh596fl1.js","https://cdn.oaistatic.com/assets/g233jbmgj8j86ygl.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/ca.$pluginId.oauth.callback":{"id":"routes/ca.$pluginId.oauth.callback","parentId":"root","path":"ca/:pluginId/oauth/callback","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/m4kvg7yphk4ipboo.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/search.evals.feather._index":{"id":"routes/search.evals.feather._index","parentId":"routes/search","path":"evals/feather","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/oqyr062av61b1081.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/share.e.$shareId.($action)":{"id":"routes/share.e.$shareId.($action)","parentId":"root","path":"share/e/:shareId/:action?","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/g1svsww7bljz4qqi.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/l073i3o7wz5lnloz.js","https://cdn.oaistatic.com/assets/faczaiousfpcepem.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/hmjswdi4wh596fl1.js","https://cdn.oaistatic.com/assets/g233jbmgj8j86ygl.js","https://cdn.oaistatic.com/assets/c6zgb2lnq7ibqrw9.js","https://cdn.oaistatic.com/assets/od9zy3milg264no9.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/auth.ext_callback_refresh":{"id":"routes/auth.ext_callback_refresh","parentId":"root","path":"auth/ext_callback_refresh","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/fucityo4coahm481.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/share.$shareId.($action)":{"id":"routes/share.$shareId.($action)","parentId":"root","path":"share/:shareId/:action?","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/imsbnb5fbn59z017.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/l073i3o7wz5lnloz.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/faczaiousfpcepem.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/hmjswdi4wh596fl1.js","https://cdn.oaistatic.com/assets/g233jbmgj8j86ygl.js","https://cdn.oaistatic.com/assets/c6zgb2lnq7ibqrw9.js","https://cdn.oaistatic.com/assets/od9zy3milg264no9.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/payments.success-trial":{"id":"routes/payments.success-trial","parentId":"root","path":"payments/success-trial","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/l8e2rrspdnuojdnt.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/b532mnlcbgs4y9bh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/iqkhqt8iadhgk3ss.js","https://cdn.oaistatic.com/assets/d3y72ugnrmac5z1v.js","https://cdn.oaistatic.com/assets/e7gmrmr0t5rvjmc6.js","https://cdn.oaistatic.com/assets/e9lafxuzyeh4418f.js","https://cdn.oaistatic.com/assets/kl1di1ygk01ncha0.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/iej0cupg2dqkmejt.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/payments.success-team":{"id":"routes/payments.success-team","parentId":"root","path":"payments/success-team","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/dbluvbx0g53iyti1.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/b532mnlcbgs4y9bh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/iqkhqt8iadhgk3ss.js","https://cdn.oaistatic.com/assets/d3y72ugnrmac5z1v.js","https://cdn.oaistatic.com/assets/e7gmrmr0t5rvjmc6.js","https://cdn.oaistatic.com/assets/e9lafxuzyeh4418f.js","https://cdn.oaistatic.com/assets/kl1di1ygk01ncha0.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/iej0cupg2dqkmejt.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/workspace.deactivated":{"id":"routes/workspace.deactivated","parentId":"root","path":"workspace/deactivated","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/llgn4sybpxjesnv4.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/_conversation._index":{"id":"routes/_conversation._index","parentId":"routes/_conversation","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":true,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/jjr9on9cxlrbskjq.js","imports":[],"css":[]},"routes/admin_.api-reference":{"id":"routes/admin_.api-reference","parentId":"root","path":"admin/api-reference","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/gs0s8vsvqjp9kyp4.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/mzkxlhrlmxhntkvn.js","https://cdn.oaistatic.com/assets/e9lafxuzyeh4418f.js","https://cdn.oaistatic.com/assets/c3w1qjz8pnherad3.js","https://cdn.oaistatic.com/assets/joa8jajuiu4xqpzn.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/auth.open_in_desktop":{"id":"routes/auth.open_in_desktop","parentId":"root","path":"auth/open_in_desktop","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/88f06wmkagxwqc1b.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/b5bdoo7rz35s856u.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/invite.$referralCode":{"id":"routes/invite.$referralCode","parentId":"root","path":"invite/:referralCode","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/c1m4o7a78ujck6u8.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hku0zt9rpj7w9u64.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/b5bdoo7rz35s856u.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/gp7lex0zqamxro5m.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/fsddy3bxlesj6ecw.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/api.content.$fileId":{"id":"routes/api.content.$fileId","parentId":"root","path":"api/content/:fileId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/fhogqbk67ffg1ijv.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/gpts.editor.($slug)":{"id":"routes/gpts.editor.($slug)","parentId":"root","path":"gpts/editor/:slug?","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":true,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/jkzgrraemc3ry17m.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/bzctgnw2j3qd7y8q.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/m5nl9fanqxhxp5j8.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/fsddy3bxlesj6ecw.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/hg9oun43zu8s8jth.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/jbc1iteh05yod7ft.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/fbqgwj6qtlb9xtkk.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/load-page-with-auth":{"id":"routes/load-page-with-auth","parentId":"root","path":"load-page-with-auth","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/ipgqcesck3rgo6cw.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/search.evals._index":{"id":"routes/search.evals._index","parentId":"routes/search","path":"evals","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/pd9smzpeomelavry.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/auth.ext_callback":{"id":"routes/auth.ext_callback","parentId":"root","path":"auth/ext_callback","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/85cmc7hiodyizg2r.js","imports":["https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css","https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/continue_from_api":{"id":"routes/continue_from_api","parentId":"root","path":"continue_from_api","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/j47p7efqcmx2ratb.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/g.$gizmoId._index":{"id":"routes/g.$gizmoId._index","parentId":"root","path":"g/:gizmoId","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/cwk79i1moxhqe7sp.js","imports":["https://cdn.oaistatic.com/assets/m83da3d8sxq6tgym.js","https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/l073i3o7wz5lnloz.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/hmjswdi4wh596fl1.js","https://cdn.oaistatic.com/assets/g233jbmgj8j86ygl.js","https://cdn.oaistatic.com/assets/k8unjmts6g0tf1ka.js","https://cdn.oaistatic.com/assets/cz4z3pbu6ux6pmxn.js","https://cdn.oaistatic.com/assets/od9zy3milg264no9.js","https://cdn.oaistatic.com/assets/imwtt6z6av0di6t6.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin.connectors":{"id":"routes/admin.connectors","parentId":"routes/admin","path":"connectors","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/ic7y8k1e7l8whmn6.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/bmgyfq775pdwfzaw.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/auth.disable_mfa":{"id":"routes/auth.disable_mfa","parentId":"root","path":"auth/disable_mfa","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/i956xyjeqhsoi556.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/g.$gizmoId.about":{"id":"routes/g.$gizmoId.about","parentId":"root","path":"g/:gizmoId/about","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/brpqtmcs830kkz5s.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/l88odlfdvsg4b2g6.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/m83da3d8sxq6tgym.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/l073i3o7wz5lnloz.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/hmjswdi4wh596fl1.js","https://cdn.oaistatic.com/assets/g233jbmgj8j86ygl.js","https://cdn.oaistatic.com/assets/k8unjmts6g0tf1ka.js","https://cdn.oaistatic.com/assets/cz4z3pbu6ux6pmxn.js","https://cdn.oaistatic.com/assets/od9zy3milg264no9.js","https://cdn.oaistatic.com/assets/imwtt6z6av0di6t6.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/payments.success":{"id":"routes/payments.success","parentId":"root","path":"payments/success","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/bchtw6xhl0b2zn3f.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/b532mnlcbgs4y9bh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/iqkhqt8iadhgk3ss.js","https://cdn.oaistatic.com/assets/d3y72ugnrmac5z1v.js","https://cdn.oaistatic.com/assets/e7gmrmr0t5rvjmc6.js","https://cdn.oaistatic.com/assets/e9lafxuzyeh4418f.js","https://cdn.oaistatic.com/assets/kl1di1ygk01ncha0.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/iej0cupg2dqkmejt.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin.analytics":{"id":"routes/admin.analytics","parentId":"routes/admin","path":"analytics","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/l8qqk008ej9i7e09.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/mu0dnexuedxqt36h.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/api.healthcheck":{"id":"routes/api.healthcheck","parentId":"root","path":"api/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/i6xqssnx6dlvqwfv.js","imports":[],"css":[]},"routes/auth.enroll_mfa":{"id":"routes/auth.enroll_mfa","parentId":"root","path":"auth/enroll_mfa","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/kxzy8fru2avvq2kf.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/auth.login_with":{"id":"routes/auth.login_with","parentId":"root","path":"auth/login_with","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/nhc8fgpbbye45ddy.js","imports":["https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css","https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/g.$gizmoId.view":{"id":"routes/g.$gizmoId.view","parentId":"root","path":"g/:gizmoId/view","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":true,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/joyl35oo1bknrbhe.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/m5nl9fanqxhxp5j8.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/invite.accepted":{"id":"routes/invite.accepted","parentId":"root","path":"invite/accepted","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/mdsrbyyyuy8i0whd.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/search.feedback":{"id":"routes/search.feedback","parentId":"routes/search","path":"feedback","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/kgibed7roi4o4tnc.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/account.cancel":{"id":"routes/account.cancel","parentId":"root","path":"account/cancel","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/f438ok3q4xaexldi.js","imports":[],"css":[]},"routes/account.manage":{"id":"routes/account.manage","parentId":"root","path":"account/manage","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/hc3ogh6atdn8rcoh.js","imports":[],"css":[]},"routes/admin.identity":{"id":"routes/admin.identity","parentId":"routes/admin","path":"identity","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/obhk7triyrukxe39.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/jk8w36bsokizpx57.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/bmgyfq775pdwfzaw.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin.settings":{"id":"routes/admin.settings","parentId":"routes/admin","path":"settings","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/omzk95zgj8kxuitl.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/javg35sdg99x9tsv.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/bmgyfq775pdwfzaw.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/search.machine":{"id":"routes/search.machine","parentId":"routes/search","path":"machine","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/doivpdv8rk2fpe9n.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/search_._index":{"id":"routes/search_._index","parentId":"root","path":"search","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/f32b4yb61z9obuyk.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/acba7ryldzgc43lq.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/nv9hhwe1hyggyh87.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/efz9sxvbc2q7qqmm.js","https://cdn.oaistatic.com/assets/fbqgwj6qtlb9xtkk.js","https://cdn.oaistatic.com/assets/neav6k36puk44vhv.js","https://cdn.oaistatic.com/assets/kfioli7082e56f5c.js","https://cdn.oaistatic.com/assets/exg7058hf4ct7p8b.js","https://cdn.oaistatic.com/assets/gxzuje31a3a9dsut.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/983a0dy92b3ronpv.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/db4ckjfamsw1iore.js","https://cdn.oaistatic.com/assets/kqwdyvkaaavvn8k3.js","https://cdn.oaistatic.com/assets/gefdbxsemfkvs86p.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/kl1di1ygk01ncha0.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/hd80pjgig22v5kcv.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/_conversation":{"id":"routes/_conversation","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":true,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/euh9lc9l55ehuxzg.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/l073i3o7wz5lnloz.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/hmjswdi4wh596fl1.js","https://cdn.oaistatic.com/assets/g233jbmgj8j86ygl.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin.billing":{"id":"routes/admin.billing","parentId":"routes/admin","path":"billing","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/e6mdy0jilaxpv2de.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/iej0cupg2dqkmejt.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/bmgyfq775pdwfzaw.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin._index":{"id":"routes/admin._index","parentId":"routes/admin","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/dis44lehpch7785w.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/iej0cupg2dqkmejt.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin.groups":{"id":"routes/admin.groups","parentId":"routes/admin","path":"groups","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/gc0kx5q7t45405cf.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/kbl35kx7h3ihgku0.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/d3y72ugnrmac5z1v.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/auth.logout":{"id":"routes/auth.logout","parentId":"root","path":"auth/logout","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/4b7uxdjo8j6nf2jf.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/gpts._index":{"id":"routes/gpts._index","parentId":"root","path":"gpts","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/dyrws8676ha3v7rs.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/exw0xe34rs2u8d52.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/imwtt6z6av0di6t6.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/l88odlfdvsg4b2g6.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/k8unjmts6g0tf1ka.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/cz4z3pbu6ux6pmxn.js","https://cdn.oaistatic.com/assets/od9zy3milg264no9.js","https://cdn.oaistatic.com/assets/m5islwk76pkp5cyp.js","https://cdn.oaistatic.com/assets/hg9oun43zu8s8jth.js","https://cdn.oaistatic.com/assets/jbc1iteh05yod7ft.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin.gpts":{"id":"routes/admin.gpts","parentId":"routes/admin","path":"gpts","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/b2p8q4e7tcmzuswh.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/javg35sdg99x9tsv.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/bzctgnw2j3qd7y8q.js","https://cdn.oaistatic.com/assets/oxj7j2p9i6mp62t0.js","https://cdn.oaistatic.com/assets/d3y72ugnrmac5z1v.js","https://cdn.oaistatic.com/assets/gupdaa0kze9c38sd.js","https://cdn.oaistatic.com/assets/bmgyfq775pdwfzaw.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js","https://cdn.oaistatic.com/assets/m5nl9fanqxhxp5j8.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/fsddy3bxlesj6ecw.js","https://cdn.oaistatic.com/assets/hg9oun43zu8s8jth.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/jbc1iteh05yod7ft.js","https://cdn.oaistatic.com/assets/fs0687qtyw84v8q1.js","https://cdn.oaistatic.com/assets/lnpqnis7t2kel0cw.js","https://cdn.oaistatic.com/assets/kxwyftr8p9w7yc8v.js","https://cdn.oaistatic.com/assets/kn4kwfz3pcc0dh1y.js","https://cdn.oaistatic.com/assets/ofvfxe9a1b2fhuri.js","https://cdn.oaistatic.com/assets/obhqaj3zdb1rotq2.js","https://cdn.oaistatic.com/assets/c0l89ic47ub2421p.js","https://cdn.oaistatic.com/assets/hx0lipk659xndf71.js","https://cdn.oaistatic.com/assets/mda38ewxonn8kvuj.js","https://cdn.oaistatic.com/assets/l2oo38vrfdv3orft.js","https://cdn.oaistatic.com/assets/d8l43kuu0o9ea9il.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/ji0i2gthym3v2luf.js","https://cdn.oaistatic.com/assets/bld70ok0mq24oqdw.js","https://cdn.oaistatic.com/assets/fbqgwj6qtlb9xtkk.js","https://cdn.oaistatic.com/assets/exw0xe34rs2u8d52.js","https://cdn.oaistatic.com/assets/l88odlfdvsg4b2g6.js","https://cdn.oaistatic.com/assets/k8unjmts6g0tf1ka.js","https://cdn.oaistatic.com/assets/cz4z3pbu6ux6pmxn.js","https://cdn.oaistatic.com/assets/od9zy3milg264no9.js","https://cdn.oaistatic.com/assets/m5islwk76pkp5cyp.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/auth.error":{"id":"routes/auth.error","parentId":"root","path":"auth/error","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/migkq6jv01sjlj7m.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/b5bdoo7rz35s856u.js","https://cdn.oaistatic.com/assets/luren98bagfjc1x2.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/auth.login":{"id":"routes/auth.login","parentId":"root","path":"auth/login","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/o9yqw6le1gz6f5w0.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hku0zt9rpj7w9u64.js","https://cdn.oaistatic.com/assets/nk2qlv5c1cpbhd7r.js","https://cdn.oaistatic.com/assets/b5bdoo7rz35s856u.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/fsddy3bxlesj6ecw.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/update-app":{"id":"routes/update-app","parentId":"root","path":"update-app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/e6ljkm1k8egvh7jw.js","imports":[],"css":[]},"routes/gpts.mine":{"id":"routes/gpts.mine","parentId":"root","path":"gpts/mine","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":true,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/objj7ix9x9xjajhh.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hqitv0sbw213sss9.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/m5islwk76pkp5cyp.js","https://cdn.oaistatic.com/assets/buicxllnthhjkqpv.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/imwtt6z6av0di6t6.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/f62vqubb0r8xed1w.js","https://cdn.oaistatic.com/assets/nj8ushefqfuwoi4c.js","https://cdn.oaistatic.com/assets/hg9oun43zu8s8jth.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/l8q6mtl17u7kkoap.js","https://cdn.oaistatic.com/assets/nbxponn7987qv6zb.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/sandbox":{"id":"routes/sandbox","parentId":"root","path":"sandbox","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/f73twjbkibp4h148.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/f11hnjoh71zukblv.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/chat.$":{"id":"routes/chat.$","parentId":"root","path":"chat/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/o3rdtm3tuqjccluc.js","imports":[],"css":[]},"routes/search":{"id":"routes/search","parentId":"root","path":"search","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/mt85rtrnvo5qxp24.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]},"routes/status":{"id":"routes/status","parentId":"root","path":"status","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/lhc01mvxabmcjuag.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/nk2qlv5c1cpbhd7r.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/admin":{"id":"routes/admin","parentId":"root","path":"admin","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/erc9eabljm9ee4xw.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/mlho74ggfr424i0r.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js","https://cdn.oaistatic.com/assets/m2xb5h49bu6lvq0z.js","https://cdn.oaistatic.com/assets/k38f533rijdcqgn0.js","https://cdn.oaistatic.com/assets/e0csq37aq7fsoatu.js","https://cdn.oaistatic.com/assets/j47f1y1dfugxdi4c.js","https://cdn.oaistatic.com/assets/ucoghk4z1rejef9i.js","https://cdn.oaistatic.com/assets/ip9uh04g30enj3b9.js","https://cdn.oaistatic.com/assets/mf8aa04pcamvg3db.js","https://cdn.oaistatic.com/assets/d3g4a0hcwihawz3e.js","https://cdn.oaistatic.com/assets/mslwg28fmsyi0i8b.js","https://cdn.oaistatic.com/assets/kjnxb2s320ih2pof.js","https://cdn.oaistatic.com/assets/l48h3mdgj5xfyc0e.js","https://cdn.oaistatic.com/assets/o2246qj71dru3m9e.js","https://cdn.oaistatic.com/assets/nf6la2yi1otm0vo9.js","https://cdn.oaistatic.com/assets/f1wmn65au0ke9jk0.js","https://cdn.oaistatic.com/assets/eh2eng92zajjlxkp.js","https://cdn.oaistatic.com/assets/ev2x16g8l9ld0mx0.js","https://cdn.oaistatic.com/assets/hvem6afa1bg3riwi.js","https://cdn.oaistatic.com/assets/cqcclz4v9p8d59in.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css","https://cdn.oaistatic.com/assets/conversation-small-cll5buey.css"]},"routes/voice":{"id":"routes/voice","parentId":"root","path":"voice","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/opklwzbl8sft0i86.js","imports":[],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"https://cdn.oaistatic.com/assets/jlsqvqe95t5ka5ln.js","imports":["https://cdn.oaistatic.com/assets/p4yo0rzsteij4ihh.js","https://cdn.oaistatic.com/assets/hd436y4ydqidgeiu.js"],"css":["https://cdn.oaistatic.com/assets/root-erhliqbe.css"]}},"url":"https://cdn.oaistatic.com/assets/manifest-5de69407.js","version":"5de69407"};
requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ flask
2
+ gradio
3
+ openai
4
+ requests
5
+ cryptography
6
+ scapy
7
+ sqlalchemy
8
+ archive
9
+ aiohttp
10
+ Pillow
11
+ transformers
12
+ panel
root-erhliqbe.css ADDED
The diff for this file is too large to render. See raw diff
 
settings.py ADDED
@@ -0,0 +1,426 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # noqa: E800
2
+ """
3
+ Django settings for MobSF project.
4
+
5
+ MobSF and Django settings
6
+ """
7
+
8
+ import imp
9
+ import logging
10
+ import os
11
+
12
+ from MobSF.utils import (find_java_binary, first_run,
13
+ get_mobsf_home)
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
18
+ # MOBSF CONFIGURATIONS
19
+ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
20
+
21
+
22
+ MOBSF_VER = 'v2.0.2 Beta'
23
+
24
+ BANNER = """
25
+ __ __ _ ____ _____ ____ ___
26
+ | \/ | ___ | |__/ ___|| ___| __ _|___ \ / _ \
27
+ | |\/| |/ _ \| '_ \___ \| |_ \ \ / / __) || | | |
28
+ | | | | (_) | |_) |__) | _| \ V / / __/ | |_| |
29
+ |_| |_|\___/|_.__/____/|_| \_/ |_____(_)___/
30
+ """ # noqa: W291
31
+ # ASCII Standard
32
+ # ==============================================
33
+ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
34
+ # ==========MobSF Home Directory=================
35
+ USE_HOME = False
36
+
37
+ # True : All Uploads/Downloads will be stored in user's home directory
38
+ # False : All Uploads/Downloads will be stored in MobSF root directory
39
+ # If you need multiple users to share the scan results set this to False
40
+ # ===============================================
41
+
42
+ MobSF_HOME = get_mobsf_home(USE_HOME)
43
+ # Logs Directory
44
+ LOG_DIR = os.path.join(MobSF_HOME, 'logs/')
45
+ # Download Directory
46
+ DWD_DIR = os.path.join(MobSF_HOME, 'downloads/')
47
+ # Screenshot Directory
48
+ SCREEN_DIR = os.path.join(MobSF_HOME, 'downloads/screen/')
49
+ # Upload Directory
50
+ UPLD_DIR = os.path.join(MobSF_HOME, 'uploads/')
51
+ # Database Directory
52
+ DB_DIR = os.path.join(MobSF_HOME, 'db.sqlite3')
53
+ # Tools Directory
54
+ TOOLS_DIR = os.path.join(BASE_DIR, 'DynamicAnalyzer/tools/')
55
+ # Secret File
56
+ SECRET_FILE = os.path.join(MobSF_HOME, 'secret')
57
+
58
+ # Database
59
+ # https://docs.djangoproject.com/en/dev/ref/settings/#databases
60
+ # Sqlite3 suport
61
+
62
+ DATABASES = {
63
+ 'default': {
64
+ 'ENGINE': 'django.db.backends.sqlite3',
65
+ 'NAME': DB_DIR,
66
+ },
67
+ }
68
+ # End Sqlite3 support
69
+
70
+ # Postgres DB - Install psycopg2
71
+ """
72
+ DATABASES = {
73
+ 'default': {
74
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
75
+ 'NAME': 'mobsf',
76
+ 'USER': 'postgres',
77
+ 'PASSWORD': '',
78
+ 'HOST': 'localhost',
79
+ 'PORT': '',
80
+ }
81
+ }
82
+ # End Postgres support
83
+ """
84
+ # ===============================================
85
+
86
+ # ==========LOAD CONFIG FROM MobSF HOME==========
87
+ try:
88
+ # Update Config from MobSF Home Directory
89
+ if USE_HOME:
90
+ USER_CONFIG = os.path.join(MobSF_HOME, 'config.py')
91
+ sett = imp.load_source('user_settings', USER_CONFIG)
92
+ locals().update(
93
+ {k: v for k, v in list(sett.__dict__.items())
94
+ if not k.startswith('__')})
95
+ CONFIG_HOME = True
96
+ else:
97
+ CONFIG_HOME = False
98
+ except Exception:
99
+ logger.exception('Reading Config')
100
+ CONFIG_HOME = False
101
+ # ===============================================
102
+
103
+ # ===MOBSF SECRET GENERATION AND DB MIGRATION====
104
+ SECRET_KEY = first_run(SECRET_FILE, BASE_DIR, MobSF_HOME)
105
+
106
+ # =============================================
107
+
108
+ # =============ALLOWED EXTENSIONS================
109
+ ALLOWED_EXTENSIONS = {
110
+ '.txt': 'text/plain',
111
+ '.png': 'image/png',
112
+ '.zip': 'application/zip',
113
+ '.tar': 'application/x-tar',
114
+ }
115
+ # ===============================================
116
+
117
+ # =============ALLOWED MIMETYPES=================
118
+
119
+ APK_MIME = [
120
+ 'application/octet-stream',
121
+ 'application/vnd.android.package-archive',
122
+ 'application/x-zip-compressed',
123
+ 'binary/octet-stream',
124
+ ]
125
+ IPA_MIME = [
126
+ 'application/iphone',
127
+ 'application/octet-stream',
128
+ 'application/x-itunes-ipa',
129
+ 'application/x-zip-compressed',
130
+ 'binary/octet-stream',
131
+ ]
132
+ ZIP_MIME = [
133
+ 'application/zip',
134
+ 'application/octet-stream',
135
+ 'application/x-zip-compressed',
136
+ 'binary/octet-stream',
137
+ ]
138
+ APPX_MIME = [
139
+ 'application/octet-stream',
140
+ 'application/vns.ms-appx',
141
+ 'application/x-zip-compressed',
142
+ ]
143
+
144
+ # ===============================================
145
+
146
+ # ============DJANGO SETTINGS =================
147
+ DEBUG = True
148
+ DJANGO_LOG_LEVEL = DEBUG
149
+ ALLOWED_HOSTS = ['127.0.0.1', 'mobsf', '*']
150
+ # Application definition
151
+ INSTALLED_APPS = (
152
+ # 'django.contrib.admin',
153
+ 'django.contrib.auth',
154
+ 'django.contrib.contenttypes',
155
+ 'django.contrib.sessions',
156
+ 'django.contrib.messages',
157
+ 'django.contrib.staticfiles',
158
+ 'StaticAnalyzer',
159
+ 'DynamicAnalyzer',
160
+ 'MobSF',
161
+ 'MalwareAnalyzer',
162
+ )
163
+ MIDDLEWARE_CLASSES = (
164
+ 'django.middleware.security.SecurityMiddleware',
165
+ 'whitenoise.middleware.WhiteNoiseMiddleware',
166
+ 'django.contrib.sessions.middleware.SessionMiddleware',
167
+ 'django.middleware.common.CommonMiddleware',
168
+ 'django.middleware.csrf.CsrfViewMiddleware',
169
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
170
+ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
171
+ 'django.contrib.messages.middleware.MessageMiddleware',
172
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
173
+ )
174
+
175
+ MIDDLEWARE = (
176
+ 'MobSF.views.api.rest_api_middleware.RestApiAuthMiddleware',
177
+ )
178
+ ROOT_URLCONF = 'MobSF.urls'
179
+ WSGI_APPLICATION = 'MobSF.wsgi.application'
180
+ LANGUAGE_CODE = 'en-us'
181
+ TIME_ZONE = os.getenv('TIME_ZONE', 'UTC')
182
+ USE_I18N = True
183
+ USE_L10N = True
184
+ USE_TZ = True
185
+ TEMPLATES = [
186
+ {
187
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
188
+ 'APP_DIRS': True,
189
+ 'DIRS':
190
+ [
191
+ os.path.join(BASE_DIR, 'templates'),
192
+ ],
193
+ 'OPTIONS':
194
+ {
195
+ 'debug': True,
196
+ },
197
+ },
198
+ ]
199
+ MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
200
+ MEDIA_URL = '/uploads/'
201
+ STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
202
+ STATIC_URL = '/static/'
203
+ STATIC_ROOT = '/static/'
204
+ STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
205
+ # 256MB
206
+ DATA_UPLOAD_MAX_MEMORY_SIZE = 268435456
207
+
208
+ # ===================
209
+ # USER CONFIGURATION
210
+ # ===================
211
+
212
+ if CONFIG_HOME:
213
+ logger.info('Loading User config from: %s', USER_CONFIG)
214
+ else:
215
+ """
216
+ IMPORTANT
217
+ If 'USE_HOME' is set to True,
218
+ then below user configuration settings are not considered.
219
+ The user configuration will be loaded from
220
+ config.py in MobSF Home directory.
221
+ """
222
+ # ^CONFIG-START^: Do not edit this line
223
+ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
224
+ # MOBSF USER CONFIGURATIONS
225
+ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
226
+
227
+ # -------------------------
228
+ # STATIC ANALYZER SETTINGS
229
+ # -------------------------
230
+
231
+ # ==========ANDROID SKIP CLASSES==========================
232
+ # Common third party classes that will be skipped during static analysis
233
+ SKIP_CLASSES = [
234
+ r'com[\\\/]{1}google[\\\/]{1}',
235
+ r'com[\\\/]{1}android[\\\/]{1}',
236
+ r'android[\\\/]{1}content[\\\/]{1}',
237
+ r'android[\\\/]{1}support[\\\/]{1}',
238
+ r'android[\\\/]{1}arch[\\\/]{1}',
239
+ r'kotlin[\\\/]{1}',
240
+
241
+ r'okhttp2[\\\/]{1}', r'okhttp3[\\\/]{1}',
242
+ r'com[\\\/]{1}squareup[\\\/]{1}okhttp[\\\/]{1}',
243
+ r'com[\\\/]{1}twitter[\\\/]{1}',
244
+ r'twitter4j[\\\/]{1}',
245
+ r'org[\\\/]{1}apache[\\\/]{1}',
246
+ r'oauth[\\\/]{1}signpost[\\\/]{1}',
247
+ r'org[\\\/]{1}chromium[\\\/]{1}',
248
+ r'com[\\\/]{1}facebook[\\\/]{1}',
249
+ r'org[\\\/]{1}spongycastle[\\\/]{1}',
250
+ ]
251
+
252
+ # ==============================================
253
+
254
+ # ======WINDOWS STATIC ANALYSIS SETTINGS ===========
255
+
256
+ # Private key
257
+ WINDOWS_VM_SECRET = 'MobSF/windows_vm_priv_key.asc'
258
+ # IP and Port of the MobSF Windows VM
259
+ # example: WINDOWS_VM_IP = '127.0.0.1' ;noqa E800
260
+ WINDOWS_VM_IP = None
261
+ WINDOWS_VM_PORT = '8000'
262
+ # ==================================================
263
+
264
+ # ==============3rd Party Tools=================
265
+ """
266
+ If you want to use a different version of 3rd party tools used by MobSF.
267
+ You can do that by specifying the path here. If specified, MobSF will run
268
+ the tool from this location.
269
+ """
270
+
271
+ # Android 3P Tools
272
+ JADX_BINARY = ''
273
+ BACKSMALI_BINARY = ''
274
+ APKTOOL_BINARY = ''
275
+ ADB_BINARY = ''
276
+
277
+ # iOS 3P Tools
278
+ OTOOL_BINARY = ''
279
+ JTOOL_BINARY = ''
280
+ CLASSDUMPZ_BINARY = ''
281
+ CLASSDUMP_SWIFT_BINARY = ''
282
+
283
+ # COMMON
284
+ JAVA_DIRECTORY = ''
285
+ VBOXMANAGE_BINARY = ''
286
+ PYTHON3_PATH = ''
287
+
288
+ """
289
+ Examples:
290
+ JAVA_DIRECTORY = 'C:/Program Files/Java/jdk1.7.0_17/bin/'
291
+ JAVA_DIRECTORY = '/usr/bin/'
292
+ VBOXMANAGE_BINARY = '/usr/bin/VBoxManage'
293
+ PYTHON3_PATH = 'C:/Users/Ajin/AppData/Local/Programs/Python/Python35-32/'
294
+ JADX_BINARY = 'C:/Users/Ajin/AppData/Local/Programs/jadx/bin/jadx.bat'
295
+ JADX_BINARY = '/Users/ajin/jadx/bin/jadx'
296
+ """
297
+ # ==========================================================
298
+ # -------------------------
299
+ # DYNAMIC ANALYZER SETTINGS
300
+ # -------------------------
301
+
302
+ # =======ANDROID DYNAMIC ANALYSIS SETTINGS===========
303
+ ANALYZER_IDENTIFIER = ''
304
+ FRIDA_TIMEOUT = 4
305
+ # ==============================================
306
+
307
+ # ================HTTPS PROXY ===============
308
+ PROXY_PORT = 1337 # Proxy Port
309
+ ROOT_CA = '0025aabb.0'
310
+ # ===================================================
311
+
312
+ # ========UPSTREAM PROXY SETTINGS ==============
313
+ # If you are behind a Proxy
314
+ UPSTREAM_PROXY_ENABLED = False
315
+ UPSTREAM_PROXY_SSL_VERIFY = True
316
+ UPSTREAM_PROXY_TYPE = 'http'
317
+ UPSTREAM_PROXY_IP = '127.0.0.1'
318
+ UPSTREAM_PROXY_PORT = 3128
319
+ UPSTREAM_PROXY_USERNAME = ''
320
+ UPSTREAM_PROXY_PASSWORD = ''
321
+ # ==============================================
322
+
323
+ # --------------------------
324
+ # MALWARE ANALYZER SETTINGS
325
+ # --------------------------
326
+ DOMAIN_MALWARE_SCAN = True
327
+ APKID_ENABLED = False
328
+ # ==============================================
329
+
330
+ # -----External URLS--------------------------
331
+ MALWARE_DB_URL = 'http://www.malwaredomainlist.com/mdlcsv.php'
332
+ VIRUS_TOTAL_BASE_URL = 'https://www.virustotal.com/vtapi/v2/file/'
333
+ TRACKERS_URL = 'https://reports.exodus-privacy.eu.org'
334
+ TRACKERS_DB_URL = '{}/api/trackers'.format(TRACKERS_URL)
335
+
336
+ # ========DISABLED COMPONENTS===================
337
+
338
+ # ----------VirusTotal--------------------------
339
+ VT_ENABLED = False
340
+ VT_API_KEY = 'XXXXXXXXXXXXXX'
341
+ VT_UPLOAD = False
342
+ # Before setting VT_ENABLED to True,
343
+ # Make sure VT_API_KEY is set to your VirusTotal API key
344
+ # register at: https://www.virustotal.com/#/join-us
345
+ # You can get your API KEY from:
346
+ # https://www.virustotal.com/en/user/<username>/apikey/
347
+ # Files will be uploaded to VirusTotal
348
+ # if VT_UPLOAD is set to True.
349
+ # ==============================================
350
+ # ^CONFIG-END^: Do not edit this line
351
+
352
+
353
+ # ============JAVA SETTINGS======================
354
+ JAVA_BINARY = find_java_binary()
355
+ # ===============================================
356
+
357
+ # Better logging
358
+ LOGGING = {
359
+ 'version': 1,
360
+ 'disable_existing_loggers': True,
361
+ 'formatters': {
362
+ 'standard': {
363
+ 'format': '[%(levelname)s] %(asctime)-15s - %(message)s',
364
+ 'datefmt': '%d/%b/%Y %H:%M:%S',
365
+ },
366
+ 'color': {
367
+ '()': 'colorlog.ColoredFormatter',
368
+ 'format':
369
+ '%(log_color)s[%(levelname)s] %(asctime)-15s - %(message)s',
370
+ 'datefmt': '%d/%b/%Y %H:%M:%S',
371
+ 'log_colors': {
372
+ 'DEBUG': 'cyan',
373
+ 'INFO': 'green',
374
+ 'WARNING': 'yellow',
375
+ 'ERROR': 'red',
376
+ 'CRITICAL': 'red,bg_white',
377
+ },
378
+ },
379
+ },
380
+ 'handlers': {
381
+ 'logfile': {
382
+ 'level': 'DEBUG',
383
+ 'class': 'logging.FileHandler',
384
+ 'filename': os.path.join(MobSF_HOME, 'logs', 'debug.log'),
385
+ 'formatter': 'standard',
386
+ },
387
+ 'console': {
388
+ 'level': 'DEBUG',
389
+ 'class': 'logging.StreamHandler',
390
+ 'formatter': 'color',
391
+ },
392
+ },
393
+ 'loggers': {
394
+ 'django': {
395
+ 'handlers': ['console', 'logfile'],
396
+ 'level': 'DEBUG',
397
+ 'propagate': True,
398
+ },
399
+ 'django.db.backends': {
400
+ 'handlers': ['console', 'logfile'],
401
+ # DEBUG will log all queries, so change it to WARNING.
402
+ 'level': 'INFO',
403
+ 'propagate': False, # Don't propagate to other handlers
404
+ },
405
+ 'MobSF': {
406
+ 'handlers': ['console', 'logfile'],
407
+ 'level': 'DEBUG',
408
+ 'propagate': False,
409
+ },
410
+ 'StaticAnalyzer': {
411
+ 'handlers': ['console', 'logfile'],
412
+ 'level': 'DEBUG',
413
+ 'propagate': False,
414
+ },
415
+ 'MalwareAnalyzer': {
416
+ 'handlers': ['console', 'logfile'],
417
+ 'level': 'DEBUG',
418
+ 'propagate': False,
419
+ },
420
+ 'DynamicAnalyzer': {
421
+ 'handlers': ['console', 'logfile'],
422
+ 'level': 'DEBUG',
423
+ 'propagate': False,
424
+ },
425
+ },
426
+ }
user_setup.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # scripts/user_setup.py
2
+
3
+ import json
4
+ import os
5
+
6
+ def collect_api_keys():
7
+ """Collect API keys from the user."""
8
+ api_keys = {}
9
+ services = ["Gemini", "OpenAI Codex", "OpenAI 3.5 Free Tier"]
10
+
11
+ for service in services:
12
+ count = int(input(f"How many API keys do you want to use for {service}? (max 5): "))
13
+ if count > 5:
14
+ print("You can only enter a maximum of 5 API keys.")
15
+ return
16
+ keys = [input(f"Enter API key {i + 1} for {service}: ") for i in range(count)]
17
+ api_keys[service] = keys
18
+
19
+ return api_keys
20
+
21
+ def collect_sms_provider():
22
+ """Collect the SMS provider preference from the user."""
23
+ sms_provider = input("Which SMS provider do you want to use? (e.g., Twilio, Nexmo): ")
24
+ return sms_provider
25
+
26
+ def save_configuration(api_keys, sms_provider):
27
+ """Save the collected configurations to a JSON file."""
28
+ config = {
29
+ "api_keys": api_keys,
30
+ "sms_provider": sms_provider
31
+ }
32
+
33
+ with open('config.json', 'w') as config_file:
34
+ json.dump(config, config_file, indent=4)
35
+
36
+ print("Configuration saved successfully.")
37
+
38
+ def main():
39
+ print("Welcome to the Corporate Device Security Audit Setup!")
40
+ api_keys = collect_api_keys()
41
+ sms_provider = collect_sms_provider()
42
+ save_configuration(api_keys, sms_provider)
43
+
44
+ if __name__ == "__main__":
45
+ main()
utils.py ADDED
@@ -0,0 +1,631 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Common Utils."""
2
+ import ast
3
+ import hashlib
4
+ import io
5
+ import logging
6
+ import ntpath
7
+ import os
8
+ import platform
9
+ import random
10
+ import re
11
+ import shutil
12
+ import signal
13
+ import subprocess
14
+ import stat
15
+ import sys
16
+ import sqlite3
17
+ import unicodedata
18
+ import threading
19
+ from distutils.version import LooseVersion
20
+
21
+ import psutil
22
+
23
+ import requests
24
+
25
+ from django.shortcuts import render
26
+
27
+ from install.windows.setup import windows_config_local
28
+
29
+ from . import settings
30
+
31
+ logger = logging.getLogger(__name__)
32
+ ADB_PATH = None
33
+
34
+
35
+ class Color(object):
36
+ GREEN = '\033[92m'
37
+ ORANGE = '\033[33m'
38
+ RED = '\033[91m'
39
+ BOLD = '\033[1m'
40
+ END = '\033[0m'
41
+
42
+
43
+ def upstream_proxy(flaw_type):
44
+ """Set upstream Proxy if needed."""
45
+ if settings.UPSTREAM_PROXY_ENABLED:
46
+ if not settings.UPSTREAM_PROXY_USERNAME:
47
+ proxy_port = str(settings.UPSTREAM_PROXY_PORT)
48
+ proxy_host = '{}://{}:{}'.format(
49
+ settings.UPSTREAM_PROXY_TYPE,
50
+ settings.UPSTREAM_PROXY_IP,
51
+ proxy_port)
52
+ proxies = {flaw_type: proxy_host}
53
+ else:
54
+ proxy_port = str(settings.UPSTREAM_PROXY_PORT)
55
+ proxy_host = '{}://{}:{}@{}:{}'.format(
56
+ settings.UPSTREAM_PROXY_TYPE,
57
+ settings.UPSTREAM_PROXY_USERNAME,
58
+ settings.UPSTREAM_PROXY_PASSWORD,
59
+ settings.UPSTREAM_PROXY_IP,
60
+ proxy_port)
61
+ proxies = {flaw_type: proxy_host}
62
+ else:
63
+ proxies = {flaw_type: None}
64
+ verify = bool(settings.UPSTREAM_PROXY_SSL_VERIFY)
65
+ return proxies, verify
66
+
67
+
68
+ def api_key():
69
+ """Print REST API Key."""
70
+ if os.environ.get('MOBSF_API_KEY'):
71
+ logger.info('\nAPI Key read from environment variable')
72
+ return os.environ['MOBSF_API_KEY']
73
+
74
+ secret_file = os.path.join(settings.MobSF_HOME, 'secret')
75
+ if is_file_exists(secret_file):
76
+ try:
77
+ _api_key = open(secret_file).read().strip()
78
+ return gen_sha256_hash(_api_key)
79
+ except Exception:
80
+ logger.exception('Cannot Read API Key')
81
+
82
+
83
+ def print_version():
84
+ """Print MobSF Version."""
85
+ logger.info(settings.BANNER)
86
+ ver = settings.MOBSF_VER
87
+ if platform.system() == 'Windows':
88
+ logger.info('Mobile Security Framework %s', ver)
89
+ print('REST API Key: ' + api_key())
90
+ else:
91
+ logger.info('\033[1m\033[34mMobile Security Framework %s\033[0m', ver)
92
+ print('REST API Key: ' + Color.BOLD + api_key() + Color.END)
93
+ logger.info('OS: %s', platform.system())
94
+ logger.info('Platform: %s', platform.platform())
95
+ if platform.dist()[0]:
96
+ logger.info('Dist: %s', str(platform.dist()))
97
+ find_java_binary()
98
+ check_basic_env()
99
+ thread = threading.Thread(target=check_update, name='check_update')
100
+ thread.start()
101
+
102
+
103
+ def check_update():
104
+ try:
105
+ logger.info('Checking for Update.')
106
+ github_url = ('https://raw.githubusercontent.com/'
107
+ 'MobSF/Mobile-Security-Framework-MobSF/'
108
+ 'master/MobSF/settings.py')
109
+ try:
110
+ proxies, verify = upstream_proxy('https')
111
+ except Exception:
112
+ logger.exception('Setting upstream proxy')
113
+ response = requests.get(github_url, timeout=5,
114
+ proxies=proxies, verify=verify)
115
+ html = str(response.text).split('\n')
116
+ local_version = settings.MOBSF_VER
117
+ for line in html:
118
+ if line.startswith('MOBSF_VER'):
119
+ remote_version = line.split('= ', 1)[1].replace('\'', '')
120
+ if LooseVersion(local_version) < LooseVersion(remote_version):
121
+ logger.warning('A new version of MobSF is available, '
122
+ 'Please update to %s from master branch.',
123
+ remote_version)
124
+ else:
125
+ logger.info('No updates available.')
126
+ break
127
+ except requests.exceptions.HTTPError:
128
+ logger.warning('\nCannot check for updates..'
129
+ ' No Internet Connection Found.')
130
+ return
131
+ except Exception:
132
+ logger.exception('Cannot Check for updates.')
133
+
134
+
135
+ def create_user_conf(mobsf_home):
136
+ try:
137
+ config_path = os.path.join(mobsf_home, 'config.py')
138
+ if not is_file_exists(config_path):
139
+ sample_conf = os.path.join(settings.BASE_DIR, 'MobSF/settings.py')
140
+ with open(sample_conf, 'r') as f:
141
+ dat = f.readlines()
142
+ config = []
143
+ add = False
144
+ for line in dat:
145
+ if '^CONFIG-START^' in line:
146
+ add = True
147
+ if '^CONFIG-END^' in line:
148
+ break
149
+ if add:
150
+ config.append(line.lstrip())
151
+ config.pop(0)
152
+ conf_str = ''.join(config)
153
+ with open(config_path, 'w') as f:
154
+ f.write(conf_str)
155
+ except Exception:
156
+ logger.exception('Cannot create config file')
157
+
158
+
159
+ def get_mobsf_home(use_home):
160
+ try:
161
+ mobsf_home = ''
162
+ if use_home:
163
+ mobsf_home = os.path.join(os.path.expanduser('~'), '.MobSF')
164
+ # MobSF Home Directory
165
+ if not os.path.exists(mobsf_home):
166
+ os.makedirs(mobsf_home)
167
+ create_user_conf(mobsf_home)
168
+ else:
169
+ mobsf_home = settings.BASE_DIR
170
+ # Logs Directory
171
+ log_dir = os.path.join(mobsf_home, 'logs/')
172
+ if not os.path.exists(log_dir):
173
+ os.makedirs(log_dir)
174
+ # Certs Directory
175
+ cert_dir = os.path.join(log_dir, 'certs/')
176
+ if not os.path.exists(cert_dir):
177
+ os.makedirs(cert_dir)
178
+ # Download Directory
179
+ dwd_dir = os.path.join(mobsf_home, 'downloads/')
180
+ if not os.path.exists(dwd_dir):
181
+ os.makedirs(dwd_dir)
182
+ # Screenshot Directory
183
+ screen_dir = os.path.join(dwd_dir, 'screen/')
184
+ if not os.path.exists(screen_dir):
185
+ os.makedirs(screen_dir)
186
+ # Upload Directory
187
+ upload_dir = os.path.join(mobsf_home, 'uploads/')
188
+ if not os.path.exists(upload_dir):
189
+ os.makedirs(upload_dir)
190
+ return mobsf_home
191
+ except Exception:
192
+ logger.exception('Creating MobSF Home Directory')
193
+
194
+
195
+ def make_migrations(base_dir):
196
+ """Create Database Migrations."""
197
+ try:
198
+ manage = os.path.join(base_dir, 'manage.py')
199
+ args = [get_python(), manage, 'makemigrations']
200
+ subprocess.call(args)
201
+ args = [get_python(), manage, 'makemigrations', 'StaticAnalyzer']
202
+ subprocess.call(args)
203
+ except Exception:
204
+ logger.exception('Cannot Make Migrations')
205
+
206
+
207
+ def migrate(base_dir):
208
+ """Migrate Database."""
209
+ try:
210
+ manage = os.path.join(base_dir, 'manage.py')
211
+ args = [get_python(), manage, 'migrate']
212
+ subprocess.call(args)
213
+ args = [get_python(), manage, 'migrate', '--run-syncdb']
214
+ subprocess.call(args)
215
+ except Exception:
216
+ logger.exception('Cannot Migrate')
217
+
218
+
219
+ def find_java_binary():
220
+ """Find Java."""
221
+ # Respect user settings
222
+ if platform.system() == 'Windows':
223
+ jbin = 'java.exe'
224
+ else:
225
+ jbin = 'java'
226
+ if is_dir_exists(settings.JAVA_DIRECTORY):
227
+ if settings.JAVA_DIRECTORY.endswith('/'):
228
+ return settings.JAVA_DIRECTORY + jbin
229
+ elif settings.JAVA_DIRECTORY.endswith('\\'):
230
+ return settings.JAVA_DIRECTORY + jbin
231
+ else:
232
+ return settings.JAVA_DIRECTORY + '/' + jbin
233
+ if os.getenv('JAVA_HOME'):
234
+ java = os.path.join(
235
+ os.getenv('JAVA_HOME'),
236
+ 'bin',
237
+ jbin)
238
+ if is_file_exists(java):
239
+ return java
240
+ return 'java'
241
+
242
+
243
+ def get_python():
244
+ """Get Python Executable."""
245
+ return sys.executable
246
+
247
+
248
+ def run_process(args):
249
+ try:
250
+ proc = subprocess.Popen(
251
+ args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
252
+ dat = ''
253
+ while True:
254
+ line = proc.stdout.readline()
255
+ if not line:
256
+ break
257
+ dat += str(line)
258
+ return dat
259
+ except Exception:
260
+ logger.error('Finding Java path - Cannot Run Process')
261
+ return ''
262
+
263
+
264
+ def print_n_send_error_response(request,
265
+ msg,
266
+ api=False,
267
+ exp='Description'):
268
+ """Print and log errors."""
269
+ logger.error(msg)
270
+ if api:
271
+ api_response = {'error': msg}
272
+ return api_response
273
+ else:
274
+ context = {
275
+ 'title': 'Error',
276
+ 'exp': exp,
277
+ 'doc': msg,
278
+ }
279
+ template = 'general/error.html'
280
+ return render(request, template, context, status=500)
281
+
282
+
283
+ def filename_from_path(path):
284
+ head, tail = ntpath.split(path)
285
+ return tail or ntpath.basename(head)
286
+
287
+
288
+ def get_md5(data):
289
+ return hashlib.md5(data).hexdigest()
290
+
291
+
292
+ def find_between(s, first, last):
293
+ try:
294
+ start = s.index(first) + len(first)
295
+ end = s.index(last, start)
296
+ return s[start:end]
297
+ except ValueError:
298
+ return ''
299
+
300
+
301
+ def is_number(s):
302
+ try:
303
+ float(s)
304
+ return True
305
+ except ValueError:
306
+ pass
307
+ try:
308
+ unicodedata.numeric(s)
309
+ return True
310
+ except (TypeError, ValueError):
311
+ pass
312
+ return False
313
+
314
+
315
+ def python_list(value):
316
+ if not value:
317
+ value = []
318
+ if isinstance(value, list):
319
+ return value
320
+ return ast.literal_eval(value)
321
+
322
+
323
+ def python_dict(value):
324
+ if not value:
325
+ value = {}
326
+ if isinstance(value, dict):
327
+ return value
328
+ return ast.literal_eval(value)
329
+
330
+
331
+ def is_base64(b_str):
332
+ return re.match('^[A-Za-z0-9+/]+[=]{0,2}$', b_str)
333
+
334
+
335
+ def is_internet_available():
336
+ try:
337
+ proxies, verify = upstream_proxy('https')
338
+ except Exception:
339
+ logger.exception('Setting upstream proxy')
340
+ try:
341
+ requests.get('https://www.google.com', timeout=5,
342
+ proxies=proxies, verify=verify)
343
+ return True
344
+ except requests.exceptions.HTTPError:
345
+ try:
346
+ requests.get('https://www.baidu.com/', timeout=5,
347
+ proxies=proxies, verify=verify)
348
+ return True
349
+ except requests.exceptions.HTTPError:
350
+ return False
351
+ return False
352
+
353
+
354
+ def sha256(file_path):
355
+ blocksize = 65536
356
+ hasher = hashlib.sha256()
357
+ with io.open(file_path, mode='rb') as afile:
358
+ buf = afile.read(blocksize)
359
+ while buf:
360
+ hasher.update(buf)
361
+ buf = afile.read(blocksize)
362
+ return hasher.hexdigest()
363
+
364
+
365
+ def sha256_object(file_obj):
366
+ blocksize = 65536
367
+ hasher = hashlib.sha256()
368
+ buf = file_obj.read(blocksize)
369
+ while buf:
370
+ hasher.update(buf)
371
+ buf = file_obj.read(blocksize)
372
+ return hasher.hexdigest()
373
+
374
+
375
+ def gen_sha256_hash(msg):
376
+ """Generate SHA 256 Hash of the message."""
377
+ hash_object = hashlib.sha256(msg.encode('utf-8'))
378
+ return hash_object.hexdigest()
379
+
380
+
381
+ def is_file_exists(file_path):
382
+ if os.path.isfile(file_path):
383
+ return True
384
+ # This fix situation where a user just typed "adb" or another executable
385
+ # inside settings.py
386
+ if shutil.which(file_path):
387
+ return True
388
+ else:
389
+ return False
390
+
391
+
392
+ def is_dir_exists(dir_path):
393
+ if os.path.isdir(dir_path):
394
+ return True
395
+ else:
396
+ return False
397
+
398
+
399
+ def get_random():
400
+ choice = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
401
+ return ''.join([random.SystemRandom().choice(choice) for i in range(50)])
402
+
403
+
404
+ def zipdir(path, zip_file):
405
+ """Zip a directory."""
406
+ try:
407
+ logger.info('Zipping')
408
+ # pylint: disable=unused-variable
409
+ # Needed by os.walk
410
+ for root, _sub_dir, files in os.walk(path):
411
+ for file_name in files:
412
+ zip_file.write(os.path.join(root, file_name))
413
+ except Exception:
414
+ logger.exception('Zipping')
415
+
416
+
417
+ def find_process_by(name):
418
+ """Return a set of process path matching name."""
419
+ proc = set()
420
+ for p in psutil.process_iter(attrs=['name', 'exe', 'cmdline']):
421
+ if (name == p.info['name'] or p.info['exe']
422
+ and os.path.basename(p.info['exe']) == name
423
+ or p.info['cmdline'] and p.info['cmdline'][0] == name):
424
+ proc.add(p.info['exe'])
425
+ return proc
426
+
427
+
428
+ def get_device():
429
+ """Get Device."""
430
+ if os.getenv('ANALYZER_IDENTIFIER'):
431
+ return os.getenv('ANALYZER_IDENTIFIER')
432
+ if settings.ANALYZER_IDENTIFIER:
433
+ return settings.ANALYZER_IDENTIFIER
434
+ else:
435
+ dev_id = ''
436
+ out = subprocess.check_output([get_adb(), 'devices']).splitlines()
437
+ if len(out) > 2:
438
+ dev_id = out[1].decode('utf-8').split('\t')[0]
439
+ return dev_id
440
+ logger.error('Is the Android VM running?\n'
441
+ 'MobSF cannot identify device id.\n'
442
+ 'Please set ANALYZER_IDENTIFIER in MobSF/settings.py')
443
+
444
+
445
+ def get_adb():
446
+ """Get ADB binary path."""
447
+ try:
448
+ global ADB_PATH
449
+ if (len(settings.ADB_BINARY) > 0
450
+ and is_file_exists(settings.ADB_BINARY)):
451
+ ADB_PATH = settings.ADB_BINARY
452
+ return ADB_PATH
453
+ if ADB_PATH:
454
+ return ADB_PATH
455
+ if platform.system() == 'Windows':
456
+ adb_loc = find_process_by('adb.exe')
457
+ else:
458
+ adb_loc = find_process_by('adb')
459
+ if len(adb_loc) > 1:
460
+ logger.warning('Multiple ADB locations found. '
461
+ 'Set adb path, ADB_BINARY in MobSF/settings.py'
462
+ ' with same adb binary location used'
463
+ ' by Genymotion VM/Android VM.')
464
+ logger.warning(adb_loc)
465
+ if adb_loc:
466
+ ADB_PATH = adb_loc.pop()
467
+ return ADB_PATH
468
+ except Exception:
469
+ logger.exception('Getting ADB Location')
470
+ finally:
471
+ if ADB_PATH:
472
+ os.environ['MOBSF_ADB'] = ADB_PATH
473
+ else:
474
+ os.environ['MOBSF_ADB'] = 'adb'
475
+ logger.warning('Dynamic Analysis related '
476
+ 'functions will not work. '
477
+ '\nMake sure a Genymotion Android VM'
478
+ ' is running before performing Dynamic Analyis.')
479
+ return 'adb'
480
+
481
+
482
+ def check_basic_env():
483
+ """Check if we have basic env for MobSF to run."""
484
+ logger.info('MobSF Basic Environment Check')
485
+ try:
486
+ import http_tools # noqa F401
487
+ except ImportError:
488
+ logger.exception('httptools not installed!')
489
+ os.kill(os.getpid(), signal.SIGTERM)
490
+ try:
491
+ import lxml # noqa F401
492
+ except ImportError:
493
+ logger.exception('lxml is not installed!')
494
+ os.kill(os.getpid(), signal.SIGTERM)
495
+ if not is_file_exists(settings.JAVA_BINARY):
496
+ logger.error(
497
+ 'JDK 8+ is not available. '
498
+ 'Set JAVA_HOME environment variable'
499
+ ' or JAVA_DIRECTORY in MobSF/settings.py')
500
+ logger.info('Current Configuration: '
501
+ 'JAVA_DIRECTORY=%s', settings.JAVA_DIRECTORY)
502
+ logger.info('Example Configuration:'
503
+ '\nJAVA_DIRECTORY = "C:/Program Files/'
504
+ 'Java/jdk1.7.0_17/bin/"'
505
+ '\nJAVA_DIRECTORY = "/usr/bin/"')
506
+ os.kill(os.getpid(), signal.SIGTERM)
507
+ get_adb()
508
+
509
+
510
+ def first_run(secret_file, base_dir, mobsf_home):
511
+ # Based on https://gist.github.com/ndarville/3452907#file-secret-key-gen-py
512
+
513
+ if is_file_exists(secret_file):
514
+ secret_key = open(secret_file).read().strip()
515
+ else:
516
+ try:
517
+ secret_key = get_random()
518
+ secret = open(secret_file, 'w')
519
+ secret.write(secret_key)
520
+ secret.close()
521
+ except IOError:
522
+ Exception('Secret file generation failed' % secret_file)
523
+ # Run Once
524
+ make_migrations(base_dir)
525
+ migrate(base_dir)
526
+ # Windows Setup
527
+ windows_config_local(mobsf_home)
528
+ return secret_key
529
+
530
+
531
+ def update_local_db(db_name, url, local_file):
532
+ """Update Local DBs."""
533
+ update = None
534
+ inmemoryfile = None
535
+ try:
536
+ proxies, verify = upstream_proxy('http')
537
+ except Exception:
538
+ logger.exception('[ERROR] Setting upstream proxy')
539
+ try:
540
+ response = requests.get(url,
541
+ timeout=3,
542
+ proxies=proxies,
543
+ verify=verify)
544
+ resp = response.content
545
+ inmemoryfile = io.BytesIO(resp)
546
+ # Check1: SHA256 Change
547
+ if sha256_object(inmemoryfile) != sha256(local_file):
548
+ # Hash Changed
549
+ logger.info('%s Database is outdated!', db_name)
550
+ update = resp
551
+ else:
552
+ logger.info('%s Database is up-to-date', db_name)
553
+ return update
554
+ except Exception:
555
+ logger.exception('[ERROR] %s DB Update', db_name)
556
+ return update
557
+ finally:
558
+ if inmemoryfile:
559
+ inmemoryfile.truncate(0)
560
+
561
+
562
+ def read_sqlite(sqlite_file):
563
+ """Sqlite Dump - Readable Text."""
564
+ logger.info('Reading SQLite db')
565
+ table_dict = {}
566
+ try:
567
+ con = sqlite3.connect(sqlite_file)
568
+ cur = con.cursor()
569
+ cur.execute('SELECT name FROM sqlite_master WHERE type=\'table\';')
570
+ tables = cur.fetchall()
571
+ for table in tables:
572
+ table_dict[table[0]] = {'head': [], 'data': []}
573
+ cur.execute('PRAGMA table_info(\'%s\')' % table)
574
+ rows = cur.fetchall()
575
+ for sq_row in rows:
576
+ table_dict[table[0]]['head'].append(sq_row[1])
577
+ cur.execute('SELECT * FROM \'%s\'' % table)
578
+ rows = cur.fetchall()
579
+ for sq_row in rows:
580
+ tmp_row = []
581
+ for each_row in sq_row:
582
+ tmp_row.append(str(each_row))
583
+ table_dict[table[0]]['data'].append(tmp_row)
584
+ except Exception:
585
+ logger.exception('Reading SQLite db')
586
+ return table_dict
587
+
588
+
589
+ def is_pipe_or_link(path):
590
+ """Check for named pipe."""
591
+ return os.path.islink(path) or stat.S_ISFIFO(os.stat(path).st_mode)
592
+
593
+
594
+ def get_network():
595
+ """Get Network IPs."""
596
+ ips = []
597
+ try:
598
+ for det in psutil.net_if_addrs().values():
599
+ ips.append(det[0].address)
600
+ except Exception:
601
+ logger.exception('Failed to enumerate network interfaces')
602
+ return ips
603
+
604
+
605
+ def get_proxy_ip(identifier):
606
+ """Get Proxy IP."""
607
+ proxy_ip = None
608
+ try:
609
+ if not identifier:
610
+ return proxy_ip
611
+ ips = get_network()
612
+ if ':' not in identifier or not ips:
613
+ return proxy_ip
614
+ device_ip = identifier.split(':', 1)[0]
615
+ ip_range = device_ip.rsplit('.', 1)[0]
616
+ guess_ip = ip_range + '.1'
617
+ if guess_ip in ips:
618
+ return guess_ip
619
+ for ip_addr in ips:
620
+ to_check = ip_addr.rsplit('.', 1)[0]
621
+ if to_check == ip_range:
622
+ return ip_addr
623
+ except Exception:
624
+ logger.error('Error getting Proxy IP')
625
+ return proxy_ip
626
+
627
+
628
+ def is_safe_path(safe_root, check_path):
629
+ """Detect Path Traversal."""
630
+ return os.path.commonprefix(
631
+ (os.path.realpath(check_path), safe_root)) == safe_root