Está en la página 1de 11

window.addEventListener("load", function() { HelloWorld.init(); }, false); function utf8_encode (argString) { // Encodes an ISO-8859-1 string to UTF-8 // // version: 1102.

614 // discuss at: http://phpjs.org/functions/utf8_encode // + original by: Webtoolkit.info (http://www.webtoolkit.info/) // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: sowberry // + tweaked by: Jack // + bugfixed by: Onno Marsman // + improved by: Yves Sucaet // + bugfixed by: Onno Marsman // + bugfixed by: Ulrich // * example 1: utf8_encode('Kevin van Zonneveld'); // * returns 1: 'Kevin van Zonneveld' var string = (argString + ''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n"); var utftext = "", start, end, stringl = 0; start = end = 0; stringl = string.length; for (var n = 0; n < stringl; n++) { var c1 = string.charCodeAt(n); var enc = null; if (c1 < 128) { end++; } else if (c1 > 127 && c1 < 2048) { enc = String.fromCharCode((c1 >> 6) 192) + String.fromCharCode((c1 & 63) 128); } else { enc = String.fromCharCode((c1 >> 12) 224) + String .fromCharCode(((c1 >> 6) & 63) 128) + String.fromCharCode((c1 & 63) 128); } if (enc !== null) { if (end > start) { utftext += string.slice(start, end); } utftext += enc; start = end = n + 1; } } if (end > start) { utftext += string.slice(start, stringl); } return utftext; } function md5 (str) { // Calculate the md5 hash of a string // // version: 1102.614 // discuss at: http://phpjs.org/functions/md5 // + original by: Webtool kit.info (http://www.webtoolkit.info/) // + namespaced by: Michael White (http://getsprink.com) // + tweaked by: Jack // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + input by: Brett Zamir (http://brett-zamir.me) // + bugfixed b y: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // depends on: utf8_encode // * example 1: md5('Kevin van Zonneveld'); // * returns 1: '6e658d4bfcb59cc13f96c14450ac40b9' var xl;

var rotateLeft = function (lValue, iShiftBits) { return (lValue << iShiftBits) (lValue >>> (32 - iShiftBits)); }; var addUnsigned = function (lX, lY) { var lX4, lY4, lX8, lY8, lResult; lX8 = (lX & 0x80000000); lY8 = (lY & 0x80000000); lX4 = (lX & 0x40000000); lY4 = (lY & 0x40000000); lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); if (lX4 & lY4) { return (lResult ^ 0x80000000 ^ lX8 ^ lY8); } if (lX4 lY4) { if (lResult & 0x40000000) { return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); } else { return (lResult ^ 0x40000000 ^ lX8 ^ lY8); } } else { return (lResult ^ lX8 ^ lY8); } }; var _F = function (x, y, z) { return (x & y) ((~x) & z); }; var _G = function (x, y, z) { return (x & z) (y & (~z)); }; var _H = function (x, y, z) { return (x ^ y ^ z); }; var _I = function (x, y, z) { return (y ^ (x (~z))); }; var _FF = function (a, b, c, d, x, s, ac) { igned(addUnsigned(_F(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var _GG = function (a, b, c, d, x, s, ac) { igned(addUnsigned(_G(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var _HH = function (a, b, c, d, x, s, ac) { igned(addUnsigned(_H(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var _II = function (a, b, c, d, x, s, ac) { igned(addUnsigned(_I(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; a = addUnsigned(a, addUns

a = addUnsigned(a, addUns

a = addUnsigned(a, addUns

a = addUnsigned(a, addUns

var convertToWordArray = function (str) { var lWordCount; var lMessageLength = str.length; var lNumberOfWords_temp1 = lMessageLength + 8; var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64; var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; var lWordAr ray = new Array(lNumberOfWords - 1); var lBytePosition = 0; var lByteCount = 0;

while (lByteCount < lMessageLength) { lWordCount = (lByteCount - (lByteCount % 4)) / 4; lBytePo sition = (lByteCount % 4) * 8; lWordArray[lWordCount] = (lWordArray[lWordCount] (str.charCodeAt(l ByteCount) << lBytePosition)); lByteCount++; } lWordCount = (lByteCount - (lByteCount % 4)) / 4; lBytePosition = (lByteCount % 4) * 8; lWordArray[lWordCount] = lWordArray[lWordCount] (0x80 << lBytePosition ); lWordArray[lNumberOfWords - 2] = lMessageLength << 3; lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; return lWordArray; }; var wordToHex = function (lValue) { var wordToHexValue = "", wordToHexValue_temp = "", lByte, lCount; for (lCount = 0; lCount <= 3; lCount++) { lByte = (lValue >>> (lCount * 8)) & 255; wordToHexValue_temp = "0" + lByte.toString(16); wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToH exValue_temp.length - 2, 2); } return wordToHexValue; }; var x = S12 S13 S14 S21 S23 S24 S31 S32 S34 S41 S42 S43 str x = a = c = d = [], = 12, = 17, = 22, = 5, = 14, = 20, = 4, = 11, = 23, = 6, = 10, = 15, k, AA, BB, CC, DD, a, b, c, d, S11 = 7,

S22 = 9,

S33 = 16,

S44 = 21;

= this.utf8_encode(str); convertToWordArray(str); 0x67452301; b = 0xEFCDAB89; 0x98BADCFE; 0x10325476; k < xl; k += 16) {

xl = x.length; for (k = 0; AA = a; BB = b; CC = c; DD = d; a = _FF(a, d = _FF(d, a, b, c, x[k + c = _FF(c, d, a, b, x[k + b = _FF(b, c, d, a, x[k + a = _FF(a, b, c, d, x[k + c, x[k + 5], S12, 0x4787C62A); c = _FF(c, d, a, b, x[k + b = _FF(b, c, d, a, x[k + a = _FF(a, b, c, d, x[k + d = _FF(d, a, b, c, x[k +

b, c, d, 1], S12, 2], S13, 3], S14, 4], S11, 6], 7], 8], 9], S13, S14, S11, S12,

x[k + 0], S11, 0xD76AA478); 0xE8C7B756); 0x242070DB); 0xC1BDCEEE); 0xF57C0FAF); d = _FF(d, a, b, 0xA8304613); 0xFD469501); 0x698098D8); 0x8B44F7AF);

c = _FF(c, d, a,

b, x[k + 10], S13, 0xFFFF5BB1); b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122); d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193); c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E); b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821); a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340); c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453); c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681); c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05); a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244); d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97); c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039); a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3); d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1); a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314); b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82); d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391); a = addUnsigned(a, AA); b = addUnsigned(b, BB); c = addUnsigned(c, CC); d = addUnsigned(d, DD); } var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);

return temp.toLowerCase(); } function minimum( a, b, c) { if(a<=b && a<=c) { return a; } if(b<=a && b<=c) { return b; } return c; } function computeLevenshteinDistance2( arreglo1, arreglo2) { var distance=new Array(); //alert("segundo"); //int [][]distance = new int[str1.length+1][str2.length+1]; for(var i=0;i<=arreglo1.length;i++) { distance[i]=new Array(); distance[i][0]=i; //alert(distance[i][0]); } for(var j=0;j<=arreglo2.length;j++) { distance[0][j]=j; //alert(distance[0][j]); } for(var i=1;i<=arreglo1.length;i++) { for(var j=1;j<=arreglo2.length;j++) { distance[i][j]= minimum(distance[i-1][j]+1, distance [i][j-1]+1, distance [i-1][j-1]+ ((arregl o1[i-1]==arreglo2[j-1])?0:1)); } } //alert(distance[arreglo1.length][arreglo2.length]); return distance[arreglo1.length][arreglo2.length]; } function stringtoArrayC(cad){ var i,j; //arreglo //var cad = cad.trim(); //alert("entro a convertir") var arreglo = new Array(); for(i=0,j=1;i<cad.length;i++,j++){ //alert(cad.substring(i,j)); arreglo[i]=cad.substring(i,j); } return arreglo;

} function computeLevenshteinDistance1(str1, str2) { //alert(str1); //alert(str2); var arreglo1=this.stringtoArrayC(str1); var arreglo2=this.stringtoArrayC(str2); return computeLevenshteinDistance2(arreglo1,arreglo2); } function openfile(file_name) { var filex = Components.classes["@mozilla.org/file/local;1"].createInstan ce(Components.interfaces.nsILocalFile); var MY_ID = "AntiPhishing@mozilla.doslash.org"; var em = Components.classes["@mozilla.org/extensions/manager;1"]. getService(Components.interfaces.nsIExtensionManager); // the path may use forward slash ("/") as the delimiter // returns nsIFile for the extension's install.rdf var file = em.getInstallLocation(MY_ID).getItemFile(MY_ID, "Patrones"); var filestring = file.path; filex.initWithPath(filestring); filex.append(file_name); return filex; } function generarPatron(document) { var URL = document.URL; var domain = document.domain; var title_page = document.title; var num_images = document.images.length; var num_links = document.links.length; var num_forms = document.forms.length; var patron = md5(URL) + ';' + md5(domain) + ';' + md5(title_page) + ';' +md5(n um_images) + ';' + md5(num_links) +';' + md5(num_forms); lert("el patron generado es: " + patron); return patron; } function readLine(file) { // open an input stream from file var istream = Components.classes["@mozilla.org/network/file-input-stream ;1"]. createInstance(Components.interfaces.nsIFileIn putStream); istream.init(file, 0x01, 0444, 0); istream.QueryInterface(Components.interfaces.nsILineInputStream); // read lines into array var line = {}, lines = [], hasmore; var i = 0; do { hasmore = istream.readLine(line); lines.push(line.value); //alert(lines[i]); i = i + 1; } while(hasmore); istream.close();

// do something with read data //alert(lines); } function ExistePatron(file_t,url_patron) { // open an input stream from file var istream = Components.classes["@mozilla.org/network/file-input-stream ;1"]. createInstance(Components.interfaces.nsIFileIn putStream); istream.init(file_t, 0x01, 0444, 0); istream.QueryInterface(Components.interfaces.nsILineInputStream); // read lines into array var line = {}, lines = [], hasmore; do { hasmore = istream.readLine(line); lines.push(line.value); } while(hasmore); istream.close(); var i=0; //alert("tamao de lines: " + lines.length); for (i=0;i<lines.length;i++) { //alert('#' + i + "--> lines" + lines[i] + "comparado con url pa tron: " + url_patron); if(computeLevenshteinDistance1(url_patron,lines[i]) == 0 ) retur n true; } return false; // do something with read data //alert(lines); } function EstaVacio(file_t) { // open an input stream from file var istream = Components.classes["@mozilla.org/network/file-input-stream ;1"]. createInstance(Components.interfaces.nsIFileIn putStream); istream.init(file_t, 0x01, 0444, 0); istream.QueryInterface(Components.interfaces.nsILineInputStream); // read lines into array var line = {}, lines = [], hasmore; do { hasmore = istream.readLine(line); lines.push(line.value); } while(hasmore); istream.close(); if(lines.length == 1) return true; return false; }

function EsPosiblePhishing(file_t,url_patron) { // open an input stream from file var istream = Components.classes["@mozilla.org/network/file-input-stream ;1"]. createInstance(Components.interfaces.nsIFileIn putStream); istream.init(file_t, 0x01, 0444, 0); istream.QueryInterface(Components.interfaces.nsILineInputStream); // read lines into array var line = {}, lines = [], hasmore; var tam = []; do { hasmore = istream.readLine(line); lines.push(line.value); } while(hasmore); istream.close(); if(!EstaVacio(file_t)) { alert("esta vacio"); var i=0; for (i=0;i<lines.length;i++) { alert("contador: " + i); var url_file = lines[i].split(";",1); alert(url_file); tam[i] = computeLevenshteinDistance1(url_patron,url_file); alert(tam[i]); } var menor = 0; menor = tam[0]; for (i=0;i<lines.length;i++) if(tam[i] < menor) menor = tam[i]; alert(menor); } // do something with read data //alert(lines); } var HelloWorld = { init: function() { var appcontent = document.getElementById("appcontent"); // browser if(appcontent) appcontent.addEventListener("DOMContentLoaded", HelloWorld.onPageLoad, tru e); var messagepane = document.getElementById("messagepane"); // mail if(messagepane) messagepane.addEventListener("load", function() { HelloWorld.onPageLoad(); }, true); // the extension's id from install.rdf var MY_ID = "AntiPhishing@mozilla.doslash.org"; var em = Components.classes["@mozilla.org/extensions/manager;1"]. getService(Components.interfaces.nsIExtensionManager); // the path may use forward slash ("/") as the delimiter // returns nsIFile for the extension's install.rdf var file = em.getInstallLocation(MY_ID).getItemFile(MY_ID, "Patrones");

var filestring = file.path; //alert(filestring); }, onPageLoad: function(aEvent) { var doc = aEvent.originalTarget; // doc is document that triggered "onload" event var url_actual = doc.location.href; //aqui hace cuando carga la pagina if((doc.location.href.search("http://www.") > -1 doc.location.href.se arch("https://www.") > -1)&& url_actual.length < 150) { var file = openfile("manager.txt"); EsPosiblePhishing(file,url_actual); if(ExistePatron(file,generarPatron(doc))) { var message = 'Filtro Anti-Phishing--> SITIO SEG URO...Comprobado con la huella para: <' + url_actual +'>'; var nb = gBrowser.getNotificationBox(); var n = nb.getNotificationWithValue('popup-block ed'); if(n) { n.label = message; } else { var buttons = [{ label: 'OK', accessKey: 'O', popup: null, callback: function (aNotificatio n, aButton) { aNotific ation.close();return true; } } ]; const priority = nb.PRIORITY_WARNING_MED IUM; nb.appendNotification(message, 'popup-bl ocked', 'chrome://browser/skin/Secure.png', priority, buttons); } } else { var message = 'Filtro Anti-Phishing--> Q ue desea hacer para el sitio: <' + url_actual +'>'; var nb = gBrowser.getNotificationBox(); var n = nb.getNotificationWithValue('pop up-blocked'); if(n) { n.label = message; } else { var buttons = [{

label: 'Generar Huella', accessKey: 'G', popup: null, callback: function (aNot ification, aButton) { //readLine(filex); var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"] .createInstance(Components.interfaces.nsIFileOutputStream); // 0x02 = PR_WRONLY (write only) // 0x08 = PR_CREATE_FILE (create file if the file doesn't exist) // 0x10 = PR_APPEND (append to file with each write) foStream.init(file, 0x02 0x08 0x10, 0666, 0);

var data = generarPatron(doc); foStream.write(data, data.length); foStream.write("\n",1); foStream.close(); alert("Patron generado"); aNotification.close();return true; } } ]; //const priority = nb.PRIORITY_W ARNING_MEDIUM; nb.appendNotification(message, ' popup-blocked', 'chrome://browser/skin/Secure.png', priority, buttons); // } } // add event listener for page unload aEvent.originalTarget.defaultView.addEventListener("unload", function(){ Hel loWorld.onPageUnload(); }, true); }, onPageUnload: function(aEvent) { //khkjhkj }, onMenuItemCommand: function() { } alert(url_actual);

window.open("chrome://AntiPhishing/content/infoPlugin.xul", "", "chrome"); } }