GNU ddrescue is an excellent tool for recovering files from failing hard disks.
The source code can be downloaded and is easy to compile. But it's most useful if statically-linked, creating a Linux executable file that can run on its own without extra libraries — from a live CD for example.
To create a statically-linked version, run this instead of the usual ./configure:
./configure LDFLAGS=-static --no-create
Then run make in the normal way.