It is simpler to use a byte buffer as shown below. This assumes the password is little endian (least significant byte first). If it is expecting big endian, you simply need to reverse the byte order.
if([characteristic.UUID isEqual: [CBUUID UUIDWithString: @"FFFF"]]) {
Byte byteArray[] = { 0x0F, 0x00, 0x00 };
[peripheral writeValue:[[NSData alloc] initWithBytes: byteArray length: 3]forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
}
The code in the question does not work because it will convert a hex string to bytes, which is not what you want at all. You end up getting one byte for each of the the eight characters in the string, "0x00000F". You want three bytes.