lundi 2 août 2010

JailbreakMe a permis à ma grand-mère de jailbreaker son iPhone 4G

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

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

mercredi 1 avril 2009

Revue des blogs #142 : Une liste de news très Geek !

revue,blog,news,geek


bullet Abonnez-vous à ces revues par feed rss news geek ou par email news geek
bullet Découvrez les anciennes revues

vendredi 10 octobre 2008

Revue des blogs #69 : Une liste de news très Geek !

revue,blog,news,geek


S'abonner à ces news par email news geek ou par feed rss news geek

jeudi 17 avril 2008

Tendancehightech.com : Un iPod Shuffle à Gagner

Suite à la demande de Mr Julien de Tendancehightech.com, deuxième au concours de la Star Ac', voici un peu de pub pour le concours qu'il organise pour la bonne cause :

Pour vous remercier, d'avoir voté pour nous à la Star Academy des Blogs, nous mettons en jeu une audi TT un iPod Shuffle (PRODUCT)Red, dont une partie du prix est reversé au Fonds Mondial de lutte contre le SIDA en Afrique. Parce que ce n'est pas le tout de se faire plaisir, c'est bien aussi de faire un geste utile.

Pour tenter de gagner cet iPod Shuffle envoyer nous tout simplement par SMS le code IPODGAME suivi de votre adresse e-mail au 73700 (0,50€ coût du sms). Le concours dure une semaine. Vous pouvez participer jusqu'au lundi 21 avril 2008 à 0h00. Un tirage au sort parmi tous les participants sera ensuite effectué et le résultat sera publié sur Tendancehightech lundi 21 avril 2008 dans la soirée. Bonne chance !

concours blog ipod

Bonne chance ;-)

vendredi 23 novembre 2007

La vidéo du Week-end : Un iPod et un oignon

Merci à Benjamin pour le lien.

mardi 14 août 2007

TagMyPod : Tatouez vos objets fétiches

En voici une belle idée, tatouer ses objets fétiches comme son PC mobile, son téléphone, son point d'accès Wifi .. Une idée cadeau pour les copines de geek ;-)

tagmypod.jpg

C'est ce que Phuong propose sur son site tagmypod.com

Vous voulez vous aussi faire tatouer votre téléphone ?

Voici les étapes à suivre :

  1. Envoyez à Phuong votre création par email ou venez avec une clé USB
  2. Prenez rendez-vous
  3. Passez au magasin

C'est ouvert de 10 h 00 jusqu'à 22 h 00 tous les jours, même le dimanche.

http://tagmypod.com