Jailbreak iphone 4G

Le nouveau Jailbreak proposé par JailbreakMe pour jaibreaker l'iPhone 4G se base une nouvelle fois sur une faille de Safari (Webkit ?) pour installer Cydia en douce.

http://www.jailbreakme.com

Quand on regarde de plus prêt le code Javascript de la page, on y découvre une fabuleuse et incroyable fonction getSunSpiderInterval que même Einstein aurait eu du mal à coder et qui remet en question la sécurité du browsing sur Internet depuis un iphone / ipad / ipod ...




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
};

```/
Le code source complet du Jailbreak se situe ici : [http://pastebin.com/pmQqsR2Y](http://pastebin.com/pmQqsR2Y)

Si l'un de vous est assez fou pour découvrir ce que fait exactement la fonction, n'hésitez pas à poster un commentaire ;-)
--Cette fonction est à mon avis la cause de la nouvelle faille exploitée par JailBreakMe.--

__Update__ : en fait la faille se situe au niveau de l'interprétation des PDF (Voir : <http://www.jailbreakme.com/_/>), cependant cette fonction doit jouer un rôle important dans le Jailbreak ... mais lequel ? ;-)

En attendant la correction du problème de sécurité par Apple, ne trainez pas trop sur des sites de warez / X ....


__Happy Jailbreak !__


### Toute la toile parle du Jailbreak iphone 4G

* [Jailbreak de l’iOS 4.01 – iPod Touch & iPhone 3GS/4](http://www.spawnrider.net/blogs/2010/08/02/jailbreak-de-ios-4-01-ipod-touch-iphone-3gs-4/)
* [JailbreakMe – jailbreak de tous les iPhone depuis le navigateur!](http://www.papygeek.com/iphone/jailbreakme-jailbreak-de-tous-les-iphone-depuis-le-navigateur/)
* [Jailbreak Me, le jailbreak 2.0](http://www.fredzone.org/jailbreak-me-jailbreak-safari-mobile)
* [Jailbreakme reprend du service](http://www.korben.info/jailbreakme-reprend-du-service.html)
* [Jailbreak Me pour iPhone 4, iPhone 3GS, iPhone 3G, iPad](http://www.veilleperso.com/jailbreak-iphone-4-iphone-3gs-iphone-3g-ipad-4727)
* [JailbreakMe - Jailbreak de l'iPhone 4 , iPad, iPod Touch et tous les iPhone](http://www.accessoweb.com/JailbreakMe-Jailbreak-de-l-iPhone-4--iPad-iPod-Touch-et-tous-les-iPhone_a6979.html)
* [Jailbreak iPhone 4 disponible via JailbreakMe](http://www.begeek.fr/jailbreak-iphone-4-disponible-via-jailbreakme-17916)