AVVERTENZA
Questo è un RAT difettoso, non completato, non stabile. È ancora un'applicazione "work in progress".
Introduzione
Progetto creato per ammazzare parte del mio tempo libero, non è mantenuto attivamente.
Ci sono molte cose da migliorare/correggere, e ci vorrà tempo per raggiungere una stabilità su questo progetto.
Caratteristiche
- Reverse Shell
- Elenca processi
- Streaming del desktop
- FileSystem
- Scarica file
Capire il progetto
IThreadChannels sono un mezzo per far comunicare due thread in modo sincrono.
Li uso come oggetto atomico condiviso da due thread per la comunicazione, in questa app
voglio una comunicazione bidirezionale, quindi mi servono due canali, ecco perché ho creato IDoubleThreadChannel.
Sincrono significa che devono essere chiamati dai thread comunicanti per ricevere eventi secondo necessità.
Ad esempio, il thread dell'interfaccia utente chiamerà getFromApp() e si bloccherà lì per ricevere gli eventi App.
I Communicators, d'altra parte, gestiscono il proprio threading e attivano callback in modo asincrono.
Non li chiami tu, sono loro a chiamare te.
Linee guida
- Gli oggetti Packet dovrebbero essere eliminati da NetServerService
- I puntatori Client dovrebbero essere eliminati da Application.
Macro
- SHOW_CONSOLE Se deve essere mostrata una console per scopi di debug.
- MANUAL_MEMORY_MANAGEMENT Se true provo a gestire la memoria che alloco (per apprendimento), se false,
userò shared_ptr per rendere la gestione della memoria molto più semplice.
DA FARE
- Funzionalità di streaming del desktop non terminata (uscire dal ciclo infinito).
- Eliminare gli errori, per lo più problemi di conversione
- L'header del pacchetto deve inviare 8 byte per la lunghezza del pacchetto, non int32_t, quindi cambiarlo in uint64_t
- Usare i Read/Write Locks https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-acquiresrwlockexclusive
- Il campo dataLength nella classe Buffer non è corretto, dovrebbe essere migliorato
- Il problema degli oggetti Event che hanno un void* che non dovrebbe essere eliminato tramite delete void*
può essere risolto o come ho fatto io, il consumatore dell'evento si occupa di castarlo al valore previsto
e di eliminarlo, oppure usando template di classi come new AppEvent e quindi questo potrebbe essere delete object*
- La classe Buffer dovrebbe lanciare eccezioni per operazioni illegali.
- Crittografia
- Streaming della fotocamera
- Gestione degli errori .... ovunque.