/------------------------------HellSpawn 2K1-----------------------\
| 	Author: 		KahnAbyss	|
| 	Target: 		HighGrow 2.0	|
| 	Tools: 		SoftIce 4.05    	|
|			Any Prog Software	|
|			Ill use VB 		|
| 	Crack Type: 	Patch/Registry	|
|	Level:		Normal		|
\-----------------------------------------------------------------------------/

HighGrow can be found at: http://www.geocities.com/slick_software/index.html

---------------------------------> INTRODUCTION <---------------------------------------------
	HighGrow is a simulation software wich you have 
	to make Cannabis plant grow.... BlahBlahBlah...
	This software is locked with a serial number 
----------------------------------------------------------------------------------------------------------------

Part 1: Dig Protection
=================

Step 1:	Make Backup
---------------------------------------

	As usual you should make a backup of the exe file...
	I called it HighGrow.ori

Step 2:	Get Serial
--------------------------------
	
	Go into SoftIce then type bpx MessageBoxA
	when you press ok softice gonna popup
	press F11 to get back to the caller you should be here:

	016F:004162AA  PUSH      	00429E20                                               
	016F:004162AF  PUSH      	14                                                     
	016F:004162B1  PUSH      	0D                                                     
	016F:004162B3  PUSH      	00000456                                               
	016F:004162B8  PUSH      	EBX                                                    
	016F:004162B9  CALL      	[USER32!SendDlgItemMessageA]                           
	016F:004162BF  CMP       	EAX,0F                                                 
	016F:004162C2  JZ        	004162F3                                               
	016F:004162C4  PUSH      	30                                                     
	016F:004162C6  PUSH      	0042A064                                               
	016F:004162CB  PUSH      	0042A204                                               
	016F:004162D0  PUSH      	EBX                                                    
	016F:004162D1  CALL      	[USER32!MessageBoxA]     	<== Error Message
	016F:004162D7  PUSH      	00000456		<== You should be here                                     
	016F:004162DC  PUSH      	EBX 

	Ok from here we know at 4162B9 they set the error message
	At 4162D1 they send the message
	So put a break point at 4162C2 and click ok again
	When Softice popup type r fl z to change the zero flag

	Press F10 to trace it down a little bit

	016F:004162F3  LEA       	EAX,[ESP+0C]                                           
	016F:004162F7  PUSH      	EAX                                                    
	016F:004162F8  CALL      	004157A0                                               
	016F:004162FD  LEA       	EDX,[ESP+10]	<== Put serial in EDX                                        
	016F:00416301  ADD       	ESP,04                    <== Stop here                            
	016F:00416304  MOV       	EAX,00429E20

	Type d Edx to see what is into it...
	you should see something like:

	0177:0072F744 31 36 32 2D 50 4C 4F 4A-4D 4E 49 2D 31 30 34 00  162-PLOJMNI-104.

	So here is our serial 162-PLOJMNI-104
	Lets try it... Ok it works but our job isnt over yet...
	Time limit of 60 dayz is over but you cant import/export seeds...
	Serial is stored into Registry at 
	"HKEY_CURRENT_USER\SoftWare\Slick Software\HighGrow"
	Registration Code


Step 3: Enable Import Function
-------------------------------------------------

	Clear all previsious breakpoint into SoftIce then
	put one at DialogBoxParamA
	when you'll click on Import or export SoftIce will popup
	press F11 to get back to the caller you should be here:

	016F:00406B10  MOV       	EAX,[ESP+04]   		<== Beginning of Function                                        
	016F:00406B14  PUSH      	00                                                     
	016F:00406B16  MOV       	ECX,[ESP+0C]                                           
	016F:00406B1A  PUSH      	00406650                                               
	016F:00406B1F  PUSH      	EAX                                                    
	016F:00406B20  PUSH      	00429BFC                                               
	016F:00406B25  PUSH      	ECX                                                    
	016F:00406B26  CALL      	[USER32!DialogBoxParamA]                               
	016F:00406B2C  RET             			<== You'll be here

	Put a breakpoint on 406B10 then click on Import again
	Press F11 to get back from Caller you should be here:

	016F:004041AC  JZ        	004041CB		<== Jump to Call of NagScreen                                               
	016F:004041AE  CALL      	004061B0                                               
	016F:004041B3  ADD       	ESP,08                                                 
	016F:004041B6  TEST      	EAX,EAX                                                
	016F:004041B8  JZ        	00404231                                               
	016F:004041BA  PUSH      	ESI                                                    
	016F:004041BB  CALL      	00403D80                                               
	016F:004041C0  ADD       	ESP,04                                                 
	016F:004041C3  XOR       	EAX,EAX                                                
	016F:004041C5  POP       	EDI                                                    
	016F:004041C6  POP       	ESI                                                    
	016F:004041C7  POP       	EBX                                                    
	016F:004041C8  RET       	0010			<== End Of Function                                                 
	016F:004041CB  CALL      	00406B10		<== Call to NagScreen                                              
	016F:004041D0  ADD       	ESP,08       		<== You'll be here
	
	Put a breakpoint on 4041AC then click Import again
	If you done everything right SoftIce should popup
	Change the value of (Z)ero Flag by typing r fl z
	Press F5 to resume execution then a box should appear
	to import seeds...

