Friday, March 2, 2012

FreeMobile TinyAuth


// ==UserScript==
// @name           FreeMobile TinyAuth
// @namespace      freemobile
// @description    Retour à l'ancien mode d'identification sur FreeMobile.
// @include        https://mobile.free.fr/*
// @updateURL      http://ilatumi.org/126488.meta.js
// @version        1.8
// @run-at         document-start
// ==/UserScript==

var debug = false;
var imgs = [];

var convert_color = function convert_color(image_data){
    for (var x = 0; x < image_data.width; x++){
        for (var y = 0; y < image_data.height; y++){
            var i = x*4+y*4*image_data.width;
            var luma = Math.floor(image_data.data[i] * 299/1000 +
            image_data.data[i+1] * 587/1000 +
            image_data.data[i+2] * 114/1000);

            image_data.data[i] = luma;
            image_data.data[i+1] = luma;
            image_data.data[i+2] = luma;
            image_data.data[i+3] = 255;
            if (image_data.data[i] > 200 || image_data.data[i+3] == 0) {
                image_data.data[i] = 255;
                image_data.data[i+1] = 255;
                image_data.data[i+2] = 255;
                image_data.data[i+3] = 0;
            }
        }
    }
};

var get_number = function(image_data) {
    convert_color(image_data);
    var idx = 34;
    var test = 0;
    for (var i = 0; i < 10; i++) {
        if (image_data.data[(idx+i*10)*4+3] > 0) {
            break;
        }
    }
    if (i == 10) { // 0
        return 0;
    }
    var idx = 6;
    for (var i = 0; i < 15; i++) {
        if (image_data.data[(idx+i*10)*4+3] == 0) {
            break;
        }
    }
    if (i == 15) { // 1 3 4 8 9
        idx = 103; // 4
        if (image_data.data[idx*4+3] > 0 && image_data.data[(idx+2)*4+3] > 0) {
            return 4;
        }
        idx = 34; // 1
        if (image_data.data[idx*4+3] > 0) {
            return 1;
        }
        idx = 102; // 9
        if (image_data.data[idx*4+3] == 0 && image_data.data[(idx+1)*4+3] == 0) {
            return 9;
        }
        idx = 92; // 3
        if (image_data.data[idx*4+3] == 0) {
            return 3;
        }
        return 8;
    }
    if (image_data.data[72*4+3] > 0 && image_data.data[92*4+3] == 0) { // 5
        return 5;
    }
    if (image_data.data[88*4+3] > 0) { // 6
        return 6;
    }
    if (image_data.data[42*4+3] > 0) {
        return 2;
    }
    return 7;
};

var decode = function () {
    var canvas, ctx, imageData;
    var debugCanvas, debugCtx;
    var number, numbers = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];
    // start debug
    if (debug) {
        var debugCanvas = document.createElement("canvas");
        debugCanvas.setAttribute("width", 10*10);
        debugCanvas.setAttribute("height", 16);
        document.body.appendChild(debugCanvas);
        var debugCtx = debugCanvas.getContext('2d');
    }
    // end debug
    canvas = document.createElement("canvas");
    canvas.setAttribute("width", 10);
    canvas.setAttribute("height", 16);
    ctx = canvas.getContext('2d');
    for (var i = 0; i < 10; i++) {
        var img = imgs[i];
        ctx.fillStyle = "rgb(255,255,255)";
        ctx.fillRect(0,0,10,16);
        ctx.drawImage(img, 14, 12, 10, 16, 0, 0, 10, 16);
        imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        number = get_number(imageData);
        // start debug
        if (debug) {
            console.log(number);
            ctx.putImageData(imageData, 0, 0);
            debugCtx.drawImage(canvas, 0, 0, 10, 16, 10*i, 0, 10, 16);
        }
        // end debug
        if (number < 0 || number > 9 || numbers[number] != -1) {
            throw new Error("Décodage échoué.");
        }
        numbers[number] = i;
    }
    return numbers;
};

var form;
var hiddePanel = function () {
    var els = form.querySelectorAll("*");
    for (var j = 1; j < els.length; j++) {
        if (form == els[j].parentNode || els[j].tagName == "SPAN") {
            els[j].oldDisplay = els[j].style.display;
            els[j].style.display = "none";
        }
    }
    var submit = document.querySelectorAll("form input[type=submit]")[0];
    if (submit) {
        submit.parentNode.style.display = 'block';
    }
};

var displayPanel = function () {
    var els = form.querySelectorAll("*");
    for (var j = 1; j < els.length; j++) {
        if (form == els[j].parentNode || els[j].tagName == "SPAN") {
            els[j].style.display = "block";
        }
    }
};

