Files
OpenSuperClone/res/oscscripts/ata_security_remove_password.osc

198 lines
4.5 KiB
Plaintext

seti $printhelp = $printhelp
seti $help = $help
if $help = 1
echo 'Remove the password from the disk using 28 bit security disable password command.'
echo 'This requires either the string variable "password" or "hex" to be set.'
echo 'Password is the password in plain text.'
echo 'Hex is the password in hex. It does not require 0x to proceed numbers.'
echo 'If neither password or hex is set then the password will be blank (all 0s).'
echo 'DO NOT SET BOTH or you could end up with undesired results!'
echo 'This requires the number variable "type" to be set on the command line.'
echo 'Type is either 0 for user password or 1 for master password.'
echo 'If type is not set it will default to 0.'
echo 'Example: opensuperclone --tool -t /dev/sdb -f ata_security_remove_password password=="abcd" type=0'
echo 'Example: opensuperclone --tool -t /dev/sdb -f ata_security_remove_password hex=="0a 0b 0c 0d" type=0'
if $printhelp = 1
exit 0
endif
echo 'Hit ENTER to continue...'
userinput $choicestring
previousscript
endif
include good_subroutines.osc
# set a blank string variable to compare with user input
# make sure not to set this anyplace else
sets $null = ""
# set this to itself for use with the menu system
# make sure not to set this anyplace else
# if it was not previously set it will = 0
seti $using_menu = $using_menu
# find out if using menus or if variables were set on the command line, and ask for input if they were not set
seti $ask = 0
while 1 = 1
variablecheck $password
if $error_level < 16
seti $ask = 1
elseif $using_menu = 1
seti $ask = 1
endif
if $ask = 1
echo "Enter password in ascii, or leave blank to set hex:"
userinput $choicestring
if $choicestring != $null
sets $password = $choicestring
break
else
sets $password = ""
break
endif
else
break
endif
done
seti $ask = 0
while 1 = 1
variablecheck $hex
if $error_level < 16
seti $ask = 1
elseif $using_menu = 1
seti $ask = 1
endif
if $ask = 1
echo "Enter password in hex, or leave blank if ascii:"
userinput $choicestring
if $choicestring != $null
sets $hex = $choicestring
break
else
sets $hex = ""
break
endif
else
break
endif
done
seti $ask = 0
while 1 = 1
variablecheck $type
if $error_level < 16
seti $ask = 1
elseif $using_menu = 1
seti $ask = 1
endif
if $ask = 1
echo "Enter type (0 for user, 1 for master):"
userinput $choicestring
if $choicestring != $null
seti $type = $choicestring 0
break
else
break
endif
else
break
endif
done
# check if both regular and hex passwords were set
if $password != $null
if $hex != $null
echo "Error! Both password and hex were set!"
previousscript
endif
endif
# set the buffer size
buffersize 512
# clear the buffer to 0's
clearbuffer
# put the type in the buffer
seti $byte0 = $type & 0x01
setbuffer 0
$byte0
endbuffer
# put the hex (up to 32 characters) in the buffer
# force reading has hex so it does not require 0x
hex
seti $b0 = $hex 0
seti $b1 = $hex 1
seti $b2 = $hex 2
seti $b3 = $hex 3
seti $b4 = $hex 4
seti $b5 = $hex 5
seti $b6 = $hex 6
seti $b7 = $hex 7
seti $b8 = $hex 8
seti $b9 = $hex 9
seti $b10 = $hex 10
seti $b11 = $hex 11
seti $b12 = $hex 12
seti $b13 = $hex 13
seti $b14 = $hex 14
seti $b15 = $hex 15
seti $b16 = $hex 16
seti $b17 = $hex 17
seti $b18 = $hex 18
seti $b19 = $hex 19
seti $b20 = $hex 20
seti $b21 = $hex 21
seti $b22 = $hex 22
seti $b23 = $hex 23
seti $b24 = $hex 24
seti $b25 = $hex 25
seti $b26 = $hex 26
seti $b27 = $hex 27
seti $b28 = $hex 28
seti $b29 = $hex 29
seti $b30 = $hex 30
seti $b31 = $hex 31
decimal
setbuffer 2
$b0 $b1 $b2 $b3 $b4 $b5 $b6 $b7 $b8 $b9 $b10 $b11 $b12 $b13 $b14 $b15
$b16 $b17 $b18 $b19 $b20 $b21 $b22 $b23 $b24 $b25 $b26 $b27 $b28 $b29 $b30 $b31
endbuffer
# put the password (up to 32 characters) in the buffer
# if set this will overwrite part of all of the hex password
stringtobuffer 2 32 $password
# set the LBAs and count to 0
seti $count = 0
seti $LBAlow = 0
seti $LBAmid = 0
seti $LBAhigh = 0
# set some things for the ata command
setwritepio
# set features to 0
seti $features = 0
# set device bits 7(compatibility) 5(compatibility)
seti $device = 0xa0
# set the command for security disable password pio data-out
seti $command = 0xf6
# perform the command
ata28cmd $features $count $LBAlow $LBAmid $LBAhigh $device $command
# check if command failed
gosub status_check
echo "Command completed"
previousscript
end