Step 4: Enable Export Function
-------------------------------------------------

	Clear all breakpoint except the one that point on 406B10
	Press Export Function then F11 to get back from caller
	you should be here:

	016F:004041E2  JZ        	0040420C	<== Jump After Retrun                                               
	016F:004041E4  PUSH      	00                                                     
	016F:004041E6  PUSH      	00                                                     
	016F:004041E8  PUSH      	00000188                                               
	016F:004041ED  PUSH      	00000454                                               
	.....
	.....
	016F:00404208  POP       	EBX                                                    
	016F:00404209  RET       	0010 		<== End Of Function                                                  
	016F:0040420C  PUSH      	EDI                                                    
	016F:0040420D  PUSH      	ESI                                                    
	016F:0040420E  CALL      	00406B10	<== Call To NagScreen
	016F:00404213  ADD       	ESP,08     	<== You'll be here

	Put a breakpoint on 4041E2 then change the (Z)ero Flag again
	Depending on wich seed you point when you press Export 
	you should be able to Export it or you'll have a message that you 
	can only export seeds that you have breeded or imported...
	You can fix that to but its not my goal in this tutorial so dig it by yourself

	The only thing left is to code the crack... we have both offset to patch
	so it shouldn't be a prob...

Part 2: Crack Source Code (VB)
=========================
Ok here it have few new stuff against my old crack...
Its just API used by Visual Basic to access Registry
Ive made it this way for lazy bum that should still had to
insert serial number into HighGrow after running the crack...

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

Private Sub cmdCrack_Click()
Dim Handle As Long
Dim Serial As String
Dim OffSetChk As String * 1

Serial = "162-PLOJMNI-104"
FileNo = FreeFile

If Dir(App.Path & "\HighGrow.exe") = "" Then   	 					'Check if in HighGrow directory
    MsgBox "Copy the crack into HighGrow directory", vbOKOnly, "HighGrow 2.0 Crack"
Else
    Open App.Path & "\HighGrow.exe" For Binary As #FileNo
        Get #FileNo, &H35AD, OffSetChk          						'Check 1St Offset (Import)
        If Hex(Asc(OffSetChk)) <> 74 Then
            MsgBox "Crc Error", vbOKOnly, "HighGrow 2.0 Crack"
            Close #FileNo
            Exit Sub
        End If
        Get #FileNo, &H35E3, OffSetChk          						'Check 2Nd Offset (Export)
        If Hex(Asc(OffSetChk)) <> 74 Then
            MsgBox "Crc Error", vbOKOnly, "HighGrow 2.0 Crack"
            Close #FileNo
            Exit Sub
        End If
        RetVal = RegOpenKeyEx(&H80000001, "SoftWare\Slick Software\HighGrow", 0, &HF003F, Handle)
            If RetVal <> 0 Then
                MsgBox "Unexpected Error Occured", vbOKOnly, "HighGrow 2.0 Crack"
                Close #FileNo
                Exit Sub
            Else
                OffSetChk = Chr(&H75)
                Put #FileNo, &H35AD, OffSetChk      						'Patch 1St Offset
                Put #FileNo, &H35E3, OffSetChk      						'Patch 2Nd Offset
                RegSetValueEx Handle, "Registration Code", 0, 1, ByVal Serial, Len(Serial)  		'Set Serial into Registry
                MsgBox "HighGrow 2.0 Successfully Cracked!", vbOKOnly, "HighGrow 2.0 Crack"
            End If
        RegCloseKey Handle
    Close #FileNo
End If
End Sub