def test_items(sample, firmware):
    if sample not in OBJECTS:
        return Status(0)
    objects = firmware.iterate_objects()
    all_objects = flatten_firmware_objects(objects)
    num_objects = len(all_objects)
    if num_objects != OBJECTS[sample]:
        print ("Inconsistency parsing (%s): expected %d objects, found: %d" % (
            sample, OBJECTS[sample], num_objects))
        print ("This 'may' be expected if this change improves the object " +
            "discovery/parsing logic.")
        return Status(1)
    print ("Listing (%s): item count: %d" % (sample, num_objects))
    return Status(0)
def test_items(sample, firmware):
    if sample not in OBJECTS:
        return Status(0)
    objects = firmware.iterate_objects()
    all_objects = flatten_firmware_objects(objects)
    num_objects = len(all_objects)
    if num_objects != OBJECTS[sample]:
        print("Inconsistency parsing (%s): expected %d objects, found: %d" % (
            sample, OBJECTS[sample], num_objects))
        print("This 'may' be expected if this change improves the object " +
            "discovery/parsing logic.")
        return Status(1)
    print("Listing (%s): item count: %d" % (sample, num_objects))
    return Status(0)
Пример #3
0
        print "[#] Rebuild complete, injection successful."
        dump_data(args.output, output_object[1])
        print "[#] Injected firmware written to %s." % args.output
        sys.exit(0)

    if args.pfs:
        print "[#] Opening firmware as Dell PFS."
        parsed = parse_pfs(input_data)
    else:
        print "[#] Opening firmware as UEFI firmware volume."
        parsed = parse_firmware_volume(input_data)
    if parsed is None:
        sys.exit(0)

    ### Iterate over each file object.
    objects = flatten_firmware_objects(parsed.iterate_objects(True))
    print "[#] Firmware objects parsed."
    for firmware_object in objects:
        if firmware_object["guid"] == args.guid and type(
                firmware_object["_self"]) == FirmwareFile:
            print "[#] Injecting (replacing) FirmwareFile %s." % green(
                args.guid)
            #firmware_object["_self"].data = injection_data
            firmware_object["_self"].regen(injection_data)
            print "[#] Regenerating firmware children structures (from injection point)."
            firmware_object["_self"].process()
            print "[#] Regeneration complete, child objects parsed."
    print "[#] Rebuilding complete firmware with injection."
    output_object = parsed.build()
    print "[#] Rebuild complete, injection successful."
    dump_data(args.output, output_object)
        print "[#] Rebuild complete, injection successful."
        dump_data(args.output, output_object[1])
        print "[#] Injected firmware written to %s." % args.output
        sys.exit(0)

    if args.pfs:
        print "[#] Opening firmware as Dell PFS."
        parsed = parse_pfs(input_data)
    else:
        print "[#] Opening firmware as UEFI firmware volume."
        parsed = parse_firmware_volume(input_data)
    if parsed is None:
        sys.exit(0)

    ### Iterate over each file object.
    objects = flatten_firmware_objects(parsed.iterate_objects(True))
    print "[#] Firmware objects parsed."
    for firmware_object in objects:
        if firmware_object["guid"] == args.guid and type(firmware_object["_self"]) == FirmwareFile:
            print "[#] Injecting (replacing) FirmwareFile %s." % green(args.guid)
            #firmware_object["_self"].data = injection_data
            firmware_object["_self"].regen(injection_data)
            print "[#] Regenerating firmware children structures (from injection point)."
            firmware_object["_self"].process()
            print "[#] Regeneration complete, child objects parsed."
    print "[#] Rebuilding complete firmware with injection."
    output_object = parsed.build()
    print "[#] Rebuild complete, injection successful."
    dump_data(args.output, output_object)
    print "[#] Injected firmware written to %s." % args.output