And it's very accurate :)
First thing you need to do is find out where the off-sync starts
use VLC player and check out the movie
When you find the spot that starts to go out of sync take a note of the time
Use CTRL+K (positive delay) or CTRL+L (negative delay) to see
how much you have to delay the audio and take a note of that too.
In this example the movie I'll be using is "The Shawsank Redemption"
This version plays fine up to a certain point but loses sync eventually.
The out of sync starts at 1h 25min (approximately)
Here's how to fix it:
Apps to use: VirtualDub and AviMux
Links:
VirtualDub
AviMux
Open VDub, file-->open video file and load the avi that's out of sync (it must have Constant Bit Rate)
If you get the VBR warning, refer to [Convert avi with VBR to avi with CBR] guide, then continue on with this guide
Load the out of sync avi with CBR
Video-->Direct stream copy
Audio-->Direct stream copy

Now I know that for the specific movie, around 1:25:00 sound goes out of sync
so i'll use the slider to go close to 1h 25min...
Then hit play and watch when the sound goes off

When that happens press "stop" and go back 1 or more key frames
until you get the exact key frame when the off-sync begins
For this one, it's key frame 128174 (take a note on the number you got for your movie)

*Find the exact key frame for your movie by going back 1 keyframe or more, pressing "play" and see if the sound goes off
*It takes a little practice
Now the easy part :)
"Mark in" the beggining of the movie (Drag the slider and press "Mark in" Button)
"Mark out" until frame 128173 (1 frame before the sound goes off) (use the correct frame for your movie)
[drag the slider and "Mark out" button]
file-->save as avi and I have the part of the avi with audio in sync
save this as part 1.avi

Edit-->clear selection
"Mark in" from frame 128174 (the frame where audio starts to go off) [use the correct frame for your movie]
"Mark out" to the very end of the movie
File-->save as avi and now I have the part of the avi that's out of sync
Save this as part 2.avi

That's it for VirtualDub
Open AviMux gui
right click the upper window, select "Add" and load part 2 avi.
That's the avi with the audio out of sync
Select it and hit "Generate data source from file"
You'll see something like this:

The sound in this one goes faster than the video
so i'll have to use a delay. You use the delay value you got from VLC player before.
Almost always the values you can use are:
500ms
1000ms
1500ms
2000ms
-500ms
-1000ms
-1500ms
-2000ms
Use the positive ones if the sound comes later
Use the negative ones if sound goes faster
I'll be using a -500ms value because sound is faster
I'll select the audio stream, go to the delay box and type -500

(you type the correct value for your movie)
[if you're not sure which one is it, practice with the values above]
And then hit "Start"
save this as part 2 fixed avi and close Avimux
Check out part 2 fixed avi to see that audio is in sync.
Now to finish:
Run Avimux again
Right click the upper window, "add" and load part 1 avi
right-click, "add" and load part 2 fixed avi
Hold down CTRL key, select both files and
click on "Generate data source from files"

The files will be added to the window below
If there's delay value in the box, delete it
because now everything is in sync.
Click on start, select save location and save name

and... you'll get an avi that's perfectly in sync :)
Summary:
*If the video has VBR use VDub and Lame Mp3 to convert to CBR [if not, skip that part]
*Find the exact key frame where sound goes off, with the slider in VDub.
*Split the avi in 2 parts, one that has audio in sync, the other that has audio out of sync.
*Use AviMux to set positive or negative value delay to out of sync avi and fix it.
*Use AviMux to join the avi with audio in sync and the fixed avi.
*It may seem complex but it's not really, practice.
Done :)