File Transfer Protocol Version 2

Version 2 of's file transfer protocol (BNFTPv2) is a simple extension to version one, which allows to validate a CD key before allowing a file transfer to take place.

The request is sent to after connecting and requesting protocol BNFTP (0x02):

   (UINT16)    Length of this message
   (UINT16)    Protocol Version
   (UINT32)    Platform ID
   (UINT32)    Product ID
   (UINT32)    Banner ID*
   (UINT32)    BannerExtension* responds to this request by sending a challenge in the form of the Server Token to be used as part of the CD key hash:

   (UINT32)    Server Token

The client should respond to this challenge with the following message:

   (UINT32)    Starting position (facilitates resuming)
 (FILETIME)    Local filetime
   (UINT32)    Client Token
   (UINT32)    Key Length
   (UINT32)    Key's product value
   (UINT32)    Key's public value
   (UINT32)    Unknown (Always 0)
   (UINT32)[5] CD key hash
   (STRING)    Filename

The CD key is hashed in exactly the same manner as for SID_AUTH_CHECK. If the key is rejected, the server disconnects. If the key is accepted, the server responds with the following message:

   (UINT32)    Length of this message (not including file data)
   (UINT32)    File size
   (UINT32)    Banner ID*
   (UINT32)    Banner Extension*
 (FILETIME)    Remote Filetime
   (STRING)    Filename
     (VOID)    File data

After receiving the complete file data (determined by the filesize), the client terminates the connection.

The starred fields (*) are only required when downloading an ad banner. In other cases, they should be set to 0.
Version 2 of BNFTP actually has a version of 0x200 (512).

| Edited: RealityRipple


no one has commented yet.