Fixing desync in a large, long video file
I have no idea if this is optimal for you, but one approach using free software would be to first determine the percentage (and direction) of drift by finding a point near the end where you can tell with some precision what the sync error is, in frames.

Demux the video and audio into separate streams, using a free tool like AVI-Mux. Load the audio into Audacity, and apply the time shift determined above, either as a "new length" or a ratio (frame error / total frames).

Export the audio and remux using the new track.