Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
manul — Manulは、Windows、Linux、MacOS上のオープンソースおよびブラックボックスバイナリ向けのカバレッジガイド並列ファザーです。 | Kitploit
ツール/GitHubGitHub/mxmssh/manul
動的分析 (サンドボックス)脆弱性分析ファジングバイナリ解析
GitHubmxmssh/manul

manul

Manulは、Windows、Linux、MacOS上のオープンソースおよびブラックボックスバイナリ向けのカバレッジガイド並列ファザーです。

リポジトリを見る
335676年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Manul

Travis AppVeyor

ロゴ

Manulは、Windows、Linux、macOS(ベータ版)上でオープンソースおよびブラックボックスバイナリ向けの、カバレッジガイド付き並列ファザーです。純粋なPythonで書かれています。

クイックスタート

root@kitploit:~
pip3 install psutil
git clone https://github.com/mxmssh/manul
cd manul
mkdir in
mkdir out
echo "AAAAAA" > in/test
python3 manul.py -i in -o out -n 4 "linux/test/test_afl @@"

Radamsaのインストール

root@kitploit:~
sudo apt-get install gcc make git wget
git clone https://gitlab.com/akihe/radamsa.git && cd radamsa && make && sudo make install

Windowsにradamsaをインストールする必要はありません。Manulは、このプラットフォームではradamsaネイティブライブラリと共に配布されています。

公開CVEの一覧

CVE IDsProductFinder
CVE-2019-9631 CVE-2019-7310 CVE-2019-9959PopplerMaksim Shudrak
CVE-2018-17019 CVE-2018-16807 CVE-2019-12175Bro/ZeekMaksim Shudrak

Manulを使用して新しいバグを見つけた場合は、私に連絡してください。リストに追加します。

デモ

簡単なデモ

依存関係

  1. Python3(Python2は2020年1月1日以降非推奨ですが、ManulはPython2でも問題なく動作するはずです)
  2. psutil
  3. pywin32(pip install pywin32)Windowsプラットフォーム(DBI永続モードのみ必要)。

カバレッジガイド付きファジング

現在、Manulは2種類のインストルメンテーションをサポートしています:AFLベース(afl-gcc、afl-clang、afl-clang-fast)とDBIです。

カバレッジガイド付きファジング(AFLインストルメンテーションモード)

root@kitploit:~
CC=afl-gcc CXX=afl-g++ CFLAGS=-fsanitize=address CXXFLAGS=-fsanitize=address cmake <path_to_your_target>
make -j 8
root@kitploit:~
USE_ASAN=1 CC=afl-clang-fast CXX=afl-clang-fast++ cmake <path_to_your_target>
make -j 8

詳細はこちらの手順を参照してください。

DBIモードでのカバレッジガイド付きファジング

このモードではターゲットをインストルメントする必要はありませんが、WindowsまたはLinux向けの最新バージョンのDynamoRIOフレームワークをダウンロードする必要があります。

Manulは、LinuxおよびWindows向けにx86/x64プリコンパイル済みクライアントと共に配布されています。以下のフォルダにあります:

root@kitploit:~
linux/dbi_32|dbi_64/libbinafl.so (DynamoRIO client)
win/dbi_32|dbi_64/binafl.dll

残念ながら、DynamoRIOはMacOSでは公式にサポートされていません。

DynamoRIOを使用したブラックボックスバイナリのファジング

最新のDynamoRIOリリースパッケージはDynamoRIOダウンロードページにあります。

manul.configファイル内の以下の行をコメント解除し、DynamoRIOランチャーとクライアントへの正しいパスを指定する必要があります。

root@kitploit:~
# Choose DBI framework to provide coverage back to Manul ("dynamorio" or "pin"). Example dbi = dynamorio
dbi = dynamorio
# If dbi parameter is not None the path to dbi engine launcher and dbi client should be specified.
dbi_root = /home/max/DynamoRIO/bin64/drrun
dbi_client_root = /home/max/manul/linux/dbi_64/libbinafl.so
dbi_client_libs = None

さらに、永続的なインメモリファジングを使用することで、ブラックボックスファジングキャンペーンのパフォーマンスを向上させることができます。このモードでは、特定の関数をインストルメントするようにManulに指示し(はい、バイナリを逆アセンブルしてそれを見つける必要があります)、以下の行をコメント解除することでループで実行します:

root@kitploit:~
dbi_persistence_mode = 1
dbi_target_module = afl_test
dbi_target_method = open_file
#dbi_target_offset = 0x3198 # optionally you can provide offset of this function instead of name
dbi_fuzz_iterations = 1000

winAFLの作者は、実際の仕組みについてこちらで非常に良い説明を提供しています。Manulは、winAFLインストルメンテーションライブラリのコードの大部分を使用して、ターゲットと通信し、インストルメントします。

