Banner Exchange

Sunday, April 12, 2009

How To Fix Corrupt Files

Large downloads often seem to become corrupted due to one or more of the following reasons:

* Bug in the download manager.
* Bad proxy server.
* Bad web server.
* Problems with your own computer.

Re-downloading corrupted files, specially those sized over 500 MB are really painful for most of us. And there is no guarantee that the re-downloaded file will be free of corruption as far as you are using the same configuration.


In such cases, its best to fix them manually instead of downloading again. The whole process is very simple, but requries enough concentration. Once you have mastered it, you will never have to worry about corrupted files.

Tools Required:

* WinHex
* CURL

Steps required in brief:

* Make a backup copy of the corrupted file and open it with WinHex.
* Identify corrupted segments. Large sequences of zeros are all we have to search for in most cases.
* Re-download the corrupted segments with CURL.
* Write the retrieved data on appropiate offsets.

Step-by-step example:
Let us assume that we have a corrupted file named corrupted.rar. We open it WinHex, and do the following things:

* Switch the offset representation from hex to decimal by clicking once on the offset area

Now we search for corrupted segments. Most of the time they will be sequences of zeros. As we can see from the first bytes of the opened file, it's a rar file. Files we download over the Internet are mostly compressed formats. By design, a fresh file should not contain sequences of zeros or other repeating bytes after the header part. So, we scroll a few pages down.


Now we start searching for such sequences with CTRL+ALT+F.




The search takes us to a place where we can see some zeros and repeating bytes. Surely this is one of the corrupted segments.



So, now we have to download the missing data using CURL. It's always a good idea to retrieve the data with some margin. In our case, we get the bytes from 01094304 to 01094512 in order to cover the screenshot size. In real case it should be even higher. So, we start command prompt and issue the command "curl -r 1094304-1094512 http://badserver.com/mygoodfile.rar -o 01094304.bin" to download the mentioned segment of the original file, and save it to a file named 01094304.bin. For details, curl manual can help. After it's done, curl will terminate and we will have our file 01094304.bin right inside CURL's folder.



# Now we open the downloaded segment 01094304.bin with WinHex.
# Copy the whole file with CTRL+A -> CTRL+C.



Switch back to our corrupted file and go to the starting offset of our retrieved segment. CTRL+G -> 01094304



Now press CTRL+B to write the copied data over this offset. It is very important to determine correct offset. One offset left or right can ruin everything. Our retrieved segment starts with 18 1E BD 3D, and the offset we are going to write here also starts with 18 1E BD 3D.



* After we are done, we save the file using CTRL+S. For larger files, it is better to switch the edit mode to in-place mode. F6 -> In-place mode.

Now we can see that the corrupted part has been filled with original data, and it's fixed. In this example we had only of such segment. But in real cases, there might be several segments like this. In that case the whole procedure is to be repeated for each corrupted segment. Also note that, the length of zero sequences to find for can be chosen to be smaller or larger than the length used here.

No comments:

Post a Comment