Created
April 1, 2023 18:45
-
-
Save 7enderhead/66e710b3d60f8241a997d8a3ff7b337c to your computer and use it in GitHub Desktop.
Create BIOS Master Password for Fujitsu Laptops (6x4 Digit Version) - Python 3 Compatible
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# Copyright 2009: dogbert <[email protected]> | |
# Copyright 2023: 7enderhead (https://github.com/7enderhead/) | |
# | |
# This program is free software; you can redistribute it and/or modify | |
# it under the terms of the GNU General Public License as published by | |
# the Free Software Foundation; either version 2 of the License, or | |
# (at your option) any later version. | |
# | |
# This program is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
# GNU General Public License for more details. | |
# | |
# You should have received a copy of the GNU General Public License | |
# along with this program; if not, write to the Free Software | |
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
# | |
# | |
# This script generates master passwords which can be used to unlock | |
# the BIOS passwords of most Fujitsu Siemens laptops (Lifebook, Amilo etc.). | |
# You have to install python for running this script. | |
# | |
# Update 2023 for Python 3 | |
from __future__ import print_function | |
import os | |
# someone smacked his head onto the keyboard | |
XORkey = "<7#&9?>s" | |
def codeToBytes(code): | |
numbers = (int(code[0:5]), int(code[5:10]), int(code[10:15]), int(code[15:20])) | |
print(f"Numbers for code '{code}' are: '{numbers}'.") | |
bytes = [] | |
for i in numbers: | |
bytes.append(i % 256) | |
bytes.append(i // 256) | |
print(f"Bytes for code '{code}' are: '{bytes}'") | |
return bytes | |
def byteToChar(byte): | |
if byte > 9: | |
return chr(ord('a') + byte - 10) | |
else: | |
return chr(ord('0') + byte) | |
def decryptCode(bytes): | |
# interleave the nibbles | |
bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7] = ((bytes[3] & 0xF0) | (bytes[0] & 0x0F), (bytes[2] & 0xF0) | (bytes[1] & 0x0F), (bytes[5] & 0xF0) | (bytes[6] & 0x0F), (bytes[4] & 0xF0) | (bytes[7] & 0x0F), (bytes[7] & 0xF0) | (bytes[4] & 0x0F), (bytes[6] & 0xF0) | (bytes[5] & 0x0F), (bytes[1] & 0xF0) | (bytes[2] & 0x0F), (bytes[0] & 0xF0) | (bytes[3] & 0x0F)) | |
# apply XOR key | |
for i in range(len(bytes)): | |
bytes[i] = bytes[i] ^ ord(XORkey[i]) | |
# final rotations | |
bytes[0] = ((bytes[0] << 1) & 0xFF) | (bytes[0] >> 7) | |
bytes[1] = ((bytes[1] << 7) & 0xFF) | (bytes[1] >> 1) | |
bytes[2] = ((bytes[2] << 2) & 0xFF) | (bytes[2] >> 6) | |
bytes[3] = ((bytes[3] << 8) & 0xFF) | (bytes[3] >> 0) | |
bytes[4] = ((bytes[4] << 3) & 0xFF) | (bytes[4] >> 5) | |
bytes[5] = ((bytes[5] << 6) & 0xFF) | (bytes[5] >> 2) | |
bytes[6] = ((bytes[6] << 4) & 0xFF) | (bytes[6] >> 4) | |
bytes[7] = ((bytes[7] << 5) & 0xFF) | (bytes[7] >> 3) | |
# len(solution space) = 10+26 | |
bytes = [x % 36 for x in bytes] | |
masterPwd = "" | |
for x in bytes: | |
masterPwd += byteToChar(x) | |
return masterPwd | |
print("Master Password Generator for FSI laptops (6x4 digits version)") | |
print("Copyright (C) 2013 dogbert <[email protected]>") | |
print("") | |
print("When asked for a password, enter these:") | |
print("First password: 3hqgo3") | |
print("Second password: jqw534") | |
print("Third password: 0qww294e") | |
print("") | |
print("You will receive a hash code with six blocks, each with four numbers, ") | |
print("e.g. 1234-4321-1234-4321-1234-4321") | |
print("") | |
print("Please enter the hash: ") | |
inHash = input().strip().replace('-', '').replace(' ', '') | |
inHash = inHash[4:] | |
password = decryptCode(codeToBytes(inHash)) | |
print("") | |
print("The master password is: " + password) | |
print("") | |
print("Please note that the password is encoded for US QWERTY keyboard layouts.") | |
if (os.name == 'nt'): | |
print("Press a key to exit...") | |
input() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
the laptop is a Fujitsu E5411