重要なお知らせ:32ビットバイナリをファズするには32ビットランチャーと32ビットクライアントを使用し、64ビットバイナリには64ビットランチャーと64ビットクライアントを使用してください!

DynamoRIOクライアントライブラリのコンパイル

インストルメンテーションライブラリをコンパイルするには、DynamoRIOの最新バージョンを使用する必要があります。インストルメンテーションライブラリのソースコードは、Manulメインフォルダにあるdbi_clients_srcにあります。

root@kitploit:~
64-bit Linux

cd dbi_clients_src
wget <DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz> - download the latest DynamoRIO
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz/cmake
make
root@kitploit:~
32-bit Linux
cd dbi_clients_src
wget <DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz> - download the latest DynamoRIO
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
CFLAGS=-m32 CXXFLAGS=-m32 cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz/cmake
make

On Windows, the easiest way to compile the library would be to install Visual Studio (tested on 2017 & 2013 versions), launch VS20XX Cross Tools Command Prompt and run the following commands:

root@kitploit:~
64-bit Windows
cd dbi_clients_src
<Download and extract the latest version of DynamoRIO>
mkdir client_64
cd client_64
cmake -G"Visual Studio 15 Win64" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (or just Debug if needed)
root@kitploit:~
32-bit Windows
cd dbi_clients_src
<Download and extract the latest version of DynamoRIO>
mkdir client_32
cd client_32
cmake -G"Visual Studio 15" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (or just Debug if needed)

Intel PINを使用したLinuxでのブラックボックスバイナリのファジング

Manulは当初Intel PINカバレッジガイド付きファジングをサポートしていましたが、パフォーマンスが低く、メンテナンスのオーバーヘッドが高いため、現在はサポートされていません。

コマンドライン引数

最も頻繁に使用されるオプションはコマンドラインで指定できます。より多くのオプションは設定ファイル(manul.config)を使用してサポートされています。

root@kitploit:~
Example: python3 manul.py -i corpus -o out_dir -n 40 "target @@"

