Patching Files: Difference between revisions

From wowdev
Jump to navigation Jump to search
No edit summary
mNo edit summary
Line 29: Line 29:
Followings are for binary/new patch header:
Followings are for binary/new patch header:


   4bytes: signature,
   2 bytes: Size of the patch header (I've only seen 0x18)
   * 0x01040018 means binary patch
  2 bytes: signature,
   * 0x0104 means binary patch
   8 bytes: unknown, always 8 bytes 0x00
   8 bytes: unknown, always 8 bytes 0x00
   4 bytes: file size n
   4 bytes: file size n
Line 39: Line 40:
Followings are for plain text patch header:
Followings are for plain text patch header:


   4bytes: signature,
   2 bytes: Size of the patch header (I've only seen 0x18)
   * 0x04040018 means plain text patch
  2 bytes: signature,
   * 0x0404 means plain text patch
   8 bytes: maybe timestamp
   8 bytes: maybe timestamp
   4 bytes: file size
   4 bytes: file size

Revision as of 04:05, 23 July 2009

For updating files WoW uses bsdiff. Have a look at "http://www.daemonology.net/bsdiff/" or "http://www.pokorra.de/coding/bsdiff.html"


I had try bsdiff, but it doesn't work.

 1. extract achievement.dbc from enUS\DBFilesClient in Patches\WoW-3.1.3-to-3.2.0-enUS-Win-patch\wow-partial-1.MPQ
 2. rename it to achievement.dbc.patch (45K)
 3. extract achievement.dbc from DBFilesClient in Data\enUS\patch-enUS-2.MPQ
 4. rename it to achievement.dbc.old
 5. bsdiff
   usage: bspatch.exe oldfile newfile patchfile
 6. bsdiff chievement.dbc.old achievement.dbc achievement.dbc.patch
   Corrupt patch
 7. extract achievement.dbc from DBFilesClient in PTR:Data\enUS\patch-enUS-2.MPQ
 8. rename it to achievement.dbc.ptr
 9. bsdiff achievement.dbc.old achievement.dbc.ptr achievement.dbc.patch-ptr (20K)

althought it shows "BSDIFF40" in it's header, but it is not a bsdiff?

-- chuanhsing


I got some information about files in pre-download mpq. All files inside it are "patch" files.

Followings are for binary/new patch header:

 2 bytes: Size of the patch header (I've only seen 0x18)
 2 bytes: signature,
 * 0x0104 means binary patch
 8 bytes: unknown, always 8 bytes 0x00
 4 bytes: file size n
 6 bytes: unknown
 2 bytes: always 0xc8 0x01
 n bytes: the real thing

Followings are for plain text patch header:

 2 bytes: Size of the patch header (I've only seen 0x18)
 2 bytes: signature,
 * 0x0404 means plain text patch
 8 bytes: maybe timestamp
 4 bytes: file size
 8 bytes: maybe timestamp
 4 bytes: file size
 1 byte: unknown
 8 bytes: signature, "BSDIFF40"
 n bytes: unknown

For the new files, I can skip heading 24 bytes and get the real thing! But I still can't understand the things after BSDIFF40.

-- chuanhsing


As about patch files in MPQs, I found this structure so far:

 0x0000 (2 bytes) Size of the patch header (I've only seen 0x18)
 0x0002 (2 bytes) Flags.
 - 0x0004 - Seems to be always set
 - 0x0100 - Unknown
 - 0x0400 - The patch file is made by bin patch generator)
 0x0004 (4 bytes) Looks like CRC
 0x0008 (4 bytes) Unknown
 (looks like size of something when 0x0100 flag set)
 0x000C (4 bytes) File size (only if Flags = 0x0104)
 0x0010 (8 bytes) Time stamp as FILETIME

-- chuanhsing