A few years ago I worked on modifying an FRS radio for use on ham frequencies. The modification was complicated, and required some very fine SMD soldering and PIC ucontroller programming. The idea was to be able to use a cheap FRS radio as an APRS transmitter, possibly for high altitude balloon projects. Recently I have taken a second look at this topic and found a very simple method for converting FRS radios to ham. It requires only a diode and minimal soldering!
I'll go into the details of why this works later, but for the short of it, all you have to do is solder a diode between the PLL strobe pin and the PTT switch. That's it. Your radio should now transmit on the channel frequency minus the IF frequency of your radio (usually 21.4 MHz) Now read-on to find out the details and limitations.
FRS radios operate in the 460 MHz region, and ham frequencies are 430-450. Most FRS radios use a PLL chip to set the operating frequency. If you can control the PLL, you can control the frequency. The PLL is set by the radio's main processor via 3 lines, data, clk, and strobe. The data it sent one bit at a time and clocked in by the clk line. When an entire command has been sent, the stb line is set high, telling the PLL to start using the settings.
When the radio is going to transmit at 467.5625 MHz (FRS channel 8), the processor sends a command to the PLL to switch to that frequency. For RX, though, it's different. When the radio is going to listen on 467.5625, the PLL doesn't go to 467.5625 MHz. Instead it goes to something like 446.1625 MHz. This is because the radio uses an intermediate frequency of 21.4 MHz (different for each radio). So, 446.1625 + 21.4 = 467.5625. The good news for us is that 446.1625 is right in the ham band. So, we want is stay on the RX frequency while we transmit. That's where the diode comes in. When the PTT button is pressed, it pulls the PTT line to ground. With the diode, the PLL's strobe line also gets pulled to ground, and stops it from switching frequencies. So the radio now transmits in the ham band.
To make the modification, you need to find your PLL chip, and identify the stb line. On most of my radios, the chip is a TB 31202, and the stb line is conveniently locate on pin 8 (right on the end, so it's easy to solder to). I recommend using very fine wire, like 30 AWG or transformer wire. On the PTT switch, identify which side is ground. Solder the diode to the other side, which is PTT. Solder the black-stripe end of the diode to the PTT, and the other end to the stb wire.
There are a few things you have to understand before doing the mod, though. First, you need to know the radio's IF. It's usually around 21.4 MHz. Just look for a crystal on the board with that frequency. If you find one, you're in luck. I have one radio with an IF of 10.7 MHz. This one DOESN'T work. It will transmit somewhere between the ham and FRS bands, which is not good.
Also not all PTT switches go to ground. I have one radio where this is the case. I had to ground the stb line separately to get it to work.
Sometimes the mod doesn't work reliably, and I believe it's an issue with switch bounce in the PTT. When I drive the PTT with a transistor (like with an APRS tracker) it is very reliable.
Complications and work-arounds
I have found some complications and solutions, which I'll try to describe here. The biggest problem arises from the radio's battery saver feature. After some period of inactivity (around 10 seconds) the radio will turn the PLL off, then breiefly re-enable it about twice per second to check for activity. If you happen to TX right when the PLL has been re-enabled, then there's no problem. But the more likely scenario is that you PTT when the PLL is asleep. Because this method works by disabling the PLL input, the PLL doesn't wake up, and you get no TX. I've found a couple of work-arounds. First, just be sure your transmit period is less than the time it takes for the battery-saver to kick in. Then it will never go to sleep and you will always have PLL lock. The second is to pulse the PTT briefly (a few ms) just prior to your real transmission. This wakes up the PLL and puts it on the correct frequency.
A further complication with one of my radios is that the stb line doesn't recover quickly enough when PTT is released. When it's released, the uC should program the PLL back to the listening frequency. If the voltage on the stb line doesn't recover quickly enough, however, the PLL doesn't see the pulse to accept the programming. That's not a problem as long as the PLL is already on the listening frequency (we are trying to TX on the listening frequency, so this should be the case). But, if the radio goes into battery save mode as discussed above, then it's a big problem. Now, pulsing the PTT doesn't get your PLL back to the right frequency. I tried a few solutions involving an RC circuit to delay the PTT recovery, but I couldn't get them to work. The more stable solution was to control the stb line separately with my arduino. I disable stb right before PTT and re-enable a short delay after release of PTT. This ensures that the PLL gets the proper programming.