Samsung Galaxy S i9000

*#1234# reveals the installed version: PDA: I9000ZSJF7, PHONE: I9000ZSJF7, CSC: I9000ZSJF7

Firmware Upgrade

resources as of 11/2011:


German (links on

resources as of 01/2011:

Get the correct version of Samsung Kies, then the method above should work. The right version is Kies_1.5.3.10103_102_1.

doing the upgrade:

To upgrade to 2.2 Froyo, you need

With the registry patcher select XEU and do the upgrade. JPX could also be interesting.

SIM Unlock

Froyo 2.2 needs a root first: and

Hard reset

Key combination: *2767*3855#

Download Mode / If it cannot be switched on properly anymore:

  1. Turn off
  2. Vol up or Vol down + Power pressed until you see the "Samsung I9000 sign"
  3. Then press the Home button too.

Vol down will bring you to download mode Vol up will bring you to recovery mode

copy command cp on Android

There is no ready to use cp on Android but the builtin shell supports output redirection:

cat /efs/file.bin > /mnt/sdcard/file.bin

Backup important files on the phone
Install Root and Busybox.

./adb shell
tar zcvf /mnt/sdcard/efs-backup.tar.gz /efs
cat /dev/block/stl3 > /mnt/sdcard/efs_dev-block-stl3.img

restore (see

rm /efs/imei/mps_code.dat
cp /sdcard/mps_code.dat /efs/imei/mps_code.dat
rm /efs/nv_data.bin
cp /sdcard/nv_data.bin /efs/nv_data.bin
rm /efs/nv_data.bin.md5

OpenVPN on 2.2.1

  • OpenVPN Installer (Android Market)
  • OpenVPN Settings (Android Market)
  • Busybox (BusyBox installer from Android Market)
  • Rooted Phone (SuperOneClick 1.5.x)
  • tun/tap Driver (got it here or here). After the installation of OpenVPN via the app replace the binary in /system/bin using this found here. With this binary you also need to set some links: ln -s /system/bin/busybox /system/xbin/route and ln -s /system/bin/busybox /system/xbin/ifconfig.

install tun.ko kernel module
in order to move tun.ko to /system/

First check out what device is mounted to /system:

adb shell mount | grep system

which gives /dev/block/stl9 /system rfs ro,relatime,vfat,log_off,check=no,gid/uid/rwx,iocharset=utf8 0 0 and so we run:

adb shell
mount -o remount,rw /dev/block/stl9 /system
adb push ~/Downloads/tun/tun.ko /system/lib/modules/
adb shell
mount -o remount,ro /dev/block/stl9 /system
modprobe tun

IPv6 Privacy Extensions

Put this in your /data/local/

sysctl -w net.ipv6.conf.default.use_tempaddr=2
sysctl -w net.ipv6.conf.all.use_tempaddr=2

SSH Server on the Android Device

For advanced users (running cyanogenmod): Howto: Connect to Device with SSH

adb push ~/.ssh/ /sdcard/authorized_keys
adb shell
mkdir /data/dropbear
chmod 755 /data/dropbear
mkdir /data/dropbear/.ssh
chmod 700 /data/dropbear/.ssh
mv /sdcard/authorized_keys /data/dropbear/.ssh/
chown root: /data/dropbear/.ssh/authorized_keys
chmod 600 /data/dropbear/.ssh/authorized_keys
dropbearkey -t rsa -f /data/dropbear/dropbear_rsa_host_key
dropbearkey -t dss -f /data/dropbear/dropbear_dss_host_key

Test your SSHd by starting it in debug mode using dropbear -s -v -F and connecting via ssh -l root If this worked, you can run killall dropbear and add dropbox to your /data/local/

## Start SSHd
# see
dropbear -s -g

or add it as an Android init service in your /etc/init.local.rc:

# start Dropbear (ssh server) service on boot
service sshd /system/xbin/dropbear -s
   user  root
   group root