UPDATE : The following guide holds good only for iPhone 3GS 3.0 firmware. For 3.0.1 use redsn0w guide instead!
Geohot has done it again! He gave us the first jailbreak for iPhone 3GS and now, we have a much more efficient iPhone 3GS unlock – purplesn0w. Seriously, all the sn0w versions are confusing but well, that is their game!
For now, the iPhone 3GS should be activated using an official carrier before purplesn0w is installed on your iPhone 3GS. (Hacktivation for other carriers to follow soon)
Why is this unlock (purplesn0w) more reliable (WiFi, Push,..) and efficient than ultrasn0w (Dev Team’s unlock)? Straight from Geohot :
I wrote a payload and delivery system in a day. And it’s an awesome payload. Ideally we’d like to patch the lock out of flash, but with the apparently proper sig checks, that isn’t going to happen. So purplesn0w is the next best thing. I copy the page I want to patch to an unused region of memory. In memory I patch it. Then, using the MMU, I map the flash page out and remap the patched memory page in it’s place.
No new iPhones are really unlocked, activation creates a ticket allowing the baseband to be used with that sim. The lockstate of the phone really lies on apples servers. Unlocked is auth all sims. Locked is auth AT&T sims only. Fortunately this ticket system provides an easy way to deliver the payload and reexecute the patched code all in one. And since the ticket is already delivered on baseband resets, theres no need to write another daemon to hog battery. I use the daemon already designed for this, lockdownd. A patch to commcenter gets it to run the payload on ticket delivery. And a patch to your activation record contains the payload. So using existing apple machinery, I unlock when needed.
The repo for purplesn0w on Cydia : apt.geohot.com
Make sure you Jailbreak your iPhone 3GS using PurpleRa1n before proceeding further.
Follow the quick guide as shown :