[Galaxy S I9000 Android Development] Happy Hunter:
Just updated post with more details, I hope someone will find it more useful. As always make sure you have a backup, make a backup of your nv_data.bin BEFORE editing.

I was not able to unlock my phone Froyo 2.2 I9000M phone running I9000UGJK4 firmware by using this official thread http://xdaforums.com/showthread.php?t=761045

and after few hours of searching I found this method which worked for me from first attempt.

I give all the credits for this idea to cursor2010 from http://xdaforums.com/showpost.php?p=8656481&postcount=156

Here are the detailed steps

* Your phone must be rooted (I used SuperOneClick http://xdaforums.com/showthread.php?t=803682) to do this unlocking and busybox from market is installed

* Get the archive file from first post of this topic. The archive contains ADB software which we will use to connect to the phone.

* Turn On USB debugging Application->Settings->Application->Development

* Follow the instructions of STEP 4 from http://www.communityhosting.net/sgsunlock/i9000.html to get your nv_data.bin to your PC

Get your current nv_data.bin file from the /efs directory on your phone. This can be done with ADB. Most often, the nv_data.bin file is not readable and you will get a permission denied message. You'll need to enter the commands manually.

To do this with ADB, from the DOS command prompt you can type:

adb pull /efs/nv_data.bin

If you receive a permission denied error, you can fix it by typing the following commands from an ADB shell (type "adb shell" at the DOS command prompt) or from within a terminal on the phone:

adb shell

su

chmod 777 /efs/nv_data.bin

exit

exit

Then from the DOS command prompt:

adb pull /efs/nv_data.bin

Using Hex editor edit the file ( you can use any hex editor, http://www.logitheque.com/logiciels/windows/utilitaires/editeur_hexadecimal/telecharger/edithexa_9903.htm for example). I personally use UltraEdit.

View attachment 464171

At the offset of 180069H you will see your provider MCC and MNC codes see http://en.wikipedia.org/wiki/Mobile_Network_Code

In my case the code was 30261020404... which is Bell Canada, so I changed 610 to 720 Rogers Canada now the code is 30272020404...

Again the offset in the file is 180069H.

Save the file on the pc.

* Follow the instructions from http://xdaforums.com/showpost.php?p=8182729&postcount=107

Copy your nv_data.bin to temporary folder on your phone:

adb shell "mkdir /sdcard/efs"

adb push nv_data.bin /sdcard/efs

adb shell

su

ls -l -a /efs

If there is an nv_data.bin.md5 file in the directory, all is well. You should continue with these commands:

mv /efs/.nv_data.bak /efs/.nv_data.bakk

mv /efs/.nv_data.bak.md5 /efs/.nv_data.bakk.md5

rm /efs/nv_data.bin

rm /efs/nv_data.bin.md5

rm /efs/.nv2.bak

rm /efs/.nv2.bak.md5

busybox cp /sdcard/efs/nv_data.bin /efs/nv_data.bin

chmod 755 /efs/nv_data.bin

chown radio.radio /efs/nv_data.bin

exit

exit

if you have errors on the chown command, use

chown 1001.1001 /efs/nv_data.bin

If there was no nv_data.bin.md5 file, then something is wrong and you'll need to see other options or reflash again with a known working ROM that generates a new MD5 file when it's missing.

* Reboot the phone, it should not ask any unlock codes or anything, in my case it simply just registered on Rogers network

* Obviously you also need to program your APN settings for Rogers from http://xdaforums.com/showthread.php?t=809003 to make your 3G working. For your own provider please search forum.

I wish it would be much simpler or automated or tested on bigger variety of phones.If somebody could gather the statistics and check if this method is applicable throughout all the versions of I9000, that would be very nice.

Feel free to comment my post.