CleanPC & Scribe 95 v2.65 - by tYruS

"Well, I'm sure a key generator written using JavaScript is not a new idea by any stretch of the imagination, but I am sure this will be the way of the future, see everywhere we are all moving more and more towards web-ready technologies and reversers need to follow suit, especially as coding a key generator in JavaScript is no more difficult than any other high level language like C/C++. Of course I think it will take some time for the teenage couriers and egotistical crackers to use this method, seeing as JavaScript might well deprive them of a few easy releases. What I like about tYruS' contribution is his giving of something back to the community." "-- CrackZ".

CleanPC JavaScript Key Generator

CleanPC Webpage -

Your Serial Number is :

Online JavaScript Resources

The JavaScript Source
JavaScript at Web Reference

1. In this Key Generator I use the if/else condition to check for user input.
 if (form.textbox1.value == "") // if condition no name
   alert("Please enter your Name!")  // true try again
  	else {
2. Take a good long hard look at those for loops and the incrementing. It's just like C.
 for (offset = 0; offset != namelength; offset ++)
   hexnametotal = (0x26+yourName.charCodeAt(offset)) + hexnametotal
3. Good old charCodeAt() which is the hex value of the character.

Target : - Scribe 95 v2.65 - (900k).

Scribe 95 is a 32-bit application designed for use by small clubs and organisations to keep track of membership dues. My evaluation started as per usual with bpx hmemcpy. F5,F5,F5,F12,F12,F12 you know the drill...(if not then get and read more tutorials). It takes about a minute to find several locations for a patch and my valid serial number. Here I present the heart of the protection :-

:0047AD6E MOV EAX, DWORD PTR [EBP+0C] // Move hex value of serial entered into EAX.
:0047AD72 IDIV [EBP+08] // EAX / (length of name + length of branch).
:0047AD75 IMUL EBX, ECX // (length of name * length of branch).
:0047AD7F ADD EAX, EBX // EAX + (length of name * length of branch).
:0047AD88 CMP EAX, 0006D8FB // EAX = 6D8FBh.
:0047AD8D SETE AL // If not = unregistered.

This is of course a very simple routine :-

6D8FB - (length of name * length of branch) * (length of name + length of branch) = valid serial number.

Now that we understand how, its time to write a key generator, lets use JavaScript. I've got my used copy of the JavaScript Handbook, now we can call the script from within the HTML with a form and were done! no compiler, no linking. Just NotePad and a browser (you should view the source code).

After putting this together I have a new found respect for JavaScript as it has a great deal to offer. In this case we used the string.length property, addition and multiplication, but there is a full range of operators available e.g. :-

Maths Operators :- +, -, *, /, ++, --.
Comparison Operators :- >= greater or equal, == equal, != not equal.
Bitwise Operators :- & AND, | OR, ^ XOR, << left shift, >> right shift.
String Handling Properties: string.length, string.toLowerCase(), string.toUpperCase(), string.charAt().

You can see where many of these could be useful in reversing a target.

My greetings and thanks to eDwarD aLLeN, #crack4newbies, CrackZ's Pages, The Sandman's Tuts, Fravia's pages, and Cruehead CrackMe's.

Ob duh!, I almost forgot, if you want to contact tYruS, his e-mail address is

  Key Generators Return to Main Index

© 1998, 1999, 2000 Tutorial by tYruS, hosted by CrackZ. 11th February 2000.