ok, so i was talking to creep last night and he suggested i create some sort of crack/keygen me. i thought it would be a good idea so quickly through this together in a few minutes. it is actually a fairly simple algorithm, i have plans to make it harder but thought i would see if someone could reverse this.

please bare in mind, this is not a crack-me. a cracked application will not be a accepted as a completed solution.

possible ways to complete this keygenme:

1) turning the application into a self keygen. (generates its own key)*
2) creating an external keygen. (write any application to generate a key)*
3) get a serial for a specific username.

number 1 is the most advanced method and is what i would like to see. you must post the exe and a gif, without both of those your solution will not be accepted (excluding method 3).

* a detailed explanation of the encryption algorithm must be given to prove it hasn't been c&p'ed.

it hasn't been assembly obfuscated, but the source code has been slightly 'encrypted' using .net ghost, the reason being is so that people cannot simply c&p the code into a new project. it just takes the fun away from it completly :)

it isn't difficult to remove, and you can infact work with it there as long as you don't get too confused.


method1: completed by furiosus at 18:34
method2: completed by 1nv1518l3 at 19:44
method3: completed by furiosus at 18:12


generatekey function:

this is where the username is being manipulated into the serial, it is ran through three different methods.
public function generatekey(byval key as string) key = afunction(key) key = anotherfunction(key) key = anotherweirdfunction(key) return key end function

afunction function:

in this function the username is converted into its hex equivilant.
public function afunction(byval str as string) dim bytearray() as byte dim hexnumbers as system.text.stringbuilder = new system.text.stringbuilder bytearray = system.text.asciiencoding.ascii.getbytes(str) for i as integer = 0 to bytearray.length - 1 hexnumbers.append(bytearray(i).tostring(ÈËÉ(0)).toupper()) next return (hexnumbers.tostring()) end function

anotherfunction function:

this is the function that confused you the most, it converted the hex string into a custom decimal number by replacing the characters (a-f) with decimals (1-6)

public function anotherfunction(byval str as string) form1.randomtext.text = str form1.randomtext.text = form1.randomtext.text.replace("a", 1) form1.randomtext.text = form1.randomtext.text.replace("b", 2) form1.randomtext.text = form1.randomtext.text.replace("c", 3) form1.randomtext.text = form1.randomtext.text.replace("d", 4) form1.randomtext.text = form1.randomtext.text.replace("e", 5) form1.randomtext.text = form1.randomtext.text.replace("f", 6) return form1.randomtext.text end function


in the final function the newly created decimal integer will be converted into md5 and split into the format xxxx-xx-xx-xxxx.

public function anotherweirdfunction(byval astring as string) dim str1 as md5 = md5.create() dim str2 as byte() = str1.computehash(encoding.default.getbytes(astring)) dim str3 as new stringbuilder() dim num1 as integer for num1 = 0 to 8 if (num1 = 2) then str3.append("-") elseif (num1 = 4) then str3.append("-") elseif (num1 = 6) then str3.append("-") else str3.append(str2(num1).tostring("x2")) end if next num1 return str3.tostring.toupper() end function end module


creep - images and idea
djodin - the music <3
me - actual coding of the application