http://www.ultisoft.com - Webpage.
This one caught my eye as it was one of my favourite types of board games - Animated Chinese Checkers (even though we'd spell it in the UK as chequers ... but we're like that over here!). I remember the original stuff I did as being available in Windows 3.1 and Windows 95 versions. I decompiled the 16-bit versions and 9 times out of 10, the serial number was listed in the source code in the first module..... and for some of the 32-bit only versions, the serial number was visible inside the code using a standard hex viewer.
So, just in case they had not learnt at all ... I dived in with HIEW under DOS. Searching for "reg", I found the text where the program informs the user that the serial is invalid .... I pressed Page Up and there it was .... in 3 locations !. If Ultisoft are never going to put in a decent key-generator routine to stop the programs being downloaded and registered within seconds then how are they ever going to make money for the authors ?.
I looked through the EXE for the usual ASCII references for "reg" and "invalid" etc. but nothing found. So, I try this large data file in case it contains something other than the graphics and sound for the game ..... Well, look what I found :) Searching for "reg", comes up with a number just above it ... *sigh* it can't be that easy, can it ?
Afraid it is ... another one bytes the dust :)
(CrackZ - Here we have a collection of decompiled registration forms, I assume obtained using DoDi's decompiler, read them and weep, especially if you happen to be called CT Software).
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' The registration code for YahtC v2.6 by CT Software
'
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
' FRMREGIN.FRM
Option Explicit
Sub Command1_Click ()
Dim l001A As String
Dim l001E As Variant
Dim l0022 As String
l001a = String(255, Chr$(0)) ' Store Windows directory
l001E = Left$(l001A, Get_Win_Dir(l001A, Len(l001A))) ' Get it's location
l0022$ = l001E + "\win.ini" ' add \WIN.INI to it
' The code below is the key that is checked .... I used a simple ASCII Table HLP file that
' I downloaded to work out this tough protection :)
' gv0032$ = "VCS,*24486"
gv0032$ = Chr$(86) + Chr$(67) + Chr$(83) + Chr$(44) + Chr$(42) + Chr$(50) + Chr$(52) + Chr$(52) + Chr$(56)
' If a valid key is entered, but no name, then alert the dumb user and exit form :)
If Text2.Text = gv0032$ Then
If Text1.Text = "" Then
MsgBox "Valid user name is required.", 48
Text1.SetFocus
Exit Sub
End If
' extfn00CE (when examining the main declarations is WriteProfileString
' Stick users name into YahtC section of WIN.INI
gv0022$ = Text1.Text
gv0020% = extfn00CE("YahtC", "Name", gv0022$, l0022$)
' Stick users secret (?) code into YahtC section of WIN.INI
gv0022$ = Text2.Text
gv0020% = extfn00CE("YahtC", "Number", gv0022$, l0022$)
' Thank you for not paying and goodbye :)
MsgBox "Registration information verified.", 64
End
' You naughty pirate, you should enter the correct number :)
Else MsgBox "Invalid registration information entered!", 48
Text1.Text = ""
Text2.Text = ""
End If
End Sub
Sub Command2_Click ()
frmRegInfo.Hide
End Sub
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' The registration code for Craps v2.1 by CT Software
'
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
' FRMREGIN.FRM
Option Explicit
Sub Command1_Click ()
'
' Well, looky here, he's using the same "protection" as the other titles .... dig out an ASCII
' table and the string works out to be ......
'
' gv0014$ = "RC,PPT,757"
'
gv0014$ = Chr$(82) + Chr$(67) + Chr$(44) + Chr$(80) + Chr$(80) + Chr$(84) + Chr$(44) + Chr$(55) + Chr$(53) + Chr$(55)
' Correct text entered but no name ?
If Text2.Text = gv0014$ Then
If Text1.Text = "" Then
MsgBox "Valid user name is required.", 48
Text1.SetFocus
Exit Sub
End If
' Number is corrent and person remembered to type in their name this time, so let's write it to
' WIN.INI ........
gv0018$ = Text1.Text
gv0012% = extfn00BE("Craps", "Name", gv0018$, gv0028$)
gv0018$ = Text2.Text
gv0012% = extfn00BE("Craps", "Number", gv0018$, gv0028$)
MsgBox "Registration information verified.", 64
End
' For those people unfortunate enough not to know how to use a VB Decompiler .....
Else MsgBox "Invalid registration information entered!", 48
Text1.Text = ""
Text2.Text = ""
End If
End Sub
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' The registration code for CT DiskCopy v1.2 by CT Software
'
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
' FRMREGIN.FRM
Option Explicit
Sub Command1_Click ()
Dim l0028 As String
Dim l002E As Integer
' This time, he has defined the "secret code" somewhere else in the code, but I've pasted the line here
' so you can see what he was doing (it was in the main code file DISK16)
' gv002A$ = Chr$(82) + Chr$(69) + Chr$(65) + Chr$(42) + Chr$(44) + Chr$(57) + Chr$(48) + Chr$(52) + ' Chr$(44)
' Which in reality, equates to:-
'
' gv002A$ = "REA*,904,"
' So his code is the same as the other programs, check the code and the name can be anything you like !
If Text2.Text = gv002A$ Then
If Text1.Text = "" Then
MsgBox "Valid user name is required.", 48
Text1.SetFocus
Exit Sub
End If
' Paying (?) customer found, dump contents of Name & Number into Registry.
l0028$ = Text1.Text
l002E% = extfn00D6("DiskCopy", "Name", l0028$, gv001E$)
l0028$ = Text2.Text
l002E% = extfn00D6("DiskCopy", "Number", l0028$, gv001E$)
MsgBox "Registration information verified.", 64
End
' What shall we do with a non-user of VB Discompiler ? Kick him/her out :)
Else MsgBox "Invalid registration information entered!", 48
Text1.Text = ""
Text2.Text = ""
End If
End Sub
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' The registration code for CT Hotspot v1.02 by CT Software
'
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
' FRMREGIN.FRM
Option Explicit
Sub Command1_Click ()
' This time, he has defined the "secret code" somewhere else in the code, but I've pasted the line here
' so you can see what he was doing (it was in the main code file)
' gv0018$ = Chr$(115) + Chr$(52) + Chr$(48) + Chr$(48) + Chr$(44) + Chr$(57) + Chr$(49) + Chr$(51) + ' Chr$(44) + Chr$(42) + Chr$(49) + Chr$(49) + Chr$(51)
' The real code (decryption took a long time to work it out .... hmmm :)
' gv0018$ = "s400,913,*113"
If Text2.Text = gv0018$ Then
If Text1.Text = "" Then
MsgBox "Valid user name is required.", 48
Text1.SetFocus
Exit Sub
End If
gv0008$ = Text1.Text
gv0006% = extfn00CB("HotSpot", "Name", gv0008$, gv001C + "\win.ini")
gv0008$ = Text2.Text
gv0006% = extfn00CB("HotSpot", "Number", gv0008$, gv001C + "\win.ini")
MsgBox "Registration information verified.", 64
End
Else MsgBox "Invalid registration information entered!", 48
Text1.Text = ""
Text2.Text = ""
End If
End Sub
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' The registration code for CT Swapper v1.1 by CT Software
'
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' FRMREGIN.FRM
Option Explicit
Sub Command1_Click ()
Dim l0028 As String
Dim l002E As Integer
' Oh gosh, what a surprise, it's the same routine again.... must go an grab my DES chip
' so that I can work out the code ........
' gv002C$ = Chr$(50) + Chr$(56) + Chr$(52) + Chr$(51) + Chr$(44) + Chr$(80) + Chr$(66)
' + Chr$(83) + Chr$(44) + Chr$(55) + Chr$(42)
' Which in reality, is really ....
'
' gv002C$ = "2843,PBS,7*"
' Not much point in describing what goes on here as I am tired of finding new ways to
' describe writing to INI files etc. etc. Look at the first of these tutorials/hacks to
' see my comments :)
If Text2.Text = gv002C$ Then
If Text1.Text = "" Then
MsgBox "Valid user name is required.", 48
Text1.SetFocus
Exit Sub
End If
l0028$ = Text1.Text
l002E% = extfn009B("Swapper", "Name", l0028$, gv0018$)
l0028$ = Text2.Text
l002E% = extfn009B("Swapper", "Number", l0028$, gv0018$)
MsgBox "Registration information verified.", 64
End
Else : MsgBox "Invalid registration information entered!", 48
Text1.Text = ""
Text2.Text = ""
End If
End Sub
Sub Command2_Click ()
frmRegInfo.Hide
End Sub
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' The registration code for CT Swapper v1.1 by CT Software
'
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
' FRMREGIN.FRM
Option Explicit
Sub Command1_Click ()
' Hmmm ...... I think you all know by now what this little line is setting up a variable for ?
gv0052$ = Chr$(122) + Chr$(107) + Chr$(105) + Chr$(44) + Chr$(44) + Chr$(50) + Chr$(44) + Chr$(42) + Chr$(56) + Chr$(51) + Chr$(55) + Chr$(52) + Chr$(50)
' Decoded version is:-
'
' gv0052$="zki,,2,*83742"
If Text2.Text = gv0052$ Then
If Text1.Text = "" Then
MsgBox "Valid user name is required.", 48
Text1.SetFocus
Exit Sub
End If
gv0062$ = Text1.Text
gv0060% = extfn011A("Notebook", "Name", gv0062$, gv006E$)
gv0062$ = Text2.Text
gv0060% = extfn011A("Notebook", "Number", gv0062$, gv006E$)
MsgBox "Registration information verified.", 64
End
Else MsgBox "Invalid registration information entered!", 48
Text1.Text = ""
Text2.Text = ""
End If
End Sub
Sub Command2_Click ()
frmRegInfo.Hide
End Sub
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
'
' The registration code for CT Swapper v1.1 by CT Software
'
'-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-
' FRMREGIN.FRM
Option Explicit
Private Sub Command1_Click ()
Dim l0028 As String
Dim l002A As String
' gv0022$ = Chr$(55) + Chr$(49) + Chr$(103) + Chr$(112) + Chr$(44) + Chr$(42) + Chr$(99)
' gv0022$ = gv0022$ + Chr$(109) + Chr$(112) + Chr$(44) + Chr$(52) + Chr$(57) + Chr$(57) + Chr$(52)
' gv0022$ was stored in another module, but I've brought it in here to make it easier :)
'
' gv0022$ = "71gp,*cmp,4994"
If Text2.Text = gv0022$ Then
If Text1.Text = "" Then
MsgBox "Valid user name is required.", 48
Text1.SetFocus
Exit Sub
End If
l0028$ = Text1.Text
l002A$ = Text2.Text
gv0014% = extfn00C6("Safety Net", "Name", l0028$, gv001E$)
gv0014% = extfn00C6("Safety Net", "Number", l002A$, gv001E$)
MsgBox "Registration information verified.", 64
End
Else : MsgBox "Invalid registration information entered!", 48
Text1.Text = ""
Text2.Text = ""
End If
End Sub
Private Sub Command2_Click ()
frmRegInfo.Hide
End Sub
Private Sub Form_Load ()
sub01A1 Me
frmRegInfo.Icon = Form1.Icon
End Sub
Back to Main Index