AIDL Fuzzer
Fuzzer berperilaku sebagai klien untuk layanan jarak jauh dengan mengimpor/memanggilnya melalui rintisan yang dihasilkan:
#include <fuzzbinder/libbinder_ndk_driver.h>
#include <fuzzer/FuzzedDataProvider.h>
#include <android-base/logging.h>
#include <android/binder_interface_utils.h>
using android::fuzzService;
using ndk::SharedRefBase;
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
auto binder = ndk::SharedRefBase::make<MyService>(...);
fuzzService(binder->asBinder().get(), FuzzedDataProvider(data, size));
return 0;
}
Kerangka kerja untuk mengaburkan layanan AIDL
Seperti yang ditunjukkan pada contoh di atas, fuzzService dipanggil di fuzzer dan mengambil IBinder (Layanan) dan dataProvider sebagai parameter input. Ini pertama-tama menginisialisasi objek Parcel acak menggunakan penyedia data dan memanggil metode transaksi pada layanan jarak jauh dengan menggunakan paket input, dan akhirnya mendapatkan balasan menjadi paket balasan.