0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オフライン生成AI「ollama」でマルウェアのコード解析にチャレンジした記録

Posted at

ollamaのダウンロード

https://ollama.com/download/windows

ollamaのインストール

OllamaSetup.exe

インストールが成功したか確認

PS C:\Users\admin> ollama --version
ollama version is 0.14.2

コード解析向けLLMを入れる

PS C:\Users\admin> ollama pull codellama:7b
PS C:\Users\admin> ollama pull deepseek-coder:6.7b
PS C:\Users\admin> ollama pull mistral

今、入っているLLM

PS C:\Users\admin> ollama list
NAME                   ID              SIZE      MODIFIED
mistral:latest         6577803aa9a0    4.4 GB    17 seconds ago
deepseek-coder:6.7b    ce298d984115    3.8 GB    28 minutes ago
codellama:7b           8fdf8f752f6e    3.8 GB    19 hours ago

とりあえず起動して、自分が作ったpython を実行してみる
解析させたコード

import hashlib
import csv
import base64

base64_salt = "IgIMZ9QskMK0sqkNum5WWw=="
salt = base64.b64decode(base64_salt)

password_range = range(10000)

r_table = []

for password in password_range:
    password_str = f"{password:04d}"
    salted_password = salt + password_str.encode() + salt
    hash_result = hashlib.sha256(salted_password).hexdigest()
    r_table.append([password_str, hash_result])

csv_filename = "r_table.csv"
with open(csv_filename, mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["Password", "Hash"])
    writer.writerows(r_table)

csv_filename

やばい、intel CORE i7 が発熱し、ファンが唸り声を上げて、回り始めた。

CPUの使用率 60%台後半

GPUの使用率 0%

シールを見ると、NVIDIA GEFORCE RTX と書いてるけど、型番は?

PS C:\Users\admin> nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 572.83                 Driver Version: 572.83         CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4060 ...  WDDM  |   00000000:01:00.0 Off |                  N/A |
| N/A   47C    P0             17W /  115W |       0MiB /   8188MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

GPUを使うように

PS C:\Users\admin> setx OLLAMA_CUDA 1

成功: 指定した値は保存されました。

再起動

今度は?

チャッピー並みの速度が出たが、英語だ。

日本語にして

無視

チャッピーにお願い方法を聞いたら、「日本語で説明してください」と入力せよとアドバイス

その結果


このスクリプトは、指定されたパスワード範囲から SHA-256 ハッシュを生成する Python スクリプトです。以下が含まれています。

1. `import hashlib`: この行は、Python でハッシュ生成に使用される `hashlib` モジュールをインポートします。
2. `import csv`: この行は、CSVファイルを読み書きするために使用される `csv` モジュールをインポートします。
3. `import base64`: この行は、Base64エンコーディングとデコードを行うために使用される `base64` モジュールをインポートします。
4. `base64_salt = "IgIMZ9QskMK0sqkNum5WWw=="`: この行では、Base64エンコーディングされた salt を定義します。
5. `salt = base64.b64decode(base64_salt)`: この行では、Base64エンコーディングされた salt をデコードして変数 `salt` に代入します。
6. `password_range = range(10000)`: この行では、パスワード範囲を定義します。
7. `r_table = []`: この行では、空のリスト `r_table` を初期化します。
8. `for password in password_range`: このループでは、パスワード範囲内の各パスワードについて SHA-256 ハッシュを生成します。
9. `password_str = f"{password:04d}"`: この行では、現在のパスワードを文字列に変換し、先頭にゼロを追加します。
10. `salted_password = salt + password_str.encode() + salt`: この行では、 salt と現在のパスワード文字列を連結して salting されたパスワードを生成します。
11. `hash_result = hashlib.sha256(salted_password).hexdigest()`: この行では、 `hashlib` モジュールを使用して salting されたパスワードに対する SHA-256 ハッシュを生成し、 `.hexdigest()` メソッドを使用して16進数のダイジェストを文字列として取得します。
12. `r_table.append([password_str, hash_result])`: この行では、パスワード文字列とそれに対するハッシュ結果をリストに追加します。
13. `with open(csv_filename, mode='w', newline='') as file`: この行では、CSVファイルを書き込むために使用されるファイルオブジェクトを作成します。
14. `writer = csv.writer(file)`: この行では、CSVファイルの書き込みに使用される `csv.writer()` 関数を使用して、ファイルオブジェクトに対する CSVライターオブジェクトを作成します。
15. `writer.writerow(["Password", "Hash"])`: この行では、CSVファイルにヘッダー行を書き込みます。
16. `writer.writerows(r_table)`: この行では、リスト `r_table` の各要素を CSVファイルに書き込みます。各行には、パスワード文字列とそれに対するハッシュ結果が含まれています。
17. `csv_filename`: この行では、出力される CSVファイルの名前を定義します。

LLMの比較

codellama:7b
「日本語にして」は無視される
「日本語で説明してください」とお願いしないと日本語にならない
「概要だけにして」も無視される

deepseek-coder:6.7b
質問も回答も英語のみ

mistral
codellama:7bと類似の動き
codellama:7bより優れている点はよくわからなかった

結局、codellama:7bだけ残して、他は消した。

ollama + codellama:7b のディスク使用量 約17GB

GPUがintelオンボードの場合でも動くかは不明。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?