mirror of https://github.com/hak5/omg-payloads.git
Update README.md
parent
31736a79eb
commit
8fe5d1de40
|
@ -14,10 +14,19 @@ A script used to configure a persistent keylogger on a Linux computer trough a p
|
|||
|
||||
This payload is based on [Telegram Persistent Connection](Telegram_Persistent_Connection) payload for create the Telegram connection.
|
||||
|
||||
Nello script potete trovare due classi che ereditano Thread chiamate Keylogger e Sender ed una classe di memoria condivisa chiamata Log. Le classi Thread svolgono due compiti distinti:
|
||||
- Keylogger: La classe Keylogger si occupa di acquisire, tramite la librearia keyboard, i tasti premuti e in funzione di questo rilevamente viene invocata la funzione callback opportunamente modificata e indicata nel richiamo della funzione. Quando viene rilevato l'utilizzo di un certo tasto da tastiera viene di seguito aggiunto alla variabile di log tramite il metodo `add_to_log()` dell'oggetto `self.log` della classe `Log`.
|
||||
- Sender: La classe Sender rappresenta un thread che si occupa solo ed esclusivamente di invocare periodicamente il metodo `send_log()` dell'oggetto `self.log` della classe `Log`.
|
||||
- Log: La classe Log rappresenta una entità a memoria condivisa. La memoria condivisa è la variabile `self.log` che periodicamente viene gestita tramite i metodi `add_to_log()` e `send_log()`. Questa classe è stata ideata con l'obiettivo di evitare la perdita di dati e per tanto si è pensato di applicare un sistema di gestione dei lock affinché se un utente dovesse scrivere molto velocemente non si creino situazioni spiacevoli o inaspettate. Al fine di gestire i lock è stato deciso di utilizzare `RLock` e `Condition` rispettivamente nei metodi della classe. Il metodo `add_to_log(self, log)` si occupa di acquisire il lock tramite l'invocazione `with self.lock` e di aggiornare la variabile interna con il nuovo carattere ricevuto. Dal momento che come condizione di attesa sulla gestione dei lock vi è solo quella in cui la variabile self.lock sia vuota allora subito dopo l'aggiornamento della variabile interna viene invocata la funzione sbloccante `self.condition.notify_all()` che permette a tutti i Thread (in questo caso in realtà solo 1, il Sender) di svegliarsi e di procedere con l'operazione di invio. Il metodo `send_log(self)` si occupa di acquisire il lock e di porsi in condizione di attesa tramite il comando `self.condition.wait()` nel caso in cui la variabile self.log risulti vuota. Una volta riaquisito il lock, in seguito ad un risveglio, il Thread Sender procederà con l'invio del messaggio tramite comando `bot.send_message(...)` riportando ad uno stato iniziale vuoto la variabile self.log. E' bene sottolineare che seppure questo bot Telegram potrebbe essere utilizzato da chiunque in maniera dinamica, potrebbe essere una buona usanza utilizzare l'ID in maniera statica (riga 16 del file Python) in quanto il ricevente dei messaggi sarete sempre voi e non qualcun'altro (almeno non dovrebbe essere così). Questo aspetto può risultare poco sicuro in quanto rilasciate una informazione molto sensibile e delicata per quanto riguarda la vostra riservatezza e la vostra identità, ma dal momento che questo script non è assolutamente pensato ai fini malevoli o in ambiti reali, bensì è stato pensato e creato ai fini di studio.
|
||||
In the script, you can find two classes that inherit Thread called Keylogger and Sender, and a shared memory class called Log. The Thread classes perform two distinct tasks:
|
||||
|
||||
- Keylogger: The Keylogger class is responsible for capturing the pressed keys using the keyboard library. Based on the detected key, a modified callback function specified in the function call is invoked. When the usage of a certain keyboard key is detected, it is subsequently added to the log variable using the `add_to_log()` method of the `self.log` object from the Log class.
|
||||
|
||||
- Sender: The Sender class represents a thread solely dedicated to periodically invoking the `send_log()` method of the `self.log` object from the Log class.
|
||||
|
||||
- Log: The Log class represents a shared memory entity. The shared memory is the variable `self.log`, which is periodically managed through the `add_to_log()` and `send_log()` methods. This class was designed with the aim of avoiding data loss, and thus a lock management system was applied to prevent undesirable or unexpected situations when multiple users write rapidly. To handle the locks, `RLock` and `Condition` were chosen in the respective methods of the class.
|
||||
|
||||
The `add_to_log(self, log)` method acquires the lock through the invocation of `with self.lock` and updates the internal variable with the new received character. As the only waiting condition on the lock management is when the variable `self.lock` is empty, immediately after updating the internal variable, the unlocking function `self.condition.notify_all()` is invoked, allowing all threads (in this case, actually only 1, the Sender) to wake up and proceed with the sending operation.
|
||||
|
||||
The `send_log(self)` method acquires the lock and enters a waiting condition using `self.condition.wait()` if the variable `self.log` is empty. Once the lock is reacquired following a wake-up, the Sender Thread proceeds with sending the message using the `bot.send_message(...)` command, resetting the `self.log` variable to an empty initial state.
|
||||
|
||||
It is worth noting that although this Telegram bot could be used dynamically by anyone, it might be a good practice to use the ID statically (line 16 of the Python file) since the message recipients will always be you and not someone else (at least it shouldn't be so). This aspect may be considered less secure as it exposes sensitive and delicate information concerning your privacy and identity. However, since this script is not intended for malicious purposes or real-world use, but rather for educational purposes, it has been thoughtfully created and designed for study purposes.
|
||||
|
||||
Because Telegram uses a limited size per message, the script divides the output of the command into a theoretically infinite chunk of 1000 characters in length that will be sent one by one through the Telegram Bot.
|
||||
|
||||
|
@ -41,4 +50,4 @@ Because Telegram uses a limited size per message, the script divides the output
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue