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 方法,最后得到一个回复包。