jailbreakme.com javascript file beautified iphone ios 4

For those like me who want to know the code before I run the code on my precious phone, here is the javascript from the jailbreakme.com page beautified for your viewing pleasure.It looks like this code is detecting the device and version of that device then redirecting users to a pdf here http://www.jailbreakme.com/_/ which may complete the process through a vulnerability.  If any one out there can shed light on what is happening within the pdf I’d be interested to know.

-let me know if I missed anything

var agent = navigator.userAgent;
var index = agent.indexOf(“OS “);
function goto_faq() {
if (!String(window.location).match(/faq/)) {
window.location = “faq.html”
}
model = null
}
if (index == -1) {
goto_faq()
}
firmware = agent.slice(index + “OS “.length);
firmware = firmware.slice(0, firmware.indexOf(” “));
firmware = firmware.replace(/_/g, “.”);
if (agent.indexOf(“iPad”) != -1) {
model = “iPad1,1″
} else {
if (agent.indexOf(“iPod”) != -1) {
var ssi = getSunSpiderInterval();
window.location = “#” + ssi;
if (ssi > 1625) {
model = “iPod1,1″
} else {
if (ssi >= (firmware.indexOf(“4.0″) != -1 ? 800 : 1000)) {
model = “iPod2,1″
} else {
model = “iPod3,1″
}
}
} else {
if (agent.indexOf(“iPhone”) != -1) {
if (window.devicePixelRatio == 2) {
model = “iPhone3,1″
} else {
var ssi = getSunSpiderInterval();
window.location = “#” + ssi;
if (ssi >= (firmware.indexOf(“4.0″) != -1 ? 1100 : 1600)) {
model = “iPhone1,x”
} else {
model = “iPhone2,1″
}
}
} else {
goto_faq()
}
}
}
function get_page() {
return model == null ? null : (“/_/” + model + “_” + firmware + “.pdf”)
}
window.page = get_page();
if (window.page.indexOf(“iPod3,1_3″) != -1) {
alert(“Warning: This version is known to crash.  You can try it, but you might have better luck if you upgrade to 4.0 first.”)
}
var valid = ["3.1.2", "3.1.3", "3.2", "3.2.1", "4.0", "4.0.1"];
var vmismatch = 0;
if (valid.indexOf(firmware) == -1) {
vmismatch = parseInt(firmware.substring(0, 1)) <= 3 ? -1 : 1
} else {
if (window.page != null) {
_ = new Image(window.page)
}
}
function arm_version() {
var c = device_type();
var b = device_firmware();
var a = _sunSpiderInterval;
var d = 7;
if (c == “ipod”) {
if (b.indexOf(“4.0″) != -1) {
if (a > 800) {
d = 6
} else {
d = 7
}
} else {
if (a > 1250) {
d = 6
} else {
arm_versions = 7
}
}
} else {
if (c == “iphone”) {
if (b.indexOf(“4.0″) != -1) {
if (a >= 1100) {
d = 6
} else {
d = 7
}
} else {
if (a > 1625) {
d = 6
} else {
d = 7
}
}
} else {
if (c == “ipad”) {
d = 7
}
}
}
return d
}
function armv6_faster() {
var a = _sunSpiderInterval;
if (a > 1625) {
return false
}
return true
}
function device_is_iphone() {
var a = navigator.userAgent;
return a.indexOf(“iPhone OS”) != -1 || a.indexOf(“OS 3_2″) != -1
}
function device_type() {
var b = navigator.userAgent;
var a = “unknown”;
if (device_is_iphone()) {
if (b.indexOf(“iPad”) != -1) {
a = “ipad”
} else {
if (b.indexOf(“iPod”) != -1) {
a = “ipod”
} else {
if (b.indexOf(“iPhone”) != -1) {
a = “iphone”
}
}
}
}
return a
}
function device_firmware() {
var c = navigator.userAgent;
var b = “unknown”;
if (device_is_iphone()) {
var a = c.indexOf(“OS “) + “OS “.length;
b = c.slice(a);
b = b.slice(0, b.indexOf(” “));
b = b.replace(/_/g, “.”)
}
return b
}
function device_model() {
var a = device_type();
if (a == “ipad”) {
return “iPad1,1″
} else {
if (a == “iphone”) {
if (window.devicePixelRatio == 2) {
return “iPhone3,1″
} else {
if (arm_version() == 7) {
return “iPhone2,1″
} else {
return “iPhone1,x”
}
}
} else {
if (a == “ipod”) {
if (arm_version() == 7) {
return “iPod3,1″
} else {
if (armv6_faster()) {
return “iPod2,1″
} else {
return “iPod1,1″
}
}
}
}
}
return “unknown”
}
var df = device_firmware();
var valid = ["3.1.2", "3.1.3", "3.2", "3.2.1", "4.0", "4.0.1"];
var vmismatch = 0;
if (valid.indexOf(df) == -1) {
vmismatch = parseInt(df.substring(0, 1)) <= 3 ? -1 : 1
} else {
page_for_device = “/_/” + device_model() + “_” + df + “.pdf”;
new Image(page_for_device)
}
var step;
var unlock4 = document.getElementById(“unlock_text”);
var unlock1 = document.getElementById(“unlock1″);
var ival = null;
function get_gradient(k) {
var j = -10000;
var a = -10000;
var d = “-webkit-gradient(linear, left bottom, right bottom, “;
var l = “”;
var e = false;
for (var c = 0; c < k.length; c += 2) {
var f = k;
var b = k;
if (!e && f >= 0) {
var h = (b * (0 – last_pos) – a * (0 – f)) / (f – last_pos);
d += “from(rgba(0,0,0,” + h + “)), “;
e = true
}
if (e) {
if (f >= 1) {
var g = (b * (1 – last_pos) – a * (1 – f)) / (f – last_pos);
d += “to(rgba(0,0,0,” + g + “))”;
d += l;
break
}
l += “, color-stop(” + f + “, rgba(0,0,0,” + b + “))”
}
last_pos = f;
a = b
}
return d + “)”
}
function turn_on() {
if (ival) {
return
}
step = -0.15;
ival = setInterval(window.stepp = function () {
step = (step + 0.05) % 1.55;
var c = step – 0.15;
var d = step;
var e = c – 0.2;
var a = d + 0.2;
var b = get_gradient([-1000, 0.5, e, 0.5, c, 0.9, d, 0.9, a, 0.5, 1000, 0.5]);
unlock4.style.WebkitMaskImage = b
}, 50)
}
function turn_off() {
if (!ival) {
return
}
clearInterval(ival);
ival = null;
unlock4.style.WebkitMaskImage = “”
}
var left = 0;
function set_left(a) {
left = a;
slider.style.left = a + “px”;
unlock4.style.opacity = 1 – (left / 40)
}
var startX = null,
startLeft, maxLeft;
slider.ontouchstart = function (a) {
startX = a.targetTouches[0].clientX;
startLeft = left;
turn_off();
slider.style.WebkitTransitionProperty = “”;
slider.style.WebkitTransitionDuration = “0s”;
unlock4.style.WebkitTransitionProperty = “”;
unlock4.style.WebkitTransitionDuration = “0s”;
maxLeft = slider.parentNode.clientWidth – slider.clientWidth – 5;
return false
};
slider.ontouchmove = function (b) {
var a = b.targetTouches[0].clientX – startX;
if (a < 0) {
a = 0
} else {
if (a >= maxLeft) {
a = maxLeft
}
}
set_left(a + startLeft)
};
window.ontouchend = function () {
if (startX == null) {
return
}
startX = null;
if (maxLeft – left < 15) {
jailbreak();
return false
}
turn_on();
unlock4.style.WebkitTransitionProperty = “opacity”;
unlock4.style.WebkitTransitionDuration = “0.5s”;
var a = left;
set_left(0);
slider.style.WebkitTransform = “translateX(” + a + “px)”;
setTimeout(function () {
slider.style.WebkitTransitionProperty = “-webkit-transform”;
slider.style.WebkitTransitionDuration = “0.5s”;
slider.style.WebkitTransform = “translateX(0px)”
}, 0);
return false
};
set_left(0);
turn_on();
var onetext = ‘<div class=”ttitle ttop”>Oops…</div><div class=”ttext”>It looks like the installer crashed last time you tried to jailbreak. :(</div><div class=”ttext”>It might work if you try again.</div>’;
var twotext = ‘<div class=”ttitle ttop”>It worked!</div><div class=”ttext”>Tap the <b>Cydia</b> icon to get started with your jailbreak.</div><div class=”ttext”>(If you restored from a backup, you might be seeing this even though you\’re not jailbroken yet.)</div>’;
var toooldtext = ‘<div class=”ttitle ttop”>JailbreakMe</div><div class=”ttext”>Version too old.  You need to upgrade using iTunes before you can use this site.</div>’;
var toonewtext = ‘<div class=”ttitle ttop”>Welp.</div><div class=”ttext”>Version too new.  You need to downgrade before you can use this site, which is probably impossible.</div>’;
function add_animations(a) {
a.style.webkitTransitionProperty = “-webkit-transform, opacity”;
a.style.webkitTransitionDuration = “0.4s, 0.4s”
}
function get_progress() {
var f = 0;
var b = 0;
var e = document.cookie.match(/progress=[0-9]_[0-9\.]+/g);
if (e) {
for (var d = 0; d < e.length; d++) {
var a = e[d];
var c = parseInt(a.substring(11));
if (c > f) {
f = c;
b = parseInt(a.substring(9, 10))
}
}
}
return b
}
var my_progress = 0;
window.onload = function () {
if (vmismatch == -1) {
document.getElementById(“texts”).innerHTML = toooldtext;
return
} else {
if (vmismatch == 1) {
document.getElementById(“texts”).innerHTML = toonewtext;
return
}
}
var a = get_progress();
if (a == 1) {
document.getElementById(“texts”).innerHTML = onetext
} else {
if (a == 2) {
document.getElementById(“texts”).innerHTML = twotext
}
}
};
function jailbreak() {
var b = document.getElementsByClassName(“middle_wrapper”)[0];
add_animations(b);
b.style.opacity = “0″;
var c = document.getElementsByClassName(“tool_bar”)[0];
add_animations(c);
c.style.opacity = “0″;
c.style.webkitTransform = “translateY(96px)”;
var a = document.getElementsByClassName(“top_bar”)[0];
add_animations(a);
a.style.opacity = “0″;
a.style.webkitTransform = “translateY(-96px)”;
jailbreak_real()
}
function jailbreak_real() {
document.cookie = “progress=1_” + (new Date().getTime() / 1000) + “;domain=jailbreakme.com;path=/;expires=Sat, 01 Feb 2020 05:00:00 GMT”;
if (!window.page) {
alert(“There was no page… ” + navigator.userAgent)
}
var a = document.createElement(“iframe”);
a.setAttribute(“src”, page);
a.style.position = “absolute”;
a.style.opacity = “0.000001″;
a.style.width = “100px”;
a.style.height = “100px”;
a.style.zIndex = “-9999″;
document.body.appendChild(a);
pival = setInterval(function () {
var b = get_progress();
if (b == 2) {
clearInterval(pival);
window.location = “faq.html”
} else {
if (b == 3) {
clearInterval(pival);
window.location = window.location
}
}
}, 500)
}
var old = window.orientation;
function ooc(a) {
if (old != window.orientation) {
window.scrollTo(0, 1)
}
old = window.orientation
}
function loaded() {
setTimeout(function () {
window.scrollTo(0, 1)
}, 10)
}
window.addEventListener(“load”, function (a) {
loaded();
setInterval(ooc, 100)
}, false);
window.addEventListener(“onorientationchange”, ooc, false);
document.addEventListener(“touchmove”, function (a) {
a.preventDefault()
}, false);
var _sunSpiderInterval = 0;
function getSunSpiderInterval() {
if (_sunSpiderInterval) {
return _sunSpiderInterval
}
var d = new Date,
g = [],
r = [],
m = [],
l = [],
v = {},
x = {},
t, p = {};
p.Width = 300;
p.Height = 300;
function n(L, J) {
var I = L.V[0],
K = J.V[0],
H = L.V[1],
G = J.V[1],
F = Math.abs(K – I),
E = Math.abs(G – H),
A = I,
i = H,
C, D, B;
if (K >= I) {
K = I = 1
} else {
K = I = -1
}
if (G >= H) {
G = H = 1
} else {
G = H = -1
}
if (F >= E) {
G = I = 0;
C = F;
D = F / 2;
B = E;
F = F
} else {
H = K = 0;
C = E;
D = E / 2;
B = F;
F = E
}
F = Math.round(g.LastPx + F);
for (E = g.LastPx; E < F; E++) {
D += B;
if (D >= C) {
D -= C;
A += I;
i += H
}
A += K;
i += G
}
g.LastPx = F
}
function q(i, B) {
var A = [];
A[0] = i[1] * B[2] – i[2] * B[1];
A[1] = i[2] * B[0] – i[0] * B[2];
A[2] = i[0] * B[1] – i[1] * B[0];
return A
}
function b(A, E, D) {
for (var i = [], C = [], B = 0; B < 3; B++) {
i[B] = A[B] – E[B];
C[B] = D[B] – E[B]
}
i = q(i, C);
A = Math.sqrt(i[0] * i[0] + i[1] * i[1] + i[2] * i[2]);
for (B = 0; B < 3; B++) {
i[B] /= A
}
i[3] = 1;
return i
}
function f(i, B, A) {
this.V = [i, B, A, 1]
}
function e(A, D) {
for (var C = [
[],
[],
[],
[]
], i = 0, B = 0; i < 4; i++) {
for (B = 0; B < 4; B++) {
C[i][B] = A[i][0] * D[0][B] + A[i][1] * D[1][B] + A[i][2] * D[2][B] + A[i][3] * D[3][B]
}
}
return C
}
function j(A, C) {
for (var B = [], i = 0; i < 4; i++) {
B[i] = A[i][0] * C[0] + A[i][1] * C[1] + A[i][2] * C[2] + A[i][3] * C[3]
}
return B
}
function k(A, C) {
for (var B = [], i = 0; i < 3; i++) {
B[i] = A[i][0] * C[0] + A[i][1] * C[1] + A[i][2] * C[2]
}
return B
}
function h(A, D) {
for (var C = [
[],
[],
[],
[]
], i = 0, B = 0; i < 4; i++) {
for (B = 0; B < 4; B++) {
C[i][B] = A[i][B] + D[i][B]
}
}
return C
}
function o(A, C, B, i) {
return e([
[1, 0, 0, C],
[0, 1, 0, B],
[0, 0, 1, i],
[0, 0, 0, 1]
], A)
}
function a(A, C) {
var B = C;
B *= Math.PI / 180;
var i = Math.cos(B);
B = Math.sin(B);
return e([
[1, 0, 0, 0],
[0, i, -B, 0],
[0, B, i, 0],
[0, 0, 0, 1]
], A)
}
function z(A, C) {
var B = C;
B *= Math.PI / 180;
var i = Math.cos(B);
B = Math.sin(B);
return e([
[i, 0, B, 0],
[0, 1, 0, 0],
[-B, 0, i, 0],
[0, 0, 0, 1]
], A)
}
function w(A, C) {
var B = C;
B *= Math.PI / 180;
var i = Math.cos(B);
B = Math.sin(B);
return e([
[i, -B, 0, 0],
[B, i, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
], A)
}
function u() {
var i = [],
A = 5;
for (g.LastPx = 0; A > -1; A–) {
i[A] = k(m, g.Normal[A])
}
if (i[0][2] < 0) {
if (!g.Line[0]) {
n(g[0], g[1]);
g.Line[0] = true
}
if (!g.Line[1]) {
n(g[1], g[2]);
g.Line[1] = true
}
if (!g.Line[2]) {
n(g[2], g[3]);
g.Line[2] = true
}
if (!g.Line[3]) {
n(g[3], g[0]);
g.Line[3] = true
}
}
if (i[1][2] < 0) {
if (!g.Line[2]) {
n(g[3], g[2]);
g.Line[2] = true
}
if (!g.Line[9]) {
n(g[2], g[6]);
g.Line[9] = true
}
if (!g.Line[6]) {
n(g[6], g[7]);
g.Line[6] = true
}
if (!g.Line[10]) {
n(g[7], g[3]);
g.Line[10] = true
}
}
if (i[2][2] < 0) {
if (!g.Line[4]) {
n(g[4], g[5]);
g.Line[4] = true
}
if (!g.Line[5]) {
n(g[5], g[6]);
g.Line[5] = true
}
if (!g.Line[6]) {
n(g[6], g[7]);
g.Line[6] = true
}
if (!g.Line[7]) {
n(g[7], g[4]);
g.Line[7] = true
}
}
if (i[3][2] < 0) {
if (!g.Line[4]) {
n(g[4], g[5]);
g.Line[4] = true
}
if (!g.Line[8]) {
n(g[5], g[1]);
g.Line[8] = true
}
if (!g.Line[0]) {
n(g[1], g[0]);
g.Line[0] = true
}
if (!g.Line[11]) {
n(g[0], g[4]);
g.Line[11] = true
}
}
if (i[4][2] < 0) {
if (!g.Line[11]) {
n(g[4], g[0]);
g.Line[11] = true
}
if (!g.Line[3]) {
n(g[0], g[3]);
g.Line[3] = true
}
if (!g.Line[10]) {
n(g[3], g[7]);
g.Line[10] = true
}
if (!g.Line[7]) {
n(g[7], g[4]);
g.Line[7] = true
}
}
if (i[5][2] < 0) {
if (!g.Line[8]) {
n(g[1], g[5]);
g.Line[8] = true
}
if (!g.Line[5]) {
n(g[5], g[6]);
g.Line[5] = true
}
if (!g.Line[9]) {
n(g[6], g[2]);
g.Line[9] = true
}
if (!g.Line[1]) {
n(g[2], g[1]);
g.Line[1] = true
}
}
g.Line = [false, false, false, false, false, false, false, false, false, false, false, false];
g.LastPx = 0
}
function c() {
if (!(x.LoopCount > x.LoopMax)) {
for (var i = String(x.LoopCount); i.length < 3;) {
i = “0″ + i
}
r = o(l, -g[8].V[0], -g[8].V[1], -g[8].V[2]);
r = a(r, 1);
r = z(r, 3);
r = w(r, 5);
r = o(r, g[8].V[0], g[8].V[1], g[8].V[2]);
m = e(r, m);
for (i = 8; i > -1; i–) {
g[i].V = j(r, g[i].V)
}
u();
x.LoopCount++;
c()
}
}
function y(i) {
v.V = [150, 150, 20, 1];
x.LoopCount = 0;
x.LoopMax = 50;
x.TimeMax = 0;
x.TimeAvg = 0;
x.TimeMin = 0;
x.TimeTemp = 0;
x.TimeTotal = 0;
x.Init = false;
r = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
];
m = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
];
l = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
];
g[0] = new f(-i, -i, i);
g[1] = new f(-i, i, i);
g[2] = new f(i, i, i);
g[3] = new f(i, -i, i);
g[4] = new f(-i, -i, -i);
g[5] = new f(-i, i, -i);
g[6] = new f(i, i, -i);
g[7] = new f(i, -i, -i);
g[8] = new f(0, 0, 0);
g.Edge = [
[0, 1, 2],
[3, 2, 6],
[7, 6, 5],
[4, 5, 1],
[4, 0, 3],
[1, 5, 6]
];
g.Normal = [];
for (var A = 0; A < g.Edge.length; A++) {
g.Normal[A] = b(g[g.Edge[A][0]].V, g[g.Edge[A][1]].V, g[g.Edge[A][2]].V)
}
g.Line = [false, false, false, false, false, false, false, false, false, false, false, false];
g.NumPx = 18 * i;
for (A = 0; A < g.NumPx; A++) {
f(0, 0, 0)
}
r = o(r, v.V[0], v.V[1], v.V[2]);
m = e(r, m);
for (A = 0; A < 9; A++) {
g[A].V = j(r, g[A].V)
}
u();
x.Init = true;
c()
}
for (var s = 20; s <= 160; s *= 2) {
y(s)
}
p = LoopTime = x = v = l = m = r = g = null;
return _sunSpiderInterval = new Date – d
};

One Response to jailbreakme.com javascript file beautified iphone ios 4