All original FW that distributed as GCD have checksum FE. Actually checksum for GCD is 0 if you exclude last 4 bytes: "FF FF 00 00"
For example, for 006B090100.GCD with version 3.10 we have "67 FF FF 00 00". "67" is checksum sign. Let's start the block from begining and finish on "67" with excluding last 4 bites "FF FF 00 00" - if we calculate the checksum it will be zero (0). But for whole files we will have the checksum equal "FE" due to adding "FF FF 00 00" at the end of files ("FE" is checksum for this 4 bytes).
So you need to change byte that is the fifth from the end! It is offset x9067 for 006B090100.GCD with version 3.10.
If you check for whole file - you need to adjust the value for obtain the checksum is equal "FE". If not and you select only block without last 4 bytes of file - you need to adjust the value for obtain the checksum of this block is equal "00".
P.S. I am not completely honest! The 006B090100.GCD have more than the one section like all of GCD. All section have the checksum is equal "00". But if you change only main section for version number so you do not need correct checksum for header (it is equal "00").
P.S.1 Section in GCD is ending usually with "01 00 01 00 XX" where "XX" is checksum sign. For some of GCD the RGNTool is suitable. For other you need find section yourself. For example, for 006B090100.GCD with version 3.10 we have header section on x00-x1004 and FW section on x1005-x9067 and "FF FF 00 00" at the end on x9068-x906B.
P.S.2 I think what Kunix give more professional explanation. I make only reverse engineering for myself.
Bookmarks