AIDL-фаззинг

AIDL-фаззер

Фаззер ведет себя как клиент удаленной службы, импортируя/вызывая ее через сгенерированную заглушку:

#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;
}

Фреймворк для фаззинга сервисов AIDL

Как показано в приведенном выше примере, fuzzService вызывается в фаззере и принимает IBinder (Service) и dataProvider в качестве входных параметров. Сначала он инициализирует случайный объект Parcel с помощью поставщика данных и вызывает метод транзакции в удаленной службе, используя входную посылку, и, наконец, получает ответ в ответной посылке.