positional arguments:
  target_binary  The target binary and options to be executed (don't forget to include quotes e.g. "target e @@").

optional arguments:
  -h, --help     show this help message and exit
  -n NFUZZERS    Number of parallel fuzzers
  -s             Run dumb fuzzing (no code instrumentation)
  -c CONFIG      Path to config file with additional options (see Configuration File Options section below)
  -r             Restore previous session

Required parameters:
  -i INPUT       Path to directory with initial corpus
  -o OUTPUT      Path to output directory

設定ファイルオプション

Manulはデフォルトのmanul.configファイルと共に配布されており、ユーザーはサポートされているすべてのオプションと使用例を見つけることができます。オプションは次の形式で指定する必要があります:Format: <option_name> = <value>。記号#を使用して行を無視できます。

辞書

dict = /home/max/dictionaries/test.dict。AFL変異戦略では、ユーザーがファズファイル内のランダムな場所に挿入できるカスタムトークンのリストを指定できます。Manulはこのオプションを介してこの機能をサポートしています(絶対パスが推奨されます)。

変異子の重み

mutator_weights=afl:7,radamsa:2,my_mutator:1。変異子の重みにより、ユーザーはManulに対して、特定のファザーが10回の実行あたり何回の変異を実行するかを指示できます。この例では、AFL変異子が7/10の変異で実行され、Radamsaが2/10、カスタムmy_mutatorが1/10の割合になります。特定の変異子を無効にする場合は、重みを0に設定します(例:mutator_weights=afl:0,radamsa:1,my_mutator:9)。

決定論的シード(Radamsaオプション)

deterministic_seed = False|True。Trueを指定すると、Radamsaの変異が決定論的になり、Manulの実行ごとに同じ出力が生成されます。

スレッドごとのサマリー表示

print_per_thread = False|True。このオプションを有効にすると、Manulは全体のサマリーの代わりに、実行中の各スレッドのサマリーを表示します。

揮発性パスの無効化

disable_volatile_bytes = False|True このオプションを有効にすると、Manulは揮発性パスをブラックリストに登録しません。

AFLのフォークサーバー(UNIXのみ)

forkserver_on = False|True AFLのフォークサーバーを有効または無効にします。

DBIオプション

dbi = dynamorio|pin。このオプションは、Manulがターゲットをインストルメントするために使用するDBIフレームワークを指定します。

dbi_root = <path>。このオプションは、ManulにDBIフレームワークのメインランチャーを見つける場所を指示します。

dbi_client_root = <path>。このオプションは、Manulにインストルメンテーションを実行するDBIクライアントを見つける場所を指示します。

dbi_client_libs = name_#1,name_#2|None。このオプションは、メインターゲットと一緒にインストルメントする必要があるライブラリのリストを指定するために使用できます(例:ターゲットライブラリをロードする実行可能ファイルと、バグを探したい他のいくつかのライブラリがある場合)。

dbi_persistence_mode = 0|1|2。このオプションは、DBI永続モードを選択するために使用されます。0 - 永続化なし、1 - 標準永続化(関数ラッピング)、2 - まだサポートされていません。

dbi-persistence_mode = 1|2の場合、以下のオプションを指定する必要があります:

dbi_target_module = <module name>。Manulはここで指定されたモジュール内でターゲット関数を検索しようとします。

dbi_target_method = <function name>。永続化のためにラップする関数名。

dbi_target_offset = <offset of function e.g. 0x3198>。永続化のためにラップする関数のオフセット。デバッグシンボルが利用できない場合、このオプションをdbi_target_methodの代わりに使用できます。

dbi_fuzz_iterations = 500。プログラム全体が再起動する前にメモリ内で実行するファズイテレーションの数。この引数を調整して、ターゲットに最適な値を見つけてください。

dbi_thread_coverage = False。ターゲット関数を実行したスレッドからのみカバレッジをインストルメントします(まだサポートされていません)。

タイムアウト

timeout = 10。ターゲットを強制終了して次のテストケースを送信するまでの待機時間。

init_wait

init_wait = 1。このオプションは、ターゲットの初期化に必要なタイムアウトを設定するために使用できます。

NetslaveおよびNetmasterオプション

オプションnet_config_masterとnet_config_slaveは、Manulインスタンスをネットワーク経由で分散するために使用されます。分散ファジングを実行するには、次の3つの手順を実行する必要があります。

  1. IP:port形式のホストリストを含むファイルを作成します。ここでスレーブが実行されます。
  2. リモートマシンですべてのManulスレーブインスタンスを起動し(必要なオプションとターゲットバイナリへのパスを指定)、以下のオプションを有効にします: net_config_slave = 0.0.0.0:1337。Manulはインスタンスを起動し、ポート1337でマスターインスタンスからの着信接続を待機します。
  3. マスターインスタンスを起動し、手順1で作成したスレーブインスタンスのリストを含むファイルをnet_config_master = file_nameを使用して指定します。

デバッグモード

debug = False|True - デバッグ情報を表示します。

logging_enable = False|True - デバッグ情報をログに保存します。

ロゴ

manul_logo = False|True - 最初にManulロゴを表示します。

統計情報の無効化

no_stats = False|True - 統計情報を保存します。

ビットマップ同期頻度(DBIモードでは5000推奨)

sync_freq = 10000。カバレッジビットマップの同期頻度を変更できます。このオプションは、Manulが並列ファジングインスタンス間でカバレッジを同期する頻度を指定します。値を小さくするとパフォーマンスは低下しますが、インスタンス間の調整が向上します。

出力保存先のカスタムパス

#custom_path = test_path - このオプションを使用すると、テストケースをカスタムフォルダに保存できます(ターゲットが事前定義された場所からロードしたい場合)。

コマンドラインファジング(実験的)

cmd_fuzzing = True|False。このオプションを有効にすると、Manulはファイルに保存する代わりに、コマンドラインを介してターゲットに入力を提供します。

シグナルの無視

user_signals = 6,2,1|None。ユーザーは、ターゲットからのどのシグナルを無視するか(クラッシュと見なさない)をManulに指示できます。

ネットワークファジング(実験的)

target_ip_port = 127.0.0.1:7715|None - ターゲットのIPとポートを指定するために使用します。 target_protocol = tcp|tcp - ネットワーク経由でターゲットに入力を送信するプロトコルを指定するために使用します。 net_sleep_between_cases = 0.0。このオプションは、ターゲットに送信されるテストケース間の遅延を定義するために使用できます。

現在、ネットワークファジングは実験的な機能です(詳細はissuesを参照してください)。

カスタム変異子の追加

カスタム変異子は以下の3つの手順で追加できます: 手順1. Python (.py) ファイルを作成し、適当な名前を付けます(例:example_mutator.py)。

手順2. 2つの関数def init(fuzzer_id)とdef mutate(data)を作成します。詳細はexample_mutatorを参照してください。Manulはファジング初期化時にinit関数を呼び出し、ターゲットに提供される各ファイルに対してmutateを呼び出します。

手順3. manul.configのmutator_weightsを使用してその名前を指定し、変異子を有効にします。例:mutator_weights=afl:2,radamsa:0,example_mutator:8。

注:AFLおよびRadamsa変異子は常に指定する必要があります。AFLやRadamsaを無効にしたい場合は、それらの重みを0に設定してください。

技術詳細

TBD

ステータス画面

ステータス画面

ツールをダウンロード