AIDL 模糊測試

AIDL 模糊器

fuzzer 通過生成的存根導入/調用遠程服務,充當遠程服務的客戶端:

#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在fuzzer中被調用,傳入一個IBinder(Service)和dataProvider作為參數。它首先使用數據提供者初始化一個隨機的 Parcel 對象,並使用輸入的 parcel 調用遠程服務上的 transact 方法,最後得到一個回复包。