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 개체를 초기화하고 입력 소포를 사용하여 원격 서비스에서 transact 메서드를 호출한 다음 마지막으로 회신 소포로 응답을 가져옵니다.