If you're using four independent GPS receivers as your time synchronisation source, you may be able to feed some version of the GPS 1PPS signal into the receiver, and recover it later in the data.
It's possible to synchronise two A/Ds, usually by time tagging the samples and resetting the counter in the FPGA using an external sync signal like GPS, but this requires support in hardware and gateware. Fancier A/D converters have a secondary 1-bit A/D that's completely synchronised with the main sampler, for this exact purpose. I don't know the HackRF but you say it requires a hardware modification.
Feeding the time signal into the front end simplifies all that, if you can tolerate some occasional interference. A CW tone or noise source, switched on for a very short time by the 1PPS, would be one kind of signal you could use. I've also had some success simply passing the pulse through a high-pass filter and detecting the resultant small RF burst - this depends on the rise time of the PPS and the frequency and bandwidth of your receiver.
If your receivers are only 1000' apart, GPS probably won't be good enough for good TDOA. Off the shelf modules probably don't do better than a few hundred nanoseconds time error from each other, depending on your luck and the ionosphere, and your baseline is only 1000 ns long, so the position errors will be large. The uBlox F9T can apparently be set up to share clock data between receivers in real time, to offer a claimed 15 ns time offset between receivers, this might work better.
If the space between the receivers is clear, the idea in the comments might be simplest - place a transmitter at a known position, compute its time offset to each receiver, and use this to find the offset of a signal from an unknown position.