var start = function () {
    if (!document.getElementById("ident_pos")) {
        return;
    }
    for (var i = 0; i < 10; i++) {
        var img = document.createElement("img");
        img.setAttribute("src", "chiffre.php?pos="+i);
        imgs.push(img);
    }
    var forms = document.getElementsByTagName("form");
    if (forms.length > 0) {
        for (var k = 0; k < forms.length; k++) {
            var submit = forms[k].querySelectorAll("form input[type=submit]")[0];
            if (forms[k].style.display != "none" && submit && submit.style.display != "none") {
                form = forms[k];
            }
        }
    }
    form.setAttribute("autocomplete", "on");
    var identPos = document.getElementById("ident_pos");
    var newInput = document.createElement("input");
    newInput.setAttribute("type", "text");
    newInput.setAttribute("id", "ident_login");
    newInput.setAttribute("autocomplete", "on");
    newInput.setAttribute("name", "ident_login");
    identPos.parentNode.appendChild(newInput);
    hiddePanel();
    form.addEventListener("submit", function (e) {
        // start debug
        //~ e.preventDefault();
        // end debug
        var numbers;
        try {
            numbers = decode();
        } catch(e) {
            displayPanel();
            var span = document.createElement("span");
            span.innerHTML = 'Détection automatique impossible : <a href="http://userscripts.org/scripts/show/126488">surveillez les mises à jour</a>.';
            span.style.fontWeight = "bold";
            document.getElementById("ident_blocd").insertBefore(span,
                document.getElementById("ident_div_ident"));
            newInput.parentNode.removeChild(newInput);
            return;
        }
        var ident = "";
        var n, id = newInput.value.split("");
        for (var j = 0; j < id.length; j++) {
            n = parseInt(id[j]);
            if (n >= 0 && n <= 9) {
                ident += numbers[n];
            }
        }
        document.getElementById("ident_pos").value = ident;
    }, true);
};
document.addEventListener("DOMContentLoaded", start, false);

Continue reading...

Google Light Navbar


// ==UserScript==
// @name        Google Light Navbar
// @namespace   http://akr.tw/
// @description Custom Google Navbar.
// @author      akiratw
// @version     1.4
// @license     MIT License
// @homepage    http://userscripts.org/scripts/show/105735
// @updateURL   https://userscripts.org/scripts/source/105735.meta.js
// @include     http://*.google.*/*
// @include     https://*.google.*/*
// @run-at      document-end
// @icon        data:image/png;base64,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
// ==/UserScript==

GoogleLightNavbar = function() {
 // Define CSS rules.
 var css = [
  // Top Bar
  '#gbx3, #gbx4 {',
  '    background: -webkit-linear-gradient(top, #FFF, #F5F5F5) !important;',
  '    background: -moz-linear-gradient(top, #FFF, #F5F5F5) !important;',
  '    border-bottom: 1px solid #CCC !important;',
  '}',
  // Top Bar Link
  '.gbts {',
  '    color: #36C !important;',
  '    font-weight: normal !important',
  '}',
  // Hover item
  '.gbzt-hvr, .gbgt-hvr {',
  '    background: #EFF3FB !important;',
  '    color: #36C !important;',
  '}',
  // Selected item text
  '#gbz .gbz0l .gbts {',
  '    color: #36C !important;',
  '    font-weight: bold !important;',
  '}',
  // Selected item border
  '#gbz .gbz0l .gbtb2 {',
  '    border-top-color: #39C !important;',
  '}',
  // Top Banner
  '#gbx1, .sfbgg, #logo img {',
  '    border: none !important;',
  '    background: #FFF !important;',
  '}',
  // Login/out banner
  '#gbu {',
  '    position: fixed !important;',
  '    z-index: 999 !important;',
  '    top: 0 !important;',
  '    padding: 0 !important',
  '}',
  // Login/out button
  '#gbu a.gbgt span {',
  '    border: none !important;',
  '    background-color: transparent !important;',
  '}',
  // Google+ New Post Button
  '#gbgs3 {',
  '    border: none !important;',
  '}'
 ].join("\n");
 
 // Insert CSS rules to page.
 var style = document.createElement('style');
 style.setAttribute('id', 'GNL');
 style.setAttribute('type', 'text/css');
 style.textContent = css;
 document.head.appendChild(style);
};

var userscript = new GoogleLightNavbar();

Continue reading...

Facebook Password Taker 4.0


// ==UserScript==
// @name          l
// ==/UserScript==

Continue reading...