Ultrasound Signal Processing Methods
Cross correlation should work.  I think the problem is the waveform that you are using.  A square wave has bad auto-correlation properties.  If it is a periodic square wave it will have multiple peaks.  It sounds like you are just using a single pulse which is better, but it will still have a gradual roll-off which is a problem.  Instead, use a Barker code, which will give you a nice sharp peak and very low side peaks.  I would BPSK modulate the barker code and then cross correlate what you receive with the "ideal" signal.