From f7005ef0147b3b90889cf4f7f4fe1478c0b50ce4 Mon Sep 17 00:00:00 2001 From: Slava Bacherikov Date: Wed, 18 Jan 2012 03:29:02 +0200 Subject: [PATCH] Initial commit. --- README | 0 decrypt_bios.js | 465 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 465 insertions(+) create mode 100644 README create mode 100644 decrypt_bios.js diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/decrypt_bios.js b/decrypt_bios.js new file mode 100644 index 0000000..3c5dd31 --- /dev/null +++ b/decrypt_bios.js @@ -0,0 +1,465 @@ +/* May be need add 51,52 and 53 symbol */ +var keyboardDict = { 2: '1', 3: '2', 4: '3', 5: '4', 6: '5', 7: '6', 8: '7', 9: '8', 10: '9', 11: '0', + 16: 'q', 17: 'w', 18: 'e', 19: 'r', 20: 't', 21: 'y', 22: 'u', 23: 'i', 24: 'o', 25: 'p', + 30: 'a', 31: 's', 32: 'd', 33: 'f', 34: 'g', 35: 'h', 36: 'j', 37: 'k', 38: 'l', + 44: 'z', 45: 'x', 46: 'c', 47: 'v', 48: 'b', 49: 'n', 50: 'm' }; + +/* Keys function for hashArray for compability + * with browsers witch does't have keys function */ +if(typeof(Object.keys) == 'undefined'){ + Object.keys = function (hash){ + var mkeys = []; + for(var i in hash) if (hash.hasOwnProperty(i)){ + mkeys.push(i); + } + return mkeys; + }; +} +var keys = Object.keys; + +/* values function for hashArray for compability + * with browsers witch does't have values function */ +if(typeof(values) == 'undefined'){ + values = function (hash){ + var mvalues = []; + for(var i in hash) if (hash.hasOwnProperty(i)){ + mvalues.push(hash[i]); + } + return mvalues; + }; +} + +Array.prototype.swap = function (x,y) { + var b = this[x]; + this[x] = this[y]; + this[y] = b; + return this; +} + +function min(x, y){ + if (x < y){ + return x; + } + return y; +} + +function CreateHashTable(mkeys, mvalues){ + var k = min(mkeys.length, mvalues.length); + var hash = new Object(); + for(var i=0;i> 1) ^ 0x2001; + } else { + hash = (hash >> 1) + } + } + } + return hash; +} + +function bruteForce(hash, salt, digitsOnly, charsOnly, minLen, maxLen){ + + salt = (typeof(salt) == 'undefined') ? 0 : salt; + digitsOnly = (typeof(digitsOnly) == 'undefined') ? false: digitsOnly; + charsOnly = (typeof(charsOnly) == 'undefined') ? true : charsOnly; + minLen = (typeof(minLen) == 'undefined') ? 3 : minLen; + maxLen = (typeof(maxLen) == 'undefined') ? 7 : maxLen; + + var encodedPwd = [0,0,0,0,0,0,0]; + + if(hash > 0x3FFF){ + return "Bad hash"; + } + var kk = 0; + if(charsOnly==true){ + var my_keyboard_dict = keyboardDictChars; + } else if(digitsOnly==true){ + var my_keyboard_dict = keyboardDictDigits; + } else { + var my_keyboard_dict = keyboardDict; + } + var my_keyboard_dict_len = keys(my_keyboard_dict).length; + + while(true){ + var rndVal = Math.random()*my_keyboard_dict_len; + for(var i=0; i<7; i++){ + var value = Math.floor(rndVal % my_keyboard_dict_len); + encodedPwd[i]= keys(my_keyboard_dict)[value]; + rndVal *= 7; + } + kk++; + if(kk > 60000){ + return "No"; + } + for(var i=minLen;i<=maxLen; i++){ + if( badCRC16(encodedPwd.slice(0,i),salt) == hash){ + encodedPwd = encodedPwd.slice(0,i); + return keyboardEncToAscii(encodedPwd); + } + } + } +} + + + +/* Return password for old sony laptops + * password 7 digit number like 1234567 */ +function getBiosPwdForSony(serial){ + if(serial.length != 7){ + return "" + } + var table = "0987654321876543210976543210982109876543109876543221098765436543210987"; + var pos = 0; + var code= ""; + for(var i=0;i> (8-rotationMatrix[7*key+i]))); + } + return outhash; + } + + var hash = []; + + for(var i=1;i> 32; + a = (a * 0x66666667); + a = Math.floor(a / Math.pow(2,32)); + a = (a >> 2) | (a & 0xC0); + if ( a & 0x80000000 ){ + a++; + } + a *= 10; + password += (b-a).toString(); + } + return password +} +/* For HP/Compaq Netbooks. 10 chars */ +function getBiosPwdForHpmini(serial){ + var table1 = {'1': '3', '0': '1', '3': 'F', '2': '7', '5': 'Q', '4': 'V', + '7': 'X', '6': 'G', '9': 'O', '8': 'U', 'a': 'C', 'c': 'E', + 'b': 'P', 'e': 'M', 'd': 'T', 'g': 'H', 'f': '8', 'i': 'Y', + 'h': 'Z', 'k': 'S', 'j': 'W', 'm': '4', 'l': 'K', 'o': 'J', + 'n': '9', 'q': '5', 'p': '2', 's': 'N', 'r': 'B', 'u': 'L', + 't': 'A', 'w': 'D', 'v': '6', 'y': 'I', 'x': '4', 'z': '0' + }; + + var table2 = {'1': '3', '0': '1', '3': 'F', '2': '7', '5': 'Q', '4': 'V', + '7': 'X', '6': 'G', '9': 'O', '8': 'U', 'a': 'C', 'c': 'E', + 'b': 'P', 'e': 'M', 'd': 'T', 'g': 'H', 'f': '8', 'i': 'Y', + 'h': 'Z', 'k': 'S', 'j': 'W', 'm': '4', 'l': 'K', 'o': 'J', + 'n': '9', 'q': '5', 'p': '2', 's': 'N', 'r': 'B', 'u': 'L', + 't': 'A', 'w': 'D', 'v': '6', 'y': 'I', 'x': 'R', 'z': '0' + }; + + var password1 = ""; + var password2 = ""; + for(var i=0;i 9 ){ + return chr(ord('a') + symbol_byte - 10); + } else { + return chr(ord('0') + symbol_byte); + } + } + + function bytesToString(bytes){ + var str= ""; + for(var i=0;i> 4) | (op_arr[ar2[3]] << 4)) & 0xFF; + arr[ ar1[1]] = ((op_arr[ar2[0]] & 0x0F) | (op_arr[ar2[3]] & 0xF0)); + arr[ ar1[2]] = ((op_arr[ar2[1]] >> 4) | (op_arr[ar2[2]] << 4) & 0xFF); + arr[ ar1[3]] = (op_arr[ar2[1]] & 0x0F) | (op_arr[ar2[2]] & 0xF0); + return arr; + } + + function convert_to_remainder(arr){ + var temp_arr = []; + for(var i=0;i> 5); + bytes[1] = ((bytes[1] << 5) & 0xFF) | (bytes[1] >> 3); + bytes[2] = ((bytes[2] << 7) & 0xFF) | (bytes[2] >> 1); + bytes[3] = ((bytes[3] << 4) & 0xFF) | (bytes[3] >> 4); + bytes[5] = ((bytes[5] << 6) & 0xFF) | (bytes[5] >> 2); + bytes[6] = ((bytes[6] << 1) & 0xFF) | (bytes[6] >> 7); + bytes[7] = ((bytes[7] << 2) & 0xFF) | (bytes[7] >> 6); + + // len(solution space) = 10 + 26 + bytes = convert_to_remainder(bytes); + + return bytesToString(bytes); + } + + return decryptCode_old(codeToBytes(serial)); +} + +/* For Fujinsu-Siemens. 5x4 dicimal digits. new */ +function getBiosPwdForFSI20dec_new(serial){ + var f_keys = ["4798156302", "7201593846", "5412367098", "6587249310", + "9137605284", "3974018625", "8052974163"]; + + var pwdHash = serial.charAt(0) + serial.charAt(2) + serial.charAt(5) + + serial.charAt(11) + serial.charAt(13) + serial.charAt(15) + + serial.charAt(16); + + var masterPwd = ""; + var i = 0; + for(var j=0;j> num) % 16) % 10); + } + + function hashToString(hash){ + var a = ord('0') + return (hashToChar(hash, a, 12) + + hashToChar(hash, a, 8) + + hashToChar(hash, a, 4) + + hashToChar(hash, a, 0) ); + } + + function calculateHash(word, table){ + var hash = 0; + var d =0; + for(var i=0;i> 8)) % 256 ]; + hash = ((hash << 8) ^ d) & 0xFFFF ; + } + return hash + } + + function decryptCode(code){ + var table = generateCRC16Table(); + return (hashToString(calculateHash(code.slice(0,4), table)) + + hashToString(calculateHash(code.slice(4,8), table))); + + } + if (serial.length == 20){ + serial = serial.slice(12,20); + } + return decryptCode(serial); +}