
Android ARMv8.3カーネルバイナリにパッチを適用してドライバ署名検証を無効化し、開発およびセキュリティテスト用のカスタムカーネルモジュールの読み込みを可能にします。
AndroidDriveSignityAndroidDriveSignityは、Androidカーネル(ARMv8.3)ファイルにパッチを適用して、さまざまな検証チェック(特に署名検証)の対象にならずにドライバをロードできるようにするために設計されたPythonスクリプトです。このツールは、非公式または改変されたドライバのロードを防ぐカーネル組み込みのセキュリティ機構をバイパスできるようにすることで、開発・テストプロセスを容易にすることを目的としています。
check_modinfo、check_version、module_sig_check)を変更し、ドライバの署名検証メカニズムを回避します。必要なファイルを準備する: カーネルバイナリファイル(kernel_file_path)、kallsymsシンボルテーブルファイル(kallsyms_file_path)、パッチ適用後のカーネルの出力先(output_file_path)があることを確認します。
AndroidDriveSignityを実行する: ターミナルまたはコマンドプロンプトでスクリプトのディレクトリに移動し、次を実行します:
python AndroidDriveSignity.py <kernel_file_path> <kallsyms_file_path> <output_file_path>
adb shell
su
echo 0 > /proc/sys/kernel/kptr_restrict
exit
exit
adb shell su -c "cat /proc/kallsyms > /data/local/tmp/kallsyms"
adb pull /data/local/tmp/kallsyms
パーティションが2つある場合は、まず「boot_a」を試してください:
adb shell su -c "dd if=$(readlink /dev/block/by-name/boot_a) of=/data/local/tmp/boot.img"
パーティションが1つだけの場合は、「boot.img」です:
adb shell su -c "dd if=$(readlink /dev/block/by-name/boot) of=/data/local/tmp/boot.img"
次に、ブートイメージをローカルマシンにプルします:
adb pull /data/local/tmp/boot.img
最後に、magiskbootを使用してboot.imgからカーネルファイルを抽出します。
magiskboot --unpack boot.img
kernel(カーネルファイル)とramdisk.cpioの2つのファイルが得られます。
python AndroidDriveSignity.py kernel kallsyms new-kernel
move/mv new-kernel kernel
magiskboot --repack boot.img
adb reboot bootloader
fastboot flash boot new-boot.img
fastboot reboot
adb push demo.ko /data/local/tmp
adb shell su -c insmod /data/local/tmp/demo.ko
adb shell su -c "lsmod |grep demo"
adb shell su -c rmmod /data/local/tmp/demo.ko
Androidドライバのサンプルはこちらから入手できます。
LinuxAndroid