I wrote this about 3-4 years ago, we had a discussion on IRC with a couple friends about how pathetic some algorithms are as I showed the reference code from a Sony Vaio bios. We had two pairs of codes and that was enough to reverse the algorithm, the pattern clearly emerged with this minuscule sample size which goes to show just how simple some algorithms out there really are.
At the time that piece of code was actually valuable, I could’ve sold the unlock service to people (like a few weasels began to afterwards…) but being the kind that would rather avoid legal issues, I simply put it on the back-burner.
Well, I didn’t want any trouble with Sony. I did email them, nobody ever replied. So that’s as far as I got. I guess they would rather ignore certain problems than to face them — it ought to be cheaper…
Show me the code!
OK, Since I’m sure by now the relevance of the code has decreased and thus it’s value, and perhaps someone else already decided to post it after reversing it… (don’t know, haven’t checked — don’t care) I’m posting it here so any remaining weasels cease to profit from it.
;Sony Vaio Bios Unlock Calculator ;www.gushh.net ; input is numeric 7 digits, we only trim and obtain the left 7 digits as input sanitation. Define.s input = Left( Trim(InputRequester( "input code", "", "" )), 7 ) Define.s output = "" Define.i i Dim buffer.i(6) For i=0 To 6 ; extract the characters from the input string onto the working buffer buffer(i) = Val( Mid( input, i + 1, 1 ) ) Next ;10 8 7 12 11 12 16 ;- the magic pattern, reminds me of LOST... Dim LUT.i(6) ; input the LUT LUT(0) = 10 LUT(1) = 8 LUT(2) = 7 LUT(3) = 12 LUT(4) = 11 LUT(5) = 12 LUT(6) = 16 For i=0 To 6 ; offset the buffer contents based on the LUT buffer(i) = LUT(i) - buffer(i) Next For i=0 To 6 ; generate the output string output + Right( Str( buffer(i) ), 1) Next ; display it MessageRequester( "result", output )
I’ll let it up to you to figure out the language and how to compile it. If you know other languages, porting it will be trivial. If you are not a programmer, send me a message and we’ll figure something out — I’m not going to upload / send any executables, sorry.
As an exercise, can you actually come up with the look-up table just by looking at these two pairs of numbers?
9876543 = 1006683 2335568 = 8547668
Which Vaio models?
Ah, good question… Turns out, it’s been a long time and I lost the pertinent details, can you come up with a list of supported models? — If it worked for your Vaio, maybe consider buying me a coffee?
Do you have more?
Actually yes, we broke a few other algorithms back then. But I won’t post it all at once. I am however willing to take a challenge — Just let me know. I may consider adding a live calculator to the page if someone requests it.
That’s all for now, cheers.