John The Ripper (JTR) is one of best password cracker ever built. At the first time, it’s design to detect the weakness of UNIX password. Now, it’s available for Unix, Linux, Windows, DOS, BeOS and Open-VMS. It supports several crypt password hash types in Unix, Kerberos AFS and windows NT/2000/XP LM hashes.
John The Ripper is a free and open source and distributed in source code file but for easy installation you can buy John The Ripper Pro.
Before we start, you have to download JTR from http://www.openwall.com/john/g/john-1.7.9.tar.gz and put it in your selected folder.
In this tutorial, I put JTR under /opt folder.
Type ‘sudo tar xvzf‘ following by JTR file name. The name can be different depend on which version that you have. I type: sudo tar xvzf john-1.7.9.tar.gz

The command will extract your JTR package file.
Change your access level to root. You can type: “su – “or “su root” to change the access level.

Go to ‘src‘ folder inside your extracted file.

Type: “make” and press Enter.
JTR will display list of Linux systems based on processor. I used Intel Core2 duo 32 bit, so I choose ‘linux-x86-sse2”.

Now, type again the installation command+your linux_system.
My command will be: “make linux-x86-sse2”.

Now, let’s check if it’s work or not. Go to ‘run‘ folder.

Type: “./john -test” to test benchmark.
It works.

Now, we test to crack our linux password. In this test, I add a new user name ‘test‘ with password “123”.
JTR can’t read “shadow” file, so you have to un-shadow it first to a file.
In this sample, my filename is myhacktest.tst.
Type: “./unshadow /etc/passwd /etc/shadow > /opt/john_the_ripper/john-1.7.9/run/myhacktest.tst”
Check if it is exist or not.

Type: “./john myhacktest.tst” to crack the password.
As you can see below:
The root password and test are cracked. The root password is “1234” and test password is “123”.
Since, it tookssometimes, I break the process using: Ctrl-Break.

I will try explain about the process to make it easier to understand.
JTR need a file that contain the user and the hash password to crack. But it is separated in /etc/passwd and /etc/shadow file.
So, we have to merge it into a third file. JTR has the utility tool named unshadow.
Unshadow will fill the password space in the ‘passwd‘ file with hash which is available in ‘shadow‘ file.

From /etc/passwd:
test:x:1001:1001::/home/test:/bin/sh
From /etc/shadow:
test:6$.mscFEgy$JHUXm1sB1/U4nSDzJhHCq2.SawbfxanKo1mVZbtUaQTzQBe4njxQmu74.a5rZ98orBHr.W7eFmQYsYw5VNGNd.:15727:0:99999:7:::
unshadow PASSWORD-FILE SHADOW-FILE > third_file
John the ripper has 3 cracking modes.
-Single crack
-Wordlist
-Incremental
Single crack
JTR will use login name, ‘GECOS”/”Fullname” fields and user directory names as candidate password.
Single crack is the simple and easy one to use because you don’t have to specify any rules.
It’s the one that I show you above.
Note that running this mode on many password files simultaneously may sometimes get more passwords cracked than it would if you ran it on the individual password files separately.
Wordlist
It’s the simplest cracking mode by JTR. Because JTR only check the words inside the list against the password. JTR doesn’t sort the entries in the word list and will not check if it’s duplicate words or not.
Let’s try.
This cracking will be based on possibility words that you have in your word list files. You can collect from the internet, combine or create your own one. Since it’s only a demo, I will use the default password list from John the ripper. The file is password.lst. There are thousands words inside this file. I just selected ‘hello‘ word for this sample.
First, I will change again the user ‘test‘ password to ‘hello‘, create unshadow file then crack it.
./unshadow /etc/passwd /etc/shadow > break.tst
./john –wordlist=password.lst –users:test –rules break.tst
It’s only take 2 second to break the password.

Below is the log
0:00:00:00 Starting a new session
0:00:00:00 Loaded a total of 1 password hash
0:00:00:00 – Hash type: generic crypt(3) (lengths up to 72)
0:00:00:00 – Algorithm: ?/32
0:00:00:00 – Candidate passwords will be buffered and tried in chunks of 96
0:00:00:00 – Configured to use otherwise idle processor cycles only
0:00:00:00 Proceeding with wordlist mode
0:00:00:00 – Wordlist file: password.lst
0:00:00:00 – 57 preprocessed word mangling rules
0:00:00:00 – Rule #1: ‘:’ accepted as ”
0:00:00:02 + Cracked test
0:00:00:02 Session completed
Incremental
It’s the most powerful cracking mode. JTR will check all possible character combinations as password.
But cracking with this mode will never ending until it match because the combinations is being too large.
Let’s try.
First I will change the user password for “test” to “abcd”.
Unshadow the file to ‘crack.tst‘ then crack it using incremental alphabet possibility but only for user ‘test‘.
./john –incremental:alpha –users:test crack.tst
It took 6 minutes to break the password.
Like I said, ‘Incremental‘ method is very powerful but will take a lot of times for complicated characters combination.

Now, you can compare the log.
0:00:00:00 Starting a new session
0:00:00:00 Loaded a total of 1 password hash
0:00:00:00 – Hash type: generic crypt(3) (lengths up to 72)
0:00:00:00 – Algorithm: ?/32
0:00:00:00 – Candidate passwords will be buffered and tried in chunks of 96
0:00:00:00 – Configured to use otherwise idle processor cycles only
0:00:00:00 Proceeding with “incremental” mode: alpha
0:00:00:00 – Lengths 1 to 8, up to 26 different characters
0:00:00:00 – Switching to length 4
0:00:00:00 – Expanding tables for length 4 to character count 1
0:00:00:00 – Trying length 4, fixed @1, character count 1
0:00:00:00 – Switching to length 5
0:00:00:00 – Expanding tables for length 5 to character count 1
0:00:00:00 – Trying length 5, fixed @1, character count 1
0:00:00:00 – Switching to length 6
0:00:00:00 – Expanding tables for length 6 to character count 1
0:00:00:00 – Trying length 6, fixed @1, character count 1
0:00:00:00 – Switching to length 7
0:00:00:00 – Expanding tables for length 7 to character count 1
0:00:00:00 – Trying length 7, fixed @1, character count 1
0:00:00:00 – Switching to length 8
0:00:00:00 – Expanding tables for length 8 to character count 1
0:00:00:00 – Trying length 8, fixed @1, character count 1
0:00:00:00 – Switching to length 3
0:00:00:00 – Expanding tables for length 3 to character count 1
0:00:00:00 – Trying length 3, fixed @1, character count 1
0:00:00:00 – Switching to length 4
0:00:00:00 – Expanding tables for length 4 to character count 2
0:00:00:00 – Trying length 4, fixed @2, character count 2
0:00:00:00 – Switching to length 5
0:00:00:00 – Expanding tables for length 5 to character count 2
0:00:00:00 – Trying length 5, fixed @2, character count 2
0:00:00:00 – Trying length 5, fixed @5, character count 2
0:00:00:00 – Switching to length 6
0:00:00:00 – Expanding tables for length 6 to character count 2
0:00:00:00 – Trying length 6, fixed @1, character count 2
0:00:00:00 – Trying length 6, fixed @2, character count 2
0:00:00:00 – Trying length 6, fixed @3, character count 2
0:00:00:00 – Trying length 6, fixed @4, character count 2
0:00:00:00 – Trying length 6, fixed @5, character count 2
0:00:00:00 – Trying length 6, fixed @6, character count 2
0:00:00:00 – Switching to length 4
0:00:00:00 – Expanding tables for length 4 to character count 2
0:00:00:00 – Trying length 4, fixed @4, character count 2
0:00:00:00 – Switching to length 5
0:00:00:00 – Expanding tables for length 5 to character count 2
0:00:00:00 – Trying length 5, fixed @1, character count 2
0:00:00:02 – Trying length 5, fixed @3, character count 2
0:00:00:02 – Trying length 5, fixed @4, character count 2
0:00:00:02 – Switching to length 3
0:00:00:02 – Expanding tables for length 3 to character count 2
0:00:00:02 – Trying length 3, fixed @2, character count 2
0:00:00:02 – Switching to length 4
0:00:00:02 – Expanding tables for length 4 to character count 2
0:00:00:02 – Trying length 4, fixed @1, character count 2
0:00:00:02 – Trying length 4, fixed @3, character count 2
0:00:00:02 – Switching to length 7
0:00:00:02 – Expanding tables for length 7 to character count 2
0:00:00:02 – Trying length 7, fixed @2, character count 2
0:00:00:02 – Trying length 7, fixed @7, character count 2
0:00:00:02 – Switching to length 3
0:00:00:02 – Expanding tables for length 3 to character count 2
0:00:00:02 – Trying length 3, fixed @1, character count 2
0:00:00:02 – Trying length 3, fixed @3, character count 2
0:00:00:02 – Switching to length 7
0:00:00:02 – Expanding tables for length 7 to character count 2
0:00:00:02 – Trying length 7, fixed @3, character count 2
0:00:00:02 – Trying length 7, fixed @5, character count 2
0:00:00:02 – Trying length 7, fixed @6, character count 2
0:00:00:02 – Switching to length 8
0:00:00:02 – Expanding tables for length 8 to character count 2
0:00:00:02 – Trying length 8, fixed @2, character count 2
0:00:00:05 – Switching to length 7
0:00:00:05 – Expanding tables for length 7 to character count 2
0:00:00:05 – Trying length 7, fixed @1, character count 2
0:00:00:08 – Switching to length 8
0:00:00:08 – Expanding tables for length 8 to character count 2
0:00:00:08 – Trying length 8, fixed @7, character count 2
0:00:00:08 – Switching to length 7
0:00:00:08 – Expanding tables for length 7 to character count 2
0:00:00:08 – Trying length 7, fixed @4, character count 2
0:00:00:08 – Switching to length 8
0:00:00:08 – Expanding tables for length 8 to character count 2
0:00:00:08 – Trying length 8, fixed @3, character count 2
0:00:00:08 – Trying length 8, fixed @6, character count 2
0:00:00:08 – Trying length 8, fixed @8, character count 2
0:00:00:08 – Trying length 8, fixed @1, character count 2
0:00:00:14 – Trying length 8, fixed @4, character count 2
0:00:00:14 – Trying length 8, fixed @5, character count 2
0:00:00:14 – Switching to length 3
0:00:00:14 – Expanding tables for length 3 to character count 3
0:00:00:14 – Trying length 3, fixed @2, character count 3
0:00:00:14 – Switching to length 4
0:00:00:14 – Expanding tables for length 4 to character count 3
0:00:00:14 – Trying length 4, fixed @2, character count 3
0:00:00:14 – Switching to length 3
0:00:00:14 – Expanding tables for length 3 to character count 3
0:00:00:14 – Trying length 3, fixed @1, character count 3
0:00:00:14 – Switching to length 5
0:00:00:14 – Expanding tables for length 5 to character count 3
0:00:00:14 – Trying length 5, fixed @2, character count 3
0:00:00:17 – Switching to length 6
0:00:00:17 – Expanding tables for length 6 to character count 3
0:00:00:17 – Trying length 6, fixed @2, character count 3
0:00:00:20 – Switching to length 3
0:00:00:20 – Expanding tables for length 3 to character count 3
0:00:00:20 – Trying length 3, fixed @3, character count 3
0:00:00:20 – Switching to length 5
0:00:00:20 – Expanding tables for length 5 to character count 3
0:00:00:20 – Trying length 5, fixed @5, character count 3
0:00:00:23 – Switching to length 4
0:00:00:23 – Expanding tables for length 4 to character count 3
0:00:00:23 – Trying length 4, fixed @3, character count 3
0:00:00:23 – Switching to length 6
0:00:00:23 – Expanding tables for length 6 to character count 3
0:00:00:23 – Trying length 6, fixed @5, character count 3
0:00:00:23 – Switching to length 4
0:00:00:23 – Expanding tables for length 4 to character count 3
0:00:00:23 – Trying length 4, fixed @4, character count 3
0:00:00:23 – Switching to length 6
0:00:00:23 – Expanding tables for length 6 to character count 3
0:00:00:23 – Trying length 6, fixed @6, character count 3
0:00:00:26 – Switching to length 2
0:00:00:26 – Expanding tables for length 2 to character count 1
0:00:00:26 – Trying length 2, fixed @1, character count 1
0:00:00:26 – Switching to length 4
0:00:00:26 – Expanding tables for length 4 to character count 3
0:00:00:26 – Trying length 4, fixed @1, character count 3
0:00:00:26 – Switching to length 5
0:00:00:26 – Expanding tables for length 5 to character count 3
0:00:00:26 – Trying length 5, fixed @3, character count 3
0:00:00:26 – Trying length 5, fixed @4, character count 3
0:00:00:28 – Switching to length 6
0:00:00:28 – Expanding tables for length 6 to character count 3
0:00:00:28 – Trying length 6, fixed @3, character count 3
0:00:00:31 – Switching to length 5
0:00:00:31 – Expanding tables for length 5 to character count 3
0:00:00:31 – Trying length 5, fixed @1, character count 3
0:00:00:31 – Switching to length 6
0:00:00:31 – Expanding tables for length 6 to character count 3
0:00:00:31 – Trying length 6, fixed @1, character count 3
0:00:00:40 – Trying length 6, fixed @4, character count 3
0:00:00:43 – Switching to length 3
0:00:00:43 – Expanding tables for length 3 to character count 4
0:00:00:43 – Trying length 3, fixed @1, character count 4
0:00:00:43 – Trying length 3, fixed @2, character count 4
0:00:00:43 – Trying length 3, fixed @3, character count 4
0:00:00:43 – Switching to length 2
0:00:00:43 – Expanding tables for length 2 to character count 2
0:00:00:43 – Trying length 2, fixed @1, character count 2
0:00:00:43 – Switching to length 4
0:00:00:43 – Expanding tables for length 4 to character count 4
0:00:00:43 – Trying length 4, fixed @2, character count 4
0:00:00:46 – Switching to length 1
0:00:00:46 – Expanding tables for length 1 to character count 1
0:00:00:46 – Trying length 1, fixed @1, character count 1
0:00:00:46 – Switching to length 2
0:00:00:46 – Expanding tables for length 2 to character count 2
0:00:00:46 – Trying length 2, fixed @2, character count 2
0:00:00:46 – Switching to length 1
0:00:00:46 – Expanding tables for length 1 to character count 2
0:00:00:46 – Trying length 1, fixed @1, character count 2
0:00:00:46 – Switching to length 3
0:00:00:46 – Expanding tables for length 3 to character count 5
0:00:00:46 – Trying length 3, fixed @1, character count 5
0:00:00:46 – Trying length 3, fixed @3, character count 5
0:00:00:46 – Switching to length 4
0:00:00:46 – Expanding tables for length 4 to character count 4
0:00:00:46 – Trying length 4, fixed @3, character count 4
0:00:00:49 – Switching to length 5
0:00:00:49 – Expanding tables for length 5 to character count 4
0:00:00:49 – Trying length 5, fixed @2, character count 4
0:00:00:54 – Switching to length 2
0:00:00:54 – Expanding tables for length 2 to character count 3
0:00:00:54 – Trying length 2, fixed @1, character count 3
0:00:00:54 – Switching to length 4
0:00:00:54 – Expanding tables for length 4 to character count 4
0:00:00:54 – Trying length 4, fixed @4, character count 4
0:00:00:54 – Switching to length 3
0:00:00:54 – Expanding tables for length 3 to character count 5
0:00:00:54 – Trying length 3, fixed @2, character count 5
0:00:00:54 – Switching to length 4
0:00:00:54 – Expanding tables for length 4 to character count 4
0:00:00:54 – Trying length 4, fixed @1, character count 4
0:00:00:57 – Switching to length 7
0:00:00:57 – Expanding tables for length 7 to character count 3
0:00:00:57 – Trying length 7, fixed @2, character count 3
0:00:01:12 – Switching to length 5
0:00:01:12 – Expanding tables for length 5 to character count 4
0:00:01:12 – Trying length 5, fixed @5, character count 4
0:00:01:14 – Switching to length 1
0:00:01:14 – Expanding tables for length 1 to character count 3
0:00:01:14 – Trying length 1, fixed @1, character count 3
0:00:01:14 – Expanding tables for length 1 to character count 4
0:00:01:14 – Trying length 1, fixed @1, character count 4
0:00:01:14 – Expanding tables for length 1 to character count 5
0:00:01:14 – Trying length 1, fixed @1, character count 5
0:00:01:14 – Expanding tables for length 1 to character count 6
0:00:01:14 – Trying length 1, fixed @1, character count 6
0:00:01:14 – Switching to length 2
0:00:01:14 – Expanding tables for length 2 to character count 3
0:00:01:14 – Trying length 2, fixed @2, character count 3
0:00:01:14 – Switching to length 3
0:00:01:14 – Expanding tables for length 3 to character count 6
0:00:01:14 – Trying length 3, fixed @1, character count 6
0:00:01:14 – Switching to length 7
0:00:01:14 – Expanding tables for length 7 to character count 3
00:01:14 – Trying length 7, fixed @7, character count 3
0:00:01:17 – Trying length 7, fixed @6, character count 3
0:00:01:20 – Trying length 7, fixed @5, character count 3
0:00:01:23 – Switching to length 2
0:00:01:23 – Expanding tables for length 2 to character count 4
0:00:01:23 – Trying length 2, fixed @1, character count 4
0:00:01:23 – Switching to length 5
0:00:01:23 – Expanding tables for length 5 to character count 4
0:00:01:23 – Trying length 5, fixed @3, character count 4
0:00:01:29 – Switching to length 6
0:00:01:29 – Expanding tables for length 6 to character count 4
0:00:01:29 – Trying length 6, fixed @2, character count 4
0:00:01:52 – Switching to length 3
0:00:01:52 – Expanding tables for length 3 to character count 6
0:00:01:52 – Trying length 3, fixed @3, character count 6
0:00:01:52 – Switching to length 5
0:00:01:52 – Expanding tables for length 5 to character count 4
0:00:01:52 – Trying length 5, fixed @1, character count 4
0:00:02:00 – Trying length 5, fixed @4, character count 4
0:00:02:03 – Switching to length 7
0:00:02:03 – Expanding tables for length 7 to character count 3
0:00:02:03 – Trying length 7, fixed @3, character count 3
0:00:02:12 – Switching to length 3″
0:00:02:12 – Expanding tables for length 3 to character count 6
0:00:02:12 – Trying length 3, fixed @2, character count 6
0:00:02:12 – Switching to length 1
0:00:02:12 – Expanding tables for length 1 to character count 7
0:00:02:12 – Trying length 1, fixed @1, character count 7
0:00:02:12 – Expanding tables for length 1 to character count 8
0:00:02:12 – Trying length 1, fixed @1, character count 8
0:00:02:15 – Expanding tables for length 1 to character count 9
0:00:02:15 – Trying length 1, fixed @1, character count 9
0:00:02:15 – Switching to length 4
0:00:02:15 – Expanding tables for length 4 to character count 5
0:00:02:15 – Trying length 4, fixed @2, character count 5
0:00:02:18 – Switching to length 6
0:00:02:18 – Expanding tables for length 6 to character count 4
0:00:02:18 – Trying length 6, fixed @5, character count 4
0:00:02:26 – Trying length 6, fixed @6, character count 4
0:00:02:32 – Switching to length 70:00:02:32 – Expanding tables for length 7 to character count 30:00:02:32 – Trying length 7, fixed @1, character count 3
0:00:02:55 – Switching to length 2
0:00:02:55 – Expanding tables for length 2 to character count 4
0:00:02:55 – Trying length 2, fixed @2, character count 4
0:00:02:55 – Switching to length 3
0:00:02:55 – Expanding tables for length 3 to character count 7′
0:00:02:55 – Trying length 3, fixed @1, character count 7
0:00:02:58 – Switching to length 2
0:00:02:58 – Expanding tables for length 2 to character count 5
0:00:02:58 – Switching to length 7
0:00:02:58 – Expanding tables for length 7 to character count 3
0:00:02:58 – Trying length 7, fixed @4, character count 3
0:00:03:03 – Switching to length 4
0:00:03:03 – Expanding tables for length 4 to character count 5
0:00:03:03 – Trying length 4, fixed @3, character count 5
0:00:03:06 – Trying length 4, fixed @4, character count 5
0:00:03:06 – Trying length 4, fixed @1, character count 5
0:00:03:12 – Switching to length 3
0:00:03:12 – Expanding tables for length 3 to character count 7
0:00:03:12 – Trying length 3, fixed @3, character count 7
0:00:03:12 – Switching to length 6
0:00:03:12 – Expanding tables for length 6 to character count 4
0:00:03:12 – Trying length 6, fixed @3, character count 4
0:00:03:29 – Trying length 6, fixed @1, character count 4
0:00:04:01 – Switching to length 3
0:00:04:01 – Expanding tables for length 3 to character count 7
0:00:04:01 – Trying length 3, fixed @2, character count 7
0:00:04:01 – Switching to length 6
0:00:04:01 – Expanding tables for length 6 to character count 4
0:00:04:01 – Trying length 6, fixed @4, character count 4
0:00:04:15 – Switching to length 1
0:00:04:15 – Expanding tables for length 1 to character count 10
0:00:04:15 – Trying length 1, fixed @1, character count 10
0:00:04:15 – Expanding tables for length 1 to character count 11
0:00:04:15 – Trying length 1, fixed @1, character count 11
0:00:04:15 – Expanding tables for length 1 to character count 12
0:00:04:15 – Trying length 1, fixed @1, character count 12
0:00:04:15 – Expanding tables for length 1 to character count 13
0:00:04:15 – Trying length 1, fixed @1, character count 13
0:00:04:15 – Expanding tables for length 1 to character count 14
0:00:04:15 – Trying length 1, fixed @1, character count 14
0:00:04:15 – Expanding tables for length 1 to character count 15
0:00:04:15 – Trying length 1, fixed @1, character count 15
0:00:04:15 – Expanding tables for length 1 to character count 16
0:00:04:15 – Trying length 1, fixed @1, character count 16
0:00:04:15 – Switching to length 2
0:00:04:15 – Expanding tables for length 2 to character count 5
0:00:04:15 – Trying length 2, fixed @2, character count 5
0:00:04:15 – Expanding tables for length 2 to character count 6
0:00:04:15 – Trying length 2, fixed @1, character count 6
0:00:04:15 – Switching to length 3
0:00:04:15 – Expanding tables for length 3 to character count 8
0:00:04:15 – Trying length 3, fixed @1, character count 8
0:00:04:18 – Switching to length 8
0:00:04:18 – Expanding tables for length 8 to character count 3
0:00:04:18 – Trying length 8, fixed @2, character count 3
0:00:05:01 – Switching to length 2
0:00:05:01 – Expanding tables for length 2 to character count 6
0:00:05:01 – Trying length 2, fixed @2, character count 6
0:00:05:01 – Switching to length 3
0:00:05:01 – Expanding tables for length 3 to character count 8
0:00:05:01 – Trying length 3, fixed @3, character count 8
0:00:05:01 – Switching to length 8
0:00:05:01 – Expanding tables for length 8 to character count 3
0:00:05:01 – Trying length 8, fixed @6, character count 3
0:00:05:10 – Switching to length 3
0:00:05:10 – Expanding tables for length 3 to character count 9
0:00:05:10 – Trying length 3, fixed @1, character count 9
0:00:05:12 – Trying length 3, fixed @2, character count 8
0:00:05:15 – Switching to length 2
0:00:05:15 – Expanding tables for length 2 to character count 7
0:00:05:15 – Trying length 2, fixed @1, character count 7
0:00:05:15 – Trying length 2, fixed @2, character count 7
0:00:05:15 – Switching to length 4
0:00:05:15 – Expanding tables for length 4 to character count 6
0:00:05:15 – Trying length 4, fixed @3, character count 6
0:00:05:18 – Switching to length 8
0:00:05:18 – Expanding tables for length 8 to character count 3
0:00:05:18 – Trying length 8, fixed @3, character count 3
0:00:05:50 – Switching to length 5
0:00:05:50 – Expanding tables for length 5 to character count 5
0:00:05:50 – Trying length 5, fixed @5, character count 5
0:00:05:56 – Switching to length 8
0:00:05:56 – Expanding tables for length 8 to character count 3
0:00:05:56 – Trying length 8, fixed @7, character count 3
0:00:06:01 – Trying length 8, fixed @8, character count 3
0:00:06:07 – Switching to length 4
0:00:06:07 – Expanding tables for length 4 to character count 6
0:00:06:07 – Trying length 4, fixed @4, character count 6
0:00:06:10 – Trying length 4, fixed @1, character count 6
0:00:06:16 + Cracked test
0:00:06:16 Session completed







Keren-keren. dulu nyari tutorial ini, tapi sekarang baru dapet yang gamblang.
It is my first time for seeing a Linux blog with 1 million hits from Indonesia…
Thank you. I got your URL from mailing list, Mas Lubis.
Question for you since ubuntu already has john installed 1.7.8 how would you update to 1.7.9 or how do you remove it?