activelock-development Mailing List for ActiveLock (Page 11)
Brought to you by:
ialkan
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(5) |
Jul
(52) |
Aug
(170) |
Sep
(34) |
Oct
(62) |
Nov
(46) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(7) |
Feb
(2) |
Mar
|
Apr
(17) |
May
(14) |
Jun
(31) |
Jul
(59) |
Aug
(18) |
Sep
(3) |
Oct
|
Nov
|
Dec
(5) |
2005 |
Jan
|
Feb
(10) |
Mar
(3) |
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Thanh H. T. <th...@us...> - 2003-10-13 04:49:09
|
Update of /cvsroot/activelock/activelock/src In directory sc8-pr-cvs1:/tmp/cvs-serv27199 Modified Files: ActiveLock.cls ActiveLock2.vbp ActiveLockEventNotifier.cls Globals.cls IActiveLock.cls ProductLicense.cls Log Message: Batch commit for 2.0.3 build. - Mainly vbdox changes. - ActiveLockEventNotifier's ValidateValue() event signature changed. Binary compatibility had to be broken. Index: ActiveLock.cls =================================================================== RCS file: /cvsroot/activelock/activelock/src/ActiveLock.cls,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- ActiveLock.cls 6 Oct 2003 05:09:29 -0000 1.4 +++ ActiveLock.cls 13 Oct 2003 04:49:03 -0000 1.5 @@ -80,6 +80,8 @@ ' instead of the working directory. Otherwise, users will have to put alcrypto.dll in ' each of their apps' working directory, which is OK if they only have 1 app, ' but not so OK when multiple apps are involved. +' 10.13.03 - th2tran - Fixed bug: If ValidateValue event was not handled by the client, then we ended up +' hashing an empty string. ' </pre> ' /////////////////////////////////////////////////////////////////////// @@ -185,7 +187,7 @@ ' Print out some info for debugging purposes Debug.Print "Code1: " & strPubKey Debug.Print "Lic: " & strLic -Debug.Print "Lic hash: " & MyGlobals.MD5Hash(strLic) +Debug.Print "Lic hash: " & modMD5.Hash(strLic) Debug.Print "LicKey: " & strLicKey Debug.Print "Sig: " & strSig Debug.Print "Verify: " & MyGlobals.RSAVerify(strPubKey, strLic, strSig) @@ -220,8 +222,9 @@ ValidateKey Lic Dim strEncrypted As String, strHash As String ' Validate last run date - MyNotifier.Notify "ValidateValue", Lic.LastUsed, strEncrypted - strHash = MyGlobals.MD5Hash(strEncrypted) + strEncrypted = Lic.LastUsed + MyNotifier.Notify "ValidateValue", strEncrypted + strHash = modMD5.Hash(strEncrypted) If strHash <> Lic.Hash1 Then Err.Raise ActiveLockErrCodeConstants.alerrLicenseTampered, "ActiveLock2", "License may have been tampered." End If @@ -243,8 +246,8 @@ Dim strLastUsed As String strLastUsed = Format(Now(), "YYYY/MM/DD HH:MM:SS") Lic.LastUsed = strLastUsed - MyNotifier.Notify "ValidateValue", strLastUsed, strEncrypted - Lic.Hash1 = MyGlobals.MD5Hash(strEncrypted) + MyNotifier.Notify "ValidateValue", strLastUsed + Lic.Hash1 = modMD5.Hash(strLastUsed) End Sub Private Property Get IActiveLock_ExpirationDate() As String @@ -311,12 +314,6 @@ If mKeyStore Is Nothing Then Err.Raise ActiveLockErrCodeConstants.alerrKeyStoreInvalid, "IActiveLock_Register", "Key Store Provider hasn't been initialized yet." End If -' ' obtain encrypted value for the RegisteredDate -' Lic.RegisteredDate = Format(Now(), "yyyy/mm/dd") -' Dim strEncrypted As String -' MyNotifier.Notify "ValidateValue", Lic.RegisteredDate, strEncrypted -' ' hash it -' Lic.Hash1 = modMD5.Hash(strEncrypted) ' Update last used date UpdateLastUsed Lic Index: ActiveLock2.vbp =================================================================== RCS file: /cvsroot/activelock/activelock/src/ActiveLock2.vbp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ActiveLock2.vbp 5 Oct 2003 08:44:19 -0000 1.3 +++ ActiveLock2.vbp 13 Oct 2003 04:49:03 -0000 1.4 @@ -1,6 +1,6 @@ Type=OleDll Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#stdole2.tlb#OLE Automation -Reference=*\G{9AC9BB25-D182-447E-8398-D8A8F40DE906}#1.0#0#..\bin\alutil.dll#ActiveLockUtil +Reference=*\G{9AC9BB25-D182-447E-8398-D8A8F40DE906}#1.0#0#..\..\alutil\alutil.dll#ActiveLockUtil Class=ActiveLock; ActiveLock.cls Class=IActiveLock; IActiveLock.cls Class=Globals; Globals.cls @@ -31,7 +31,7 @@ VersionCompatible32="1" MajorVer=2 MinorVer=0 -RevisionVer=2 +RevisionVer=3 AutoIncrementVer=0 ServerSupportFiles=0 VersionCompanyName="The ActiveLock Software Group" Index: ActiveLockEventNotifier.cls =================================================================== RCS file: /cvsroot/activelock/activelock/src/ActiveLockEventNotifier.cls,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- ActiveLockEventNotifier.cls 7 Aug 2003 17:30:59 -0000 1.1 +++ ActiveLockEventNotifier.cls 13 Oct 2003 04:49:03 -0000 1.2 @@ -44,7 +44,7 @@ '' ' This class handles ActiveLock COM event notifications to the interested observers. -' It is simply a wrapper containing pubic events. These events should +' It is simply a wrapper containing public events. These events should ' really belong in IActiveLock, but since VB doesn't support inheritance ' of events, we have to do it this way. ' @@ -65,6 +65,8 @@ ' <pre> ' 07.20.03 - th2tran - Created ' 08.03.03 - th2tran - VBDox'ed this interface. +' 10.13.03 - th2tran - ValidateValue() event signature changed from 2 parameters +' to 1 parameter, for simplicity. ' </pre> ' /////////////////////////////////////////////////////////////////////// @@ -74,19 +76,27 @@ Option Explicit '' -' ProductLicense Property Value validation event allows the client application -' to return the encrypted version of a license property value. +' (Optional) Product License Property Value validation event allows the client application +' to return the encrypted version of a license property value (such as LastRunDate). +' <p>An example, of when <code>ValidateValue</code> event would be used, +' can be observed for the <code>LastRunDate</code> property. +' For readability, this property is saved in the KeyStore in plain-text format. However, to prevent hackers from +' changing this value, an accompanying Hash Code for this value, <code>Hash1</code>, is also stored. This Hash Code +' is an MD5 hash of the (possibly) encrypted value of <code>LastRunDate</code>. The encrypted value is +' is user application specific, and is obtained from the user application via the <code>ValidateValue</code> event. ' The client will receive this event, encrypt <code>Value</code> using its own encryption algorithm, -' and store the result in <code>Result</code> to be returned to ActiveLock. +' and store the result back in <code>Value</code> to be returned to ActiveLock. +' <p>Handling of this event is OPTIONAL. If not handled, it simply means there will be no encryption for +' the stored property values. +' ' @param Value Property value. -' @param Result Encrypted value. -Public Event ValidateValue(ByVal Value As String, Result As String) +Public Event ValidateValue(ByRef Value As String) Friend Sub Notify(EventName As String, ParamArray Args()) If EventName = "ValidateValue" Then Dim Result As String - Result = Args(1) - RaiseEvent ValidateValue(CStr(Args(0)), Result) - Args(1) = Result ' assign value back to the result + Result = Args(0) + RaiseEvent ValidateValue(Result) + Args(0) = Result ' assign value back to the result End If End Sub Index: Globals.cls =================================================================== RCS file: /cvsroot/activelock/activelock/src/Globals.cls,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Globals.cls 7 Aug 2003 17:30:59 -0000 1.1 +++ Globals.cls 13 Oct 2003 04:49:03 -0000 1.2 @@ -43,10 +43,10 @@ '* '' -' This class contains global object factory and utility methods. +' This class contains global object factory and utility methods and constants. ' It is a global class so its routines in here can be accessed directly ' from the ActiveLock2 namespace. -' For example, the <code>NewInstance()</code> routine can be access via +' For example, the <code>NewInstance()</code> function can be access via ' <code>ActiveLock2.NewInstance()</code>. ' ' @author th...@us... @@ -56,7 +56,7 @@ '* /////////////////////////////////////////////////////////////////////// ' / MODULE TO DO LIST / ' /////////////////////////////////////////////////////////////////////// -' @todo GetLicTypeString() - Implement this fully. +' @todo GetLicTypeString(). Currently only supports "Single". Need to implement the rest. ' ' /////////////////////////////////////////////////////////////////////// @@ -72,6 +72,8 @@ ' - CreateProductLicense() to ignore Expiration date ' for Permanent license type ' 08.03.03 - th2tran - VBDox'ed this class. +' 10.13.03 - th2tran - Corrections to ActiveLockErrCodeConstants vbdox errors. +' - Added VB descriptions for VB Object Browser's sake. ' </pre> ' /////////////////////////////////////////////////////////////////////// ' / MODULE CODE BEGINS BELOW THIS LINE / @@ -79,20 +81,21 @@ Option Explicit '' -' ActiveLock Error Codes +' ActiveLock Error Codes. +' These error codes are used for <code>Err.Number</code> whenever ActiveLock raises an error. ' ' @param alerrOK No error. Operation was successful. ' @param alerrNoLicense No license available. ' @param alerrLicenseInvalid License is invalid. ' @param alerrLicenseExpired License has expired. ' @param alerrLicenseTampered License has been tampered. -' @param alerrClockChanged System as been set back. +' @param alerrClockChanged System clock has been set back. ' @param alerrKeyStoreInvalid Key Store Provider has not been initialized yet. -' @param alerrFileTampered License file has been tampered. +' @param alerrFileTampered ActiveLock DLL file has been tampered. ' @param alerrNotInitialized ActiveLock has not been initialized yet. Public Enum ActiveLockErrCodeConstants alerrOK = 0 ' successful - alerrNoLicense = &H80040001 ' vbObjectError (&H80040000) + 1 + alerrNoLicense = &H80040001 ' vbObjectError (&H80040000) + 1 alerrLicenseInvalid = &H80040002 alerrLicenseExpired = &H80040003 alerrLicenseTampered = &H80040004 @@ -103,10 +106,12 @@ End Enum '' -' Returns a new instance of an object that implements IActiveLock interface. +' Obtains a new instance of an object that implements IActiveLock interface. ' @param Args Optional list of parameters. +' @return ActiveLock interface. ' Public Function NewInstance(Optional Args As Variant) As IActiveLock 'TODO: Add parameters as appropriate +Attribute NewInstance.VB_Description = "Returns a new instance of an object that implements IActiveLock interface." Dim NewInst As IActiveLock Set NewInst = New ActiveLock With NewInst @@ -117,8 +122,8 @@ End Function '' -' Instantiates a new ProductLicense object. -' If LicType is "Permanent", then Expiration date parameter will be ignored. +' Instantiates a new ProductLicense object from the specified parameters. +' <p>If <code>LicType</code> is <i>Permanent</i>, then <code>Expiration</code> date parameter will be ignored. ' ' @param Name Product/Software Name ' @param Code Product/Software Code @@ -131,17 +136,19 @@ ' @param RegisteredDate Date on which the product is registered ' @param Hash1 Hash-1 code ' -Public Function CreateProductLicense(name As String, _ - Code As String, _ - Ver As String, _ - LicClass As ActiveLock2.ALLockTypes, _ - LicType As ActiveLock2.ALLicType, _ - Licensee As String, _ - Expiration As String, _ - Optional LicKey As String, _ - Optional RegisteredDate As String, _ - Optional Hash1 As String _ +' @return License object. +Public Function CreateProductLicense(ByVal name As String, _ + ByVal Code As String, _ + ByVal Ver As String, _ + ByVal LicClass As ActiveLock2.ALLockTypes, _ + ByVal LicType As ActiveLock2.ALLicType, _ + ByVal Licensee As String, _ + ByVal Expiration As String, _ + Optional ByVal LicKey As String, _ + Optional ByVal RegisteredDate As String, _ + Optional ByVal Hash1 As String _ ) As ProductLicense +Attribute CreateProductLicense.VB_Description = "Creates a new ProductLicense object." Dim NewLic As New ProductLicense With NewLic .ProductName = name @@ -194,44 +201,52 @@ End Function '' -' Trim Null characters from the string. +' Removes Null characters from the string. ' @param str String to be trimmed. -' -Public Function TrimNulls(str As String) As String +' @return Trimmed string. +Public Function TrimNulls(ByVal str As String) As String +Attribute TrimNulls.VB_Description = "Trim Null characters from the string." TrimNulls = modActiveLock.TrimNulls(str) End Function '' ' Computes an MD5 hash of the specified string. ' @param str String to be hashed. +' @return Computed hash code. ' -Public Function MD5Hash(str As String) As String +Public Function MD5Hash(ByVal str As String) As String +Attribute MD5Hash.VB_Description = "Computes an MD5 hash of the specified string." MD5Hash = modMD5.Hash(str) End Function '' -' Base-64 encode the specified string. +' Encodes a string using base64 encoding. ' @param str String to be encoded +' @return Encoded string. ' -Public Function Base64Encode(str As String) As String +Public Function Base64Encode(ByVal str As String) As String +Attribute Base64Encode.VB_Description = "Performs Base-64 encoding of the specified string." Base64Encode = modBase64.Base64_Encode(str) End Function '' -' Base-64 decode the string. +' Decodes a base64-encoded string. ' @param strEncoded String to be decoded +' @return Decoded string. ' -Public Function Base64Decode(strEncoded As String) As String +Public Function Base64Decode(ByVal strEncoded As String) As String +Attribute Base64Decode.VB_Description = "Performs Base-64 decoding of the specified string." Base64Decode = modBase64.Base64_Decode(strEncoded) End Function '' -' Performs RSA signing of strData using the specified key. -' @param strPub Public key blob -' @param strPriv Private key blob +' Performs RSA signing of <code>strData</code> using the specified key. +' @param strPub RSA Public key blob +' @param strPriv RSA Private key blob ' @param strData Data to be signed -' @return Signature string. +' @return Signature string. ' -Public Function RSASign(strPub As String, strPriv As String, strdata As String) As String +Public Function RSASign(ByVal strPub As String, ByVal strPriv As String, ByVal strdata As String) As String +Attribute RSASign.VB_Description = "Performs RSA signing of strData using the specified key." Dim Key As RSAKey ' create the key from the key blobs modActiveLock.rsa_createkey strPub, Len(strPub), strPriv, Len(strPriv), Key @@ -247,12 +262,13 @@ '' ' Verifies an RSA signature. -' @param strPub Public key blob +' @param strPub Public key blob ' @param strData Data to be signed -' @param strSig Private key blob -' @return Zero if verification is successful; Non-zero otherwise. +' @param strSig Private key blob +' @return Zero if verification is successful; Non-zero otherwise. ' Public Function RSAVerify(strPub As String, strdata As String, strSig As String) As Long +Attribute RSAVerify.VB_Description = "Verifies an RSA signature." Dim Key As RSAKey Dim rc& ' create the key from the public key blob Index: IActiveLock.cls =================================================================== RCS file: /cvsroot/activelock/activelock/src/IActiveLock.cls,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- IActiveLock.cls 22 Sep 2003 02:11:21 -0000 1.2 +++ IActiveLock.cls 13 Oct 2003 04:49:03 -0000 1.3 @@ -43,36 +43,44 @@ '* '' -' This is the main interface into ActiveLock. -' The user program interacts with ActiveLock via this IActiveLock interface. -' Typically, the user program would obtain an instance of this interface via the -' <code>ActiveLock2.NewInstance()</code> accessor method. From there, initialization calls are taken -' place, and then various method such as <code>Register()</code>, <code>Acquire()</code>, etc..., can be used. -' ActiveLock also sends event notifications to to the user program whenever it needs the -' user program's help to perform some action, such as parameter validation. These events -' are sent via the ActiveLockEventNotifier object, which can be obtained from IActiveLock_Notifier() -' accessor method. +' This is the main interface into ActiveLock's functionalities. +' The user application interacts with ActiveLock primarily through this IActiveLock interface. +' Typically, the application would obtain an instance of this interface via the +' <a href="Globals.NewInstance.html">ActiveLock2.NewInstance()</a> accessor method. From there, initialization calls are done, +' and then various method such as <a href="IActiveLock.Register.html">Register()</a>, <a href="IActiveLock.Acquire.html">Acquire()</a>, etc..., can be used. +' <p> +' ActiveLock also sends COM event notifications to the user application whenever it needs help to perform +' some action, such as license property validation/encryption. The user application can intercept +' these events via the ActiveLockEventNotifier object, which can be obtained from +' <a href="IActiveLock.Get.EventNotifier.html">IActiveLock.EventNotifier</a> property. +' <p> +' <b>Important Note</b><br> +' The user application is strongly advised to perform a checksum on the +' ActiveLock DLL prior to accessing and interacting with ActiveLock. Using the checksum, you can tell if +' the DLL has been tampered. Please refer to sample code below on how the checksumming can be done. +' <p> +' The sample code fragments below illustrate the typical usage flow between your application and ActiveLock. +' Please note that the code shown is only for illustration purposes and is not meant to be a complete +' compilable program. You may have to add variable declarations and function definitions around the code +' fragments before you can compile it. ' <p> -' <b>Important!</b> It is also strongly recommended that a checksum on ActiveLock2.dll be performed -' prior to accessing and interacting with ActiveLock. See sample code below on how it is done. -' <p> The sample code fragments below illustrate of how this interface is used. Please note that the code shown is -' only for illustration purposes and is not meant to be a complete compilable program. You may have to add -' variable declarations and function definitions around the code fragments before you can compile it. ' <pre> ' Form1.frm: ' ... ' Private MyActiveLock As ActiveLock2.IActiveLock ' Private WithEvents ActiveLockEventSink As ActiveLockEventNotifier -' Private Const AL_CRC& = 308603 ' ActiveLock2.dll's CRC checksum to be used for validation -'<br> -' '' This RSA private key will be used for data encryption and/or license key signing. -' Private Const PRIV_KEY$ = "AAAAgEPRFzhQEF7S91vt2K6kOcEdDDe5BfwNiEL30/+ozTFHc7cZctB8NIlS++ZR//D3AjSMqScjh7xUF/gwvUgGCjiExjj1DF/XWFWnPOCfF8UxYAizCLZ9fdqxb1FRpI5NoW0xxUmvxGjmxKwazIW4P4XVi/+i1Bvh2qQ6ri3whcsNAAAAQQCyWGsbJKO28H2QLYH+enb7ehzwBThqfAeke/Gv1Te95yIAWme71I9aCTTlLsmtIYSk9rNrp3sh9ItD2Re67SE7AAAAQQCAookH1nws1gS2XP9cZTPaZEmFLwuxlSVsLQ5RWmd9cuxpgw5y2gIskbL4c+4oBuj0IDwKtnMrZq7UfV9I5VfVAAAAQQCEnyAuO0ahXH3KhAboop9+tCmRzZInTrDYdMy23xf3PLCLd777dL/Y2Y+zmaH1VO03m6iOog7WLiN4dCL7m+Im" -' '' This RSA public key will be used as the product's software code. -' Private Const PUB_KEY$ = "AAAAB3NzaC1yc2EAAAABJQAAAIBZnXD4IKfrBH25ekwLWQMs5mJuNH7D7U99EKFIsVhKQv17GHxKWvxHv/FwWhI1Rmd8TCiqk4Wmk7H1rh6xdbIVBwDj+RSeiXs8mmQX4/XvaWZx9BIQr5wODWnQCH/tj6Y6In2Xjc2J3B7LSjD60cWDBY/u+z9cSheTHLyhb16zFw==" -'<br> -' ... +' Private Const AL_CRC& = 123+ ' ActiveLock2.dll's CRC checksum to be used for validation +' +' ' This key will be used to set <a href="IActiveLock.Let.SoftwareCode.html">IActiveLock.SoftwareCode</a> property. +' ' NOTE: This is NOT a complete key (complete key is to long to put in documentation). +' ' You will generate your own product code using ALUGEN. This is the <code>VCode</code> generated +' by ALUGEN. +' Private Const PROD_CODE$ = "AAAAB3NzaC1yc2EAAAABJQAAAIBZnXD4IKfrBH25ekwLWQMs5mJ..." +' +' .... +' ' Private Sub Form_Load() -' On Error GoTo Hell +' On Error GoTo ErrHandler ' ' Obtain an instance of AL ' Set MyActiveLock = ActiveLock2.NewInstance() ' ' Verify AL's authenticity @@ -81,91 +89,98 @@ ' ' So can't use MyActiveLock object to authenticate since it is not a public creatable object. ' ' So we'll use ActiveLock2.Globals, which is just as good because they are in the same DLL. ' Dim crc As Long -' crc = modActiveLock.CRCCheckSumTypeLib(New ActiveLock2.Globals) +' crc = CRCCheckSumTypeLib(New ActiveLock2.Globals) ' See below for CRCCheckSumTypeLib() implementation ' Debug.Print "Hash: " & crc ' If crc <> AL_CRC Then -' MsgBox "ActiveLock2.dll has been corrupted. If you were running a real application, it should terminate at this point." +' MsgBox "ActiveLock2.dll has been corrupted." +' End ' terminate ' End If -'<br> +' ' ' Initialize the keystore. We use a File keystore in this case. ' MyActiveLock.KeyStoreType = alsFile -' MyActiveLock.KeyStorePath = App.path & "\al.lic" -'<br> +' MyActiveLock.KeyStorePath = App.path & "\myapp.lic" +' ' ' Obtain the EventNotifier so that we can receive notifications from AL. ' Set ActiveLockEventSink = MyActiveLock.EventNotifier -'<br> +' ' ' Specify the name of the product that will be locked through AL. ' MyActiveLock.SoftwareName = "MyApp" -'<br> -' ' Specify our product code. This is a RSA public key, which will be used later by ActiveLock to validate license signatures -' MyActiveLock.SoftwareCode = "AAAAB3NzaC1yc2EAAAABJQAAAIBZnXD4IKfrBH25ekwLWQMs5mJuNH7D7U99EKFIsVhKQv17GHxKWvxHv/FwWhI1Rmd8TCiqk4Wmk7H1rh6xdbIVBwDj+RSeiXs8mmQX4/XvaWZx9BIQr5wODWnQCH/tj6Y6In2Xjc2J3B7LSjD60cWDBY/u+z9cSheTHLyhb16zFw==" -'<br> +' +' ' Specify our product code. This code will be used later by ActiveLock to validate license keys. +' MyActiveLock.SoftwareCode = PROD_CODE +' ' ' Specify product version ' MyActiveLock.SoftwareVersion = txtVersion -'<br> +' ' ' Specify License Type ' MyActiveLock.LicenseType = allicTimeLocked -'<br> +' ' ' Specify Lock Type ' MyActiveLock.LockType = lockHD -'<br> +' ' ' Now initialize AL ' MyActiveLock.Init -'<br> +' ' ' At this point, either AL has been initialized or an error would have already been raised -' ' if there were problems (such as the DLL has been tampered). -'<br> +' ' if there were problems (such as activelock2.dll having been tampered). +' ' ' Check registration status by calling Acquire() ' ' Note: Calling Acquire() may trigger ActiveLockEventNotifier_ValidateValue() event. -' ' So we must be prepared to handle that. +' ' So we should be prepared to handle that. ' MyActiveLock.Acquire -'<br> -' ' By now, if the product is not registered, then an error whould have been raised, +' +' ' By now, if the product is not registered, then an error would have been raised, ' ' which means if we get to here, then we're registered. -'<br> +' ' ' Just for fun, print out some registration status info ' Debug.Print "Used Days: " & MyActiveLock.UsedDays ' Debug.Print "Expiration Date: " & MyActiveLock.ExpirationDate ' Exit Sub -' Hell: +' ErrHandler: ' MsgBox Err.Number & ": " & Err.Description ' ' End program ' End ' End Sub ' ... -' ... -' ' -' ' ActiveLock raises this event typically when it needs a value to be encrypted. -' ' We can use any kind of encryption we'd like here, as long as it's deterministic. -' ' i.e. there's a one-to-one correspondence between unencrypted value and encrypted value. -' ' NOTE: BlowFish is NOT an example of deterministic encryption so you can't use it here. +' <p> +' (Optional) ActiveLock raises this event typically when it needs a value to be encrypted. +' We can use any kind of encryption we'd like here, as long as it's deterministic. +' i.e. there's a one-to-one correspondence between unencrypted value and encrypted value. +' NOTE: BlowFish is NOT an example of deterministic encryption so you can't use it here. +' You are allowed to use asymmetric algorithm since you will never be asked to decrypt a value, +' only to encrypt. +' You don't have to handle this event if you don't want to; it just means that the value WILL NOT +' be encrypted when it is saved to the keystore. +' ' Private Sub ActiveLockEventSink_ValidateValue(ByVal Value As String, Result As String) ' Result = Encrypt(Value) ' End Sub '<br> -' ' Encrypts a string. +' ' Roll our own simple-yet-weird encryption routine. +' ' Must keep in mind that our encryption algorithm must be deterministic. +' ' In other words, given the same uncrypted string, it must always yield the same encrypted string. ' Private Function Encrypt(strData As String) As String -' Dim Key As RSAKey -' ' create the key from the key blobs -' modActiveLock.rsa_createkey PUB_KEY, Len(PUB_KEY), PRIV_KEY, Len(PRIV_KEY), Key -'<br> -' ' sign the data using the created key -' Dim dLen& -' Dim strEnc As String * 255 -' strEnc = strData -' dLen = Len(strData) -' modActiveLock.rsa_encrypt 1, strEnc, dLen, Key -'<br> -' ' done with the key - throw it away -' modActiveLock.rsa_freekey Key -'<br> -' Dim strOut As String -' strOut = Left$(strEnc, dLen) -' Encrypt = strOut -' End Function +' Dim i&, n& +' dim sResult$ +' n = Len(strData) +' For i = 1 to n +' sResult = sResult & Asc(Mid$(strData, i, 1)) * 7 +' Next i +' Encrypt = sResult +' End Function +' ... +' ' Returns the CRC checksum of the activelock2.dll. +' Private Property Get ALCRC() As Long +' ' Don't just return a single value, but rather compute it using some simple arithmetic +' ' so that hackers can't easily find it with a hex editor. +' ' Of course, the values below will not make up the real checksum. For the most up-to-date +' ' checksum, please refer to the ActiveLock Release Notes. +' ALCRC = 123 + 456 +' End Property ' </pre> ' -' <p>Generating registration request code from the user application. +' <p>Generating registration code from the user application to be sent to the vendor in exchange for +' a liberation key. ' <pre> ' ' Generate Request code ' Dim strReq As String, strLock As String @@ -178,58 +193,6 @@ ' ' strReq2 now contains the request code to be sent to the vendor for activation. ' </pre> ' -' <p>Key Generator functionality - generating license key for a request code. -' <pre> -' ' First, take request code and decode it. -' Dim strReq As String -' strReq = ActiveLock2.Base64Decode(txtReqCodeIn) ' txtReqCodeIn is a textbox containing the input from the user -' ' strReq now contains the {LockCode + vbLf + User} string -' Dim strLock$, strUser$ -' -' ' Get Lock and user from request code -' Dim Index% -' Index = InStr(1, strReq, vbLf) -' If Index <= 0 Then Exit Sub -' -' strLock = Left(strReq, Index - 1) -' strUser = Mid$(strReq, Index + 1) -' strUser = TrimNulls(strUser) -' -' ' Compute expiration date for a 1-year license -' Dim strExpire$ -' strExpire = Format$(Now + 365, "YYYY/MM/DD") -' -' ' registration date -' Dim strRegDate As String -' strRegDate = Format(Now(), "yyyy/mm/dd") -' Dim strEncrypted As String -' -' ' Use the same encryption routine as ActiveLockEventSink_ValidateValue() event to encrypt the key -' ActiveLockEventSink_ValidateValue strRegDate, strEncrypted -' -' ' hash it -' strEncrypted = ActiveLock2.MD5Hash(strEncrypted) -' -' Dim Lic As ProductLicense -' Set Lic = ActiveLock2.CreateProductLicense("MyApp", PUB_KEY, -' "1.0", MyActiveLock.LockType, MyActiveLock.LicenseType, strUser, strExpire, , strRegDate, strEncrypted) -' Dim strLic As String -' ' encrypt Product license using LockCode -' strLic = MyActiveLock.LockCode(Lic) -' ' Sign it -' Dim strSig As String -' strSig = ActiveLock2.RSASign(PUB_KEY, PRIV_KEY, strLic) -' ' Create liberation key. This will be a base-64 encoded string of the whole license. -' Dim strLicKey As String -' strLicKey = ActiveLock2.Base64Encode(strSig) -' ' update Lic with license key -' Lic.LicenseKey = strLicKey -' ' Serialize it into a formatted string -' Dim strLibKey As String -' Lic.Save strLibKey -' Debug.Print "This is your liberation key: " & strLibKey -' </pre> -' ' <p>Key Registration functionality - register using a liberation key. ' <pre> ' On Error GoTo ErrHandler @@ -248,7 +211,7 @@ ' </pre> ' ' @author th...@us... -' @version 2.0.0 +' @version 2.0 ' @date 20030616 ' '* /////////////////////////////////////////////////////////////////////// @@ -264,7 +227,9 @@ ' 07.20.03 - th2tran - Added EventNotifier used for firing COM events. ' 08.03.03 - th2tran - VBDox'ed this interface. ' 09.21.03 - th2tran - Changed Register(Lic As ProductLicense) subroutine to Register(ByVal LibKey As String) -' +' 10.11.03 - th2tran - Major updates to VBDOX comments... +' - Removed VBDox regarding key generation, now taken care by ALUGEN. +' - Added VB doc Attributes for showing in VB Object Browser ' </pre> ' /////////////////////////////////////////////////////////////////////// @@ -274,9 +239,9 @@ Option Explicit '' -' License Types. Values are mutually exclusive. i.e. they cannot be OR'd together. +' License Types. Values are mutually exclusive. i.e. they cannot be OR'ed together. ' -' @param allicNone Not licensed +' @param allicNone No license enforcement ' @param allicPeriodic License expires after X number of days ' @param allicPermanent License will never expire ' @param allicTimeLocked License expires on a particular date @@ -325,6 +290,7 @@ alsFile = 1 End Enum +'* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Interface Properties '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' @@ -334,6 +300,7 @@ ' @param LicType License Type ' Public Property Let LicenseType(LicType As ALLicType) +Attribute LicenseType.VB_Description = "License Type being used in this instance." End Property @@ -349,12 +316,13 @@ ' @param LockTypes Lock Types. ' Public Property Let LockType(LockTypes As ALLockTypes) +Attribute LockType.VB_Description = "Lock type for this instance of ActiveLock." End Property '' ' Returns the Lock Type being used in this instance. -' +' @return Value corresponding to the lock type(s) being used. Public Property Get LockType() As ALLockTypes End Property @@ -364,6 +332,7 @@ ' @param sName Software Name ' Public Property Let SoftwareName(sName As String) +Attribute SoftwareName.VB_Description = "Name of the product being locked." End Property @@ -378,6 +347,7 @@ ' Specifies the software code (product code) ' @param sCode Software Code. Public Property Let SoftwareCode(sCode As String) +Attribute SoftwareCode.VB_Description = "software code (product code). This is Code1 generated by ALUGEN." End Property @@ -386,6 +356,7 @@ ' @param sVer Version string e.g. "1.0" ' Public Property Let SoftwareVersion(sVer As String) +Attribute SoftwareVersion.VB_Description = "Version of the product being locked." End Property @@ -401,15 +372,19 @@ ' @param KeyStore Key Store Type. ' Public Property Let KeyStoreType(KeyStore As LicStoreType) +Attribute KeyStoreType.VB_Description = "Specifies the key store (e.g. registry or file)." End Property '' ' Specifies the key store path. ' @param Path The path to be used for the specified KeyStoreType. -' e.g. If <code>alsFile</code> is used for <code>KeyStoreType</code>, then Path specifies the path to the license file. -' If <code>alsRegistry</code> is used for <code>KeyStoreType</code>, the Path specifies the Registry hive where license information is stored. -Public Property Let KeyStorePath(path As String) +' e.g. If <a href="IActiveLock.LicStoreType.html">alsFile</a> is used for <a href="IActiveLock.Let.KeyStoreType.html">KeyStoreType</a>, +' then <code>Path</code> specifies the path to the license file. +' If <a href="IActiveLock.LicStoreType.html">alsRegistry</a> is used for <a href="IActiveLock.Let.KeyStoreType.htm">KeyStoreType</a>, +' the Path specifies the Registry hive where license information is stored. +Public Property Let KeyStorePath(sPath As String) +Attribute KeyStorePath.VB_Description = "Specifies the path where the license store resides." End Property @@ -423,43 +398,49 @@ ' Optionally, if a product license is specified, then a lock string specific to that license is returned. ' @param Lic Product License for which to compute the lock code. Public Function LockCode(Optional Lic As ProductLicense = Nothing) As String +Attribute LockCode.VB_Description = "Computes a lock code corresponding to the specified Lock Types, License Class, etc... Optionally, if a product license is specified, then a lock string specific to that license is returned." End Function '' -' Registers the following product license. +' Registers the product using the specified liberation key. ' @param LibKey Liberation Key. Public Sub Register(ByVal LibKey As String) +Attribute Register.VB_Description = "Registers the product using the specified liberation key." End Sub '' ' Transfers the current license to another computer. -' Returns the liberation key tailored for the other request code. ' @param RequestCode Request Code generated from the other computer. -' +' @return The liberation key tailored for the request code generated from the other machine. Public Function Transfer(RequestCode As String) As String +Attribute Transfer.VB_Description = "Transfers the current license to another computer." End Function '' -' Performs special initialization before we start operating. Some of the routines, including <code>Acquire()</code> -' and <code>Register()</code> requires Init() to be called first. +' Initializes ActiveLock before use. Some of the routines, including <a href="IActiveLock.Acquire.html">Acquire()</a> +' and <a href="IActiveLock.Register.html">Register()</a> requires <code>Init()</code> to be called first. ' This routine accepts varying number of parameters. +' Note: If you're accessing IActiveLock via <a href="Globals.NewInstance.html">ActiveLock2.NewInstance()</a>, +' then Init() would already been called for you, so you don't need to call it again. ' ' @param Arg1 First parameter to be passed to this routine. ' @param OtherArgs The remaining array of arguments to be passed into this routine. Public Sub Init(Arg1 As Variant, ParamArray OtherArgs() As Variant) +Attribute Init.VB_Description = "Initializes ActiveLock. This routine must be called before anything else." End Sub '' ' Acquires a valid license token. -' If no valid license can be found, an appropriate error will be thrown, specifying the cause. +' If no valid license can be found, an appropriate error will be raised, specifying the cause. ' Public Sub Acquire() +Attribute Acquire.VB_Description = "Attempts to acquire a valid license token." End Sub @@ -467,15 +448,18 @@ ' Release the acquired token. ' Public Sub Release() +Attribute Release.VB_Description = "Release the acquired license token. This call is only required when concurrent license is being used." End Sub '' ' Retrieves the event notifier. ' Client applications uses this Notifier to handle event notifications sent by ActiveLock, -' including license validation events. +' including license property validation and encryption events. ' @see ActiveLockEventNotifier for more information. +' @return An object that can be used as a COM event source. i.e. can be used in <code>WithEvents</code> statements in VB. Public Property Get EventNotifier() As ActiveLockEventNotifier +Attribute EventNotifier.VB_Description = "Returns the Event Notifier object used by ActiveLock to broadcast COM events." End Property @@ -483,19 +467,24 @@ ' Returns the number of days this product has been used since its registration. ' Public Property Get UsedDays() As Long +Attribute UsedDays.VB_Description = "Returns the number of days this product has been used since its registration." End Property '' -' Returns the date on which the product was registered. +' Retrieves registration date. +' @return Date on which the product is registered. ' Public Property Get RegisteredDate() As String +Attribute RegisteredDate.VB_Description = "Returns the date on which the product was registered." End Property '' -' Returns the expiration date string. +' Retrieves the expiration date. +' @return Date on which the license will expire. ' Public Property Get ExpirationDate() As String +Attribute ExpirationDate.VB_Description = "Returns the expiration date of the current license." End Property Index: ProductLicense.cls =================================================================== RCS file: /cvsroot/activelock/activelock/src/ProductLicense.cls,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- ProductLicense.cls 7 Aug 2003 17:30:59 -0000 1.1 +++ ProductLicense.cls 13 Oct 2003 04:49:03 -0000 1.2 @@ -61,9 +61,10 @@ ' / MODULE CHANGE LOG / ' /////////////////////////////////////////////////////////////////////// ' <pre> -' 06.16.03 - th2tran - created +' 06.16.03 - th2tran - Created ' 07.07.03 - mecrute - Updated the header comments for this file. ' 08.03.03 - th2tran - VBDox'ed this class. +' 10.12.03 - th2tran - Added VB doc Attributes for showing in VB Object Browser ' </pre> @@ -108,8 +109,10 @@ '' ' Returns the product name. +' @return Product Name ' Public Property Get ProductName() As String +Attribute ProductName.VB_Description = "Returns the product name." ProductName = mstrProductName End Property @@ -122,8 +125,10 @@ '' ' Returns the product version string. +' @return Product Version ' Public Property Get ProductVer() As String +Attribute ProductVer.VB_Description = "Returns the product version string." ProductVer = mstrProductVer End Property @@ -135,11 +140,13 @@ ' @param Key Product Key ' Public Property Let ProductKey(Key As String) +Attribute ProductKey.VB_Description = "Product Key." mstrProductKey = Key End Property '' ' Returns the product key. +' @return Product Key (aka SoftwareCode) ' Public Property Get ProductKey() As String ProductKey = mstrProductKey @@ -154,8 +161,10 @@ '' ' Returns the license type. +' @return License Type ' Public Property Get LicenseType() As String +Attribute LicenseType.VB_Description = "License Type string." LicenseType = mstrType End Property @@ -168,8 +177,10 @@ '' ' Returns the license class string. +' @return License Class ' Public Property Get LicenseClass() As String +Attribute LicenseClass.VB_Description = "License class." LicenseClass = mstrLicenseClass End Property @@ -182,8 +193,10 @@ '' ' Returns the person or organization registered to this license. +' @return Registered User ' Public Property Get Licensee() As String +Attribute Licensee.VB_Description = "Person or organization registered to this license." Licensee = mstrLicensee End Property @@ -195,11 +208,13 @@ ' @param Key New license key to be updated. ' Public Property Let LicenseKey(Key As String) +Attribute LicenseKey.VB_Description = "License key." mstrLicenseKey = Key End Property '' ' Returns the license key. +' @return License key ' Public Property Get LicenseKey() As String LicenseKey = mstrLicenseKey @@ -214,16 +229,20 @@ End Property '' -' Returns the expiration date string. +' Returns the expiration date string in YYYY/MM/DD format. +' @return Expiration date ' Public Property Get Expiration() As String +Attribute Expiration.VB_Description = "expiration date string in YYYY/MM/DD format." Expiration = mstrExpiration End Property '' -' Returns the date on which the product was registered. +' Returns the date in YYYY/MM/DD format on which the product was registered. +' @return Registered date ' Public Property Get RegisteredDate() As String +Attribute RegisteredDate.VB_Description = "Date, in YYYY/MM/DD string format, on which the product was registered." RegisteredDate = mstrRegisteredDate End Property @@ -235,9 +254,11 @@ End Property '' -' Returns the last date and time the product was run. +' Returns the date and time, in YYYY/MM/DD HH:MM:SS format, when the product was last run. +' @return DateTime string ' Public Property Get LastUsed() As String +Attribute LastUsed.VB_Description = "The date and time, in YYYY/MM/DD HH:MM:SS format, when the product was last run." LastUsed = mstrLastUsed End Property @@ -251,8 +272,10 @@ '' ' Returns Hash-1 code. Hash-1 code is the encryption hash of the <code>LastUsed</code> property. +' @return Hash Code ' Public Property Get Hash1() As String +Attribute Hash1.VB_Description = "Returns Hash-1 code. Hash-1 code is the encryption hash of the LastUsed property." Hash1 = mstrHash1 End Property @@ -267,8 +290,10 @@ '' ' Returns a line-feed delimited string encoding of this object's properties ' Note: LicenseKey is not included in this string. +' @return License String ' Public Function ToString() As String +Attribute ToString.VB_Description = "Returns a line-feed delimited string encoding of this object's properties." ToString = ProductName & vbCrLf & _ ProductVer & vbCrLf & _ ProductKey & vbCrLf & _ @@ -280,10 +305,11 @@ End Function '' -' Loads the license from a formatted string. +' Loads the license from a formatted string created from <a href="ProductLicense.Save.html">Save()</a>. ' @param strLic Formatted license string, delimited by CrLf characters. ' Public Sub Load(strLic As String) +Attribute Load.VB_Description = "Loads the license from a formatted string created by Save() method." ' First, base64-decode it strLic = modBase64.Base64_Decode(strLic) Dim arrParts() As String @@ -304,6 +330,7 @@ ' @param strOut [out] Formatted license string will be saved into this parameter when the routine returns. ' Public Sub Save(strOut As String) +Attribute Save.VB_Description = "Saves the license into a formatted string." strOut = ToString() & vbCrLf & LicenseKey 'add License Key at the end strOut = modBase64.Base64_Encode(strOut) End Sub |
From: Thanh H. T. <th...@ya...> - 2003-10-13 03:10:18
|
Hello Clockmaker, Interesting. Just 1 week after 2.0.2 was posted, you've managed to = crack it...And here we are about to release 2.0.3 (this will be Alpha = 2). I have yet to look at your upload, but I'd be curious to see how = you've done it. =20 Now be honest. :-) If you didn't have access to ALTestApp's source = code, would you have known what to patch in ALTestApp.exe? - Thanh ----- Original Message -----=20 From: uhrschmied=20 To: Act...@ya...=20 Sent: Sunday, October 12, 2003 1:45 PM Subject: [ActiveLock] Security issue on ActiveLock.dll 2.0.0.2 (I'm not able to attach files in the new ActiveLock board, so I try=20 it here ) Hi, I just downloaded ActiveLock-2.0.2.exe from ActiveLock.org forum, to=20 get an impression about the control. Needless to say that the prior=20 versions 1.x where more or less unsafe ( liberation key + lenght=20 shown in plain text etc. ). The developers made a good job on encryption, but again - the=20 implementation is lousy. I just uploaded ActiveLock 2.02.rar to files section, containing a=20 patched activelock2.dll ver. 2.0.0.2 and a patched ALTestApp.exe=20 from the same installation. The source of ALTestApp.exe was NOT=20 modified, I used the compiled version, provided with the=20 installation. There was only one byte to patch in each file, to get=20 an licensed application ( one for the Aquire method, one for the CRC=20 check of the dll ). It took me somewhat about 15 min, including the=20 time to load the debugger. That's NOT an issue of an alpha version or so. The app status=20 depends again on 'is a bit set or not'.=20 If somebody from dev team is interested, I can provide more detailed=20 information about the weak points I've found. Guys don't be=20 frustrated, I'm an expirienced reverser for many years =20 regards Clockmaker Yahoo! Groups Sponsor=20 ADVERTISEMENT =20 =20 =20 To unsubscribe from this group, send an email to: Act...@ya... Visit the group website at: http://groups.yahoo.com/group/ActiveLock Get the latest version of Active Lock at: = http://groups.yahoo.com/group/ActiveLock/files=20 Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.=20 |
From: Thanh H. T. <th...@sy...> - 2003-10-11 00:20:50
|
Mike/Dan, How are you doing with the doc? I can start on it if you're busy, but I don't want to duplicate the effort if you already have something going. Let me know. - Thanh |
From: Thanh H. T. <th...@sy...> - 2003-10-08 03:05:34
|
Hey Mads, Glad to hear you're still with us. Thanks in advance for your help. If you find any bug, please log it in SF. Mike: How's the user guide template coming? - Thanh ----- Original Message ----- From: "sdmad m" <sd...@ho...> To: <act...@li...> Sent: Tuesday, October 07, 2003 6:24 PM Subject: Re: [ActiveLock-Development] Weekly Development Builds > Hi Guys! > > Finally I understand some of ActiveLock 2.x. > I have downloaded and installed ActiveLock-2.0.2. > Example is working grate on my system (after re-compiling it). I guess it's > a little to late to join in the development, but I guess I can do lot in > testing of the app. I have configured a multi OS PC now, with both Norwegian > and US English languages. I will test some example apps on clean OS > installations. Any error found will be reported. > > PS! Still not familiar with CSV.... > > Regards > Mads > > > > > >From: "Thanh Hai Tran" <th...@sy...> > >Reply-To: act...@li... > >To: <act...@li...> > >Subject: [ActiveLock-Development] Weekly Development Builds > >Date: Mon, 6 Oct 2003 01:52:13 -0400 > > > >All, > >As agreed in tonight's meeting, we will be doing weekly dev builds of our > >CVS codetree and post it on SF's download area for the members of the team, > >who are CVS-challenged :-), to use in testing and documentation. You can > >download it on our SF project download section under the "Development > >Builds (unstable)" package. > >http://sourceforge.net/project/showfiles.php?group_id=70007&release_id=1891 29 > > > >We would like to get feedback from the rest of the dev team before the > >public release. So please....download, install it, and let's get some > >discussion going. > > > >Cheers, > >------------- > >Thanh Hai Tran > >ActiveLock Development Team Member > > _________________________________________________________________ > Last ned nye MSN Messenger 6.0 gratis http://www.msn.no/computing/messenger > - Den raskeste veien mellom deg og dine venner > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Activelock-Development mailing list > Act...@li... > https://lists.sourceforge.net/lists/listinfo/activelock-development |
From: sdmad m <sd...@ho...> - 2003-10-07 22:24:57
|
Hi Guys! Finally I understand some of ActiveLock 2.x. I have downloaded and installed ActiveLock-2.0.2. Example is working grate on my system (after re-compiling it). I guess it's a little to late to join in the development, but I guess I can do lot in testing of the app. I have configured a multi OS PC now, with both Norwegian and US English languages. I will test some example apps on clean OS installations. Any error found will be reported. PS! Still not familiar with CSV.... Regards Mads >From: "Thanh Hai Tran" <th...@sy...> >Reply-To: act...@li... >To: <act...@li...> >Subject: [ActiveLock-Development] Weekly Development Builds >Date: Mon, 6 Oct 2003 01:52:13 -0400 > >All, >As agreed in tonight's meeting, we will be doing weekly dev builds of our >CVS codetree and post it on SF's download area for the members of the team, >who are CVS-challenged :-), to use in testing and documentation. You can >download it on our SF project download section under the "Development >Builds (unstable)" package. >http://sourceforge.net/project/showfiles.php?group_id=70007&release_id=189129 > >We would like to get feedback from the rest of the dev team before the >public release. So please....download, install it, and let's get some >discussion going. > >Cheers, >------------- >Thanh Hai Tran >ActiveLock Development Team Member _________________________________________________________________ Last ned nye MSN Messenger 6.0 gratis http://www.msn.no/computing/messenger - Den raskeste veien mellom deg og dine venner |
From: SourceForge.net <no...@so...> - 2003-10-06 06:12:36
|
Task #83818 has been updated. Project: ActiveLock Subproject: ActiveLock 2.0-alpha2 Summary: Setup program Complete: 100% Status: Open Authority : th2tran Assigned to: th2tran, mcrute Description: We need an installer for ActiveLock. We will use NSIS for this(http://nsis.sourceforge.net) Follow-Ups: ------------------------------------------------------- Date: 2003-10-06 06:12 By: th2tran Comment: Done and available in 2.0.2. ------------------------------------------------------- For more info, visit: http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=83818&group_id=70007&group_project_id=31123 |
From: SourceForge.net <no...@so...> - 2003-10-06 06:10:12
|
Task #83282 has been updated. Project: ActiveLock Subproject: ActiveLock 2.0-alpha2 Summary: ActiveLock Universal Generator (ALUGEN) Complete: 100% Status: Open Authority : th2tran Assigned to: wizzardme2000, th2tran Description: Universal Key Generator allows the developer to generate/maintain product code and license keys for all of their products (not just one). More detailed specs to follow. Follow-Ups: ------------------------------------------------------- Date: 2003-10-06 06:10 By: th2tran Comment: Done. And available in 2.0.2. PM to verify and close. ------------------------------------------------------- Date: 2003-09-15 17:15 By: th2tran Comment: Basic framework and GUI layout are there. Product key (i.e. SoftwareCode) generation and storage is working. Next: Need to work on license key generation. ------------------------------------------------------- Date: 2003-08-16 20:37 By: th2tran Comment: Moved to alpha2 task list. ------------------------------------------------------- Date: 2003-08-08 23:35 By: th2tran Comment: Functional spec added in: http://www.activelock.org/boards/index.php?showtopic=45 For implementation discussion (developers only), go to: http://www.activelock.org/boards/index.php?act=ST&f=13&t=46 ------------------------------------------------------- Date: 2003-08-06 23:16 By: th2tran Comment: Make that ALUGEN...sounds cooler. :-) ------------------------------------------------------- For more info, visit: http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=83282&group_id=70007&group_project_id=31123 |
From: Thanh H. T. <th...@sy...> - 2003-10-06 05:52:19
|
All, As agreed in tonight's meeting, we will be doing weekly dev builds of = our CVS codetree and post it on SF's download area for the members of = the team, who are CVS-challenged :-), to use in testing and = documentation. You can download it on our SF project download section = under the "Development Builds (unstable)" package. http://sourceforge.net/project/showfiles.php?group_id=3D70007&release_id=3D= 189129 We would like to get feedback from the rest of the dev team before the = public release. So please....download, install it, and let's get some = discussion going.=20 Cheers, ------------- Thanh Hai Tran ActiveLock Development Team Member |
From: Thanh H. T. <th...@us...> - 2003-10-06 05:28:18
|
Update of /cvsroot/activelock/installer In directory sc8-pr-cvs1:/tmp/cvs-serv30753 Modified Files: ActiveLock.nsi Log Message: Changed my mind (yet again). alcrypto.dll now goes in the Windows directory. Index: ActiveLock.nsi =================================================================== RCS file: /cvsroot/activelock/installer/ActiveLock.nsi,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ActiveLock.nsi 5 Oct 2003 08:46:41 -0000 1.2 +++ ActiveLock.nsi 6 Oct 2003 05:28:14 -0000 1.3 @@ -13,6 +13,13 @@ ; *** IMPORTANT NOTE: alcrypto.dll MUST reside in the same directory ; as activelock2.dll. ; - Added ALUGEN files +; - OK. Forget what I said above today. alcrypto.dll now resides in +; the Windows directory. The API declare of modActiveLock.bas assumes +; that the dll is either in the PATH or in the current working directory. +; So if we don't put it in the PATH (WINDIR is in the PATH by default), +; then we have to put alcrypto.dll in the same directory as alugen.exe, +; ALTestApp.exe, which doesn't sound too bad since they all reside in the +; bin directory, but will cause you pains when you start debugging. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -108,16 +115,19 @@ ; Binary files go to "bin" directory SetOutPath $INSTDIR\Bin SetOverwrite on + File ${AL_SRC_ROOT}\bin\alutil.dll File ${AL_SRC_ROOT}\bin\activelock2.dll File ${AL_SRC_ROOT}\src\activelock2.chm ;File ${AL_SRC_ROOT}\Examples\Example1\ALTestApp.exe - ; ALCrypto.dll goes to Windows System32 directory - ;SetOutPath $SYSDIR - ;SetOverwrite on + ; ALCrypto.dll goes to Windows directory + SetOutPath $WINDIR + SetOverwrite on File ${AL_SRC_ROOT}\bin\alcrypto.dll ; ALUGEN files + SetOutPath $INSTDIR\Bin + SetOverwrite on File ${ALUGEN_ROOT}\lib\alugen.dll File ${ALUGEN_ROOT}\app\alugen.exe File ${ALUGEN_ROOT}\app\products.ini @@ -134,8 +144,7 @@ Section "Examples" SecExample SectionIn 1 2 3 ; Required files by the examples - SetOutPath $INSTDIR\Src\ActiveLock - File ${AL_SRC_ROOT}\src\modActiveLock.bas + ;File ${AL_SRC_ROOT}\src\modActiveLock.bas -- don't need this anymore SetOutPath $INSTDIR\Examples\Example1 File ${AL_SRC_ROOT}\Examples\Example1\ALTestApp.vbp @@ -174,7 +183,7 @@ SectionIn 1 DetailPrint "Extracting ActiveLock source code...." SetDetailsPrint textonly - SetOutPath $INSTDIR\Src\ActiveLock + SetOutPath $INSTDIR\Src File ${AL_SRC_ROOT}\src\ActiveLock2.vbp File ${AL_SRC_ROOT}\src\*.cls File ${AL_SRC_ROOT}\src\*.bas |
From: Thanh H. T. <th...@us...> - 2003-10-06 05:17:30
|
Update of /cvsroot/activelock/activelock In directory sc8-pr-cvs1:/tmp/cvs-serv29739 Modified Files: _build.bat Log Message: Added compile step for ALTestApp Index: _build.bat =================================================================== RCS file: /cvsroot/activelock/activelock/_build.bat,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- _build.bat 5 Oct 2003 08:53:43 -0000 1.2 +++ _build.bat 6 Oct 2003 05:17:26 -0000 1.3 @@ -18,7 +18,8 @@ rem -------- ------------- --------------------------------------------------------- rem 08.14.03 - th2tran - Created rem 10.05.03 - th2tran - Added compile steps for ALUGEN and building the setup -rem +rem - Added compile steps for Examples +rem - Sent vb compile output to build.log rem =================================================================================== rem Usage: To run a build of ActiveLock, run the following command: @@ -31,7 +32,8 @@ rem * Running _build specifying any target will run a complete build SETLOCAL -rem Test +rem Delete previous VB compilation log file +del build.log if %1 == installer goto installer if %1 == docs goto docs @@ -56,24 +58,22 @@ rem echo Unregistering activelock2.dll... rem regsvr32 /s /u src\activelock2.dll rem echo Compiling activelock2.dll... -rem vb6.exe /make src\ActiveLock2.vbp +rem vb6.exe /make src\ActiveLock2.vbp /out build.log rem Pause the build now to allow user to update sample app with new ActiveLock2.dll checksum rem TODO: implement echo Unregistering alugen.dll... regsvr32 /s /u ..\alugen\lib\alugen.dll echo Compiling alugen.dll... -vb6.exe /make ..\alugen\lib\ALUGENLib.vbp - -echo Unregistering alugen.dll... -regsvr32 /s /u ..\alugen\lib\alugen.dll -echo Compiling alugen.dll... -vb6.exe /make ..\alugen\lib\ALUGENLib.vbp -move ..\alugen\lib\alugen.dll bin\ +vb6.exe /make ..\alugen\lib\ALUGENLib.vbp /out build.log +rem move ..\alugen\lib\alugen.dll bin\ echo Compiling alugen.exe... -vb6.exe /make ..\alugen\app\ALUGEN.vbp -move ..\alugen\app\alugen.exe bin\ +vb6.exe /make ..\alugen\app\ALUGEN.vbp /out build.log +rem move ..\alugen\app\alugen.exe bin\ + +echo Compiling Examples +vb6.exe /make examples\example1\ALTestApp.vbp /out build.log if %1 == compile goto done |
From: Thanh H. T. <th...@us...> - 2003-10-06 05:11:30
|
Update of /cvsroot/activelock/activelock/bin In directory sc8-pr-cvs1:/tmp/cvs-serv29040 Modified Files: activelock2.dll Log Message: alcrypto checksumming now must assume that alcrypto.dll resides in the Windows directory instead of the current working directory, because it is a shared dll (used by activelock.dll and alugen.dll) that must be in one common place. Index: activelock2.dll =================================================================== RCS file: /cvsroot/activelock/activelock/bin/activelock2.dll,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 Binary files /tmp/cvsFHAc5c and /tmp/cvswWtXFh differ |
From: Thanh H. T. <th...@us...> - 2003-10-06 05:09:35
|
Update of /cvsroot/activelock/activelock/src In directory sc8-pr-cvs1:/tmp/cvs-serv28819 Modified Files: ActiveLock.cls modWinApi.bas Log Message: alcrypto checksumming now must assume that alcrypto.dll resides in the Windows directory instead of the current working directory, because it is a shared dll (used by activelock.dll and alugen.dll) that must be in one common place. Index: ActiveLock.cls =================================================================== RCS file: /cvsroot/activelock/activelock/src/ActiveLock.cls,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ActiveLock.cls 5 Oct 2003 08:38:07 -0000 1.3 +++ ActiveLock.cls 6 Oct 2003 05:09:29 -0000 1.4 @@ -76,6 +76,10 @@ ' 08.21.03 - th2tran - Added #If directive in IActiveLock_Init() to bypass dll authentication when ' running from inside VB. This makes debugging a bit easier. ' - Refactored IActiveLock_LockCode() +' 10.06.03 - th2tran - For ALCrypto checksumming, we must put alcrypto.dll in the Windows directory +' instead of the working directory. Otherwise, users will have to put alcrypto.dll in +' each of their apps' working directory, which is OK if they only have 1 app, +' but not so OK when multiple apps are involved. ' </pre> ' /////////////////////////////////////////////////////////////////////// @@ -120,11 +124,11 @@ GoTo Done #End If ' Checksum ALCrypto.dll - Const ALCRYPTO_MD5$ = "d41d8cd98f00b204e9800998ecf8427e" + Const ALCRYPTO_MD5$ = "1941fefd79fed9403e24f3d7fd76ae13" Dim strdata As String, strMD5 As String - Call modActiveLock.ReadFile(App.path & "\alcrypto.dll", strdata) + Call modActiveLock.ReadFile(WinDir() & "\alcrypto.dll", strdata) strMD5 = modMD5.Hash(strdata) ' use our own MD5 hashing routine instead of ALCrypto's md5_hash() function. -Debug.Print "ActiveLock Hash: " & strMD5 +Debug.Print "ALCrypto Hash: " & strMD5 If strMD5 <> ALCRYPTO_MD5 Then Err.Raise ActiveLockErrCodeConstants.alerrFileTampered, "IActiveLock_Acquire", "alcrypto.dll has been tampered." End If @@ -172,7 +176,7 @@ Dim strSig As String Dim strLic As String Dim strLicKey As String - + strLic = IActiveLock_LockCode(Lic) strLicKey = Lic.LicenseKey @@ -297,7 +301,7 @@ Private Sub IActiveLock_Register(ByVal LibKey As String) Dim Lic As New ActiveLock2.ProductLicense Lic.Load LibKey - + ' Validate that the license key. ' - registered user ' - expiry date @@ -348,9 +352,9 @@ If mLockTypes And lockWindows Then AppendLockString strLock, modWindowsSerial.GetWindowsSerial() End If - + If Left(strLock, 1) = vbLf Then strLock = Mid(strLock, 2) - + If Lic Is Nothing Then IActiveLock_LockCode = strLock ElseIf strLock <> "" Then Index: modWinApi.bas =================================================================== RCS file: /cvsroot/activelock/activelock/src/modWinApi.bas,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- modWinApi.bas 7 Aug 2003 17:30:59 -0000 1.1 +++ modWinApi.bas 6 Oct 2003 05:09:29 -0000 1.2 @@ -52,7 +52,8 @@ ' / MODULE CHANGE LOG / ' /////////////////////////////////////////////////////////////////////// ' -' 07.07.03 - MEC - Updated the header comments for this file. +' 07.07.03 - mecrute - Updated the header comments for this file. +' 10.06.03 - th2tran - Added WinDir() ' ' ' /////////////////////////////////////////////////////////////////////// @@ -71,6 +72,9 @@ Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF Public Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long +Public Declare Function GeneralWinDirApi Lib "kernel32" _ + Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _ + ByVal nSize As Long) As Long '' ' Retrieves the error text for the specified Windows error code @@ -78,7 +82,7 @@ Public Function WinError(ByVal lLastDLLError As Long) As String Dim sBuff As String Dim lCount As Long - + ' Return the error message associated with LastDLLError: sBuff = String$(256, 0) lCount = FormatMessage( _ @@ -87,5 +91,17 @@ If lCount Then WinError = Left$(sBuff, lCount) End If +End Function + +'' +' Gets the windows directory +' +Public Function WinDir() As String + Const FIX_LENGTH% = 4096 + Dim Length As Integer + Dim Buffer As String * FIX_LENGTH + + Length = GeneralWinDirApi(Buffer, FIX_LENGTH - 1) + WinDir = Left$(Buffer, Length) End Function |
From: Thanh H. T. <th...@us...> - 2003-10-06 03:51:15
|
Update of /cvsroot/activelock/activelock/examples/example1 In directory sc8-pr-cvs1:/tmp/cvs-serv19572 Modified Files: modMain.bas Log Message: Corrected checksum matching activelock2.dll in \bin directory. Index: modMain.bas =================================================================== RCS file: /cvsroot/activelock/activelock/examples/example1/modMain.bas,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- modMain.bas 5 Oct 2003 08:36:26 -0000 1.4 +++ modMain.bas 6 Oct 2003 03:51:11 -0000 1.5 @@ -312,7 +312,7 @@ ' Returns the expected CRC value of ActiveLock2.dll ' Private Property Get Value() As Long - Value = 135035 + 1792 ' 136827 - computed so that it can't be easily spotted via a Hex Editor + Value = 139926 + 1792 ' 141718 - computed so that it can't be easily spotted via a Hex Editor End Property '' |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:53:50
|
Update of /cvsroot/activelock/activelock In directory sc8-pr-cvs1:/tmp/cvs-serv29131 Modified Files: _build.bat Log Message: Added steps for compiling ALUGEN and building the setup. Please refer to instructions at the beginning of this file for running the build. Index: _build.bat =================================================================== RCS file: /cvsroot/activelock/activelock/_build.bat,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- _build.bat 15 Aug 2003 19:04:12 -0000 1.1 +++ _build.bat 5 Oct 2003 08:53:43 -0000 1.2 @@ -13,37 +13,92 @@ rem 6. Add NSIS directory to your PATH rem =================================================================================== rem -rem REVISION HISTORY rem =================================================================================== +rem REVISION HISTORY +rem -------- ------------- --------------------------------------------------------- rem 08.14.03 - th2tran - Created +rem 10.05.03 - th2tran - Added compile steps for ALUGEN and building the setup rem +rem =================================================================================== +rem Usage: To run a build of ActiveLock, run the following command: +rem > _build <target> +rem Examples: +rem * To run the installer, use: +rem _build installer +rem * To build API documentation, use: +rem _build docs +rem * Running _build specifying any target will run a complete build SETLOCAL -rem Build ActiveLock2.dll -rem Make sure we unregister it before rebuilding, so that we don't leave old junk old version stuff in the Registry -echo Unregistering ActiveLock2.dll... -regsvr32 /s /u src\ActiveLock2.dll -echo Building ActiveLock2.dll... +rem Test +if %1 == installer goto installer +if %1 == docs goto docs + +rem ========================================================================================= +rem Compile ActiveLock Libraries +rem ========================================================================================= +rem alutil.dll +rem Make sure we unregister it before rebuilding, so that we don't leave junk old version stuff in the Registry +echo Unregistering alutil.dll... +regsvr32 /s /u ..\bin\alutil.dll +echo Compiling alutil.dll... rem Need to make sure vb6.exe is in our system PATH -vb6.exe /make src\ActiveLock2.vbp +vb6.exe /make ..\alutil\ActiveLockUtil.vbp +echo Copying autil.dll to bin\ directory +copy ..\alutil\alutil.dll bin\ + +rem Skip ActiveLock2.dll compilation. +rem Because of the checksum, you'll need to compile this manually and update the Test App CRC checksum accordingly +rem before you run this build. +echo ActiveLock2.dll compilation skipped. +rem echo Unregistering activelock2.dll... +rem regsvr32 /s /u src\activelock2.dll +rem echo Compiling activelock2.dll... +rem vb6.exe /make src\ActiveLock2.vbp rem Pause the build now to allow user to update sample app with new ActiveLock2.dll checksum rem TODO: implement +echo Unregistering alugen.dll... +regsvr32 /s /u ..\alugen\lib\alugen.dll +echo Compiling alugen.dll... +vb6.exe /make ..\alugen\lib\ALUGENLib.vbp + +echo Unregistering alugen.dll... +regsvr32 /s /u ..\alugen\lib\alugen.dll +echo Compiling alugen.dll... +vb6.exe /make ..\alugen\lib\ALUGENLib.vbp +move ..\alugen\lib\alugen.dll bin\ + +echo Compiling alugen.exe... +vb6.exe /make ..\alugen\app\ALUGEN.vbp +move ..\alugen\app\alugen.exe bin\ + +if %1 == compile goto done + +rem ========================================================================================= +rem Build API Documentation +rem ========================================================================================= +:docs echo Deleting old vbdox files... del /f /q /s vbdox\*.* -echo Building vbdox help files... +echo Compiling vbdox help files... vbdox -q -o ..\..\vbdox -rm VBDOXEXT.clsReportManagerNET -dp VBDOXEXT.clsDocParserJ src\vbdox\ActiveLock2.vbp - rem Build .chm using HTMLHelp Workshop echo Building ActiveLock2.chm... hhc vbdox\help.hhp rem Move ActiveLock2.chm out of vbdox directory into src directory (same dir where dll is) move vbdox\ActiveLock2.chm src\ +if %1 == docs goto done -rem TODO: Run Installer - +rem ========================================================================================= +rem Build the Installer +rem ========================================================================================= +:installer +echo Building the ActiveLock Installer... +makensis ..\installer\ActiveLock.nsi +:done echo Build Completed! pause ENDLOCAL |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:46:46
|
Update of /cvsroot/activelock/installer In directory sc8-pr-cvs1:/tmp/cvs-serv28318 Modified Files: ActiveLock.nsi Log Message: Now includes ALUGEN files. Index: ActiveLock.nsi =================================================================== RCS file: /cvsroot/activelock/installer/ActiveLock.nsi,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- ActiveLock.nsi 15 Aug 2003 21:02:25 -0000 1.1 +++ ActiveLock.nsi 5 Oct 2003 08:46:41 -0000 1.2 @@ -6,18 +6,26 @@ ; 08.14.03 - th2tran - Created. Works against NSIS 1.9 ; - Installs ALCrypto.dll and ActiveLock2.dll in the WinSys dir ; instead of \bin directory. +; 10.05.03 - th2tran - I changed my mind again, alcrypto goes to \bin directory +; along with other dlls and exes. The reason I moved it to WinSys +; before was because I was thinking that the user application may +; make use of it as well activelock dll. But it's not likely. +; *** IMPORTANT NOTE: alcrypto.dll MUST reside in the same directory +; as activelock2.dll. +; - Added ALUGEN files ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; !define VER_MAJOR 2 -!define VER_MINOR 0a2 +!define VER_MINOR 0.2 !define AL_SRC_ROOT "..\activelock" !define ALCRYPTO_ROOT "..\alcrypto" +!define ALUGEN_ROOT "..\alugen" !define ASC "ActiveLock Software Group" ;-------------------------------- ;Configuration -OutFile ..\ActiveLock-${VER_MAJOR}${VER_MINOR}.exe +OutFile ..\ActiveLock-${VER_MAJOR}.${VER_MINOR}.exe SetCompressor bzip2 InstType "Full (w/ Source and Doc)" @@ -41,7 +49,7 @@ ;Modern UI Configuration !define MUI_PRODUCT "ActiveLock" - !define MUI_VERSION "2.0a2" + !define MUI_VERSION "2.0.2" !define MUI_NAME "ActiveLock ${MUI_VERSION}" ;Installer name @@ -97,15 +105,23 @@ File "${AL_SRC_ROOT}\License.txt" File "${AL_SRC_ROOT}\Docs\ReleaseNotes.htm" - ; Binaries go to the Windows System directory - SetOutPath $SYSDIR + ; Binary files go to "bin" directory + SetOutPath $INSTDIR\Bin SetOverwrite on - File ${AL_SRC_ROOT}\src\ActiveLock2.dll - File ${AL_SRC_ROOT}\src\ActiveLock2.chm + File ${AL_SRC_ROOT}\bin\activelock2.dll + File ${AL_SRC_ROOT}\src\activelock2.chm ;File ${AL_SRC_ROOT}\Examples\Example1\ALTestApp.exe ; ALCrypto.dll goes to Windows System32 directory - File ${AL_SRC_ROOT}\src\ALCrypto.dll + ;SetOutPath $SYSDIR + ;SetOverwrite on + File ${AL_SRC_ROOT}\bin\alcrypto.dll + + ; ALUGEN files + File ${ALUGEN_ROOT}\lib\alugen.dll + File ${ALUGEN_ROOT}\app\alugen.exe + File ${ALUGEN_ROOT}\app\products.ini + SectionEnd Section "Documentation" SecDoc @@ -130,6 +146,7 @@ File ${AL_SRC_ROOT}\Examples\Example1\atViewPort.ctx File ${AL_SRC_ROOT}\Examples\Example1\atDisplay.RES File ${AL_SRC_ROOT}\Examples\Example1\al.lic + File ${AL_SRC_ROOT}\Examples\Example1\ALTestApp.exe SectionEnd !ifndef NO_STARTMENUSHORTCUTS @@ -157,7 +174,7 @@ SectionIn 1 DetailPrint "Extracting ActiveLock source code...." SetDetailsPrint textonly - SetOutPath $INSTDIR\Src + SetOutPath $INSTDIR\Src\ActiveLock File ${AL_SRC_ROOT}\src\ActiveLock2.vbp File ${AL_SRC_ROOT}\src\*.cls File ${AL_SRC_ROOT}\src\*.bas @@ -176,18 +193,34 @@ File ${ALCRYPTO_ROOT}\*.c File ${ALCRYPTO_ROOT}\*.h SectionEnd + Section "ActiveLock Universal GENerator" SecSrcALUGEN + SectionIn 1 + DetailPrint "Extracting ALUGEN source code...." + SetDetailsPrint textonly + SetOutPath $INSTDIR\Src\ALUGEN\lib + File ${ALUGEN_ROOT}\lib\*.cls + File ${ALUGEN_ROOT}\lib\*.bas + File ${ALUGEN_ROOT}\lib\ALUGENLib.vbp + File ${ALUGEN_ROOT}\lib\alugen.dll + SetOutPath $INSTDIR\Src\ALUGEN\app + File ${ALUGEN_ROOT}\app\*.fr* + File ${ALUGEN_ROOT}\app\products.ini + File ${ALUGEN_ROOT}\app\ALUGEN.vbp + SectionEnd SubSectionEnd Section -post SetOutPath $INSTDIR - RegDLL "$SYSDIR\ActiveLock2.dll" + RegDLL "$INSTDIR\bin\alutil.dll" + RegDLL "$INSTDIR\bin\activelock2.dll" + RegDLL "$INSTDIR\bin\alugen.dll" WriteRegStr HKLM "SOFTWARE\${ASC}\ActiveLock2" "" $INSTDIR WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock2" "UninstallString" "$INSTDIR\uninst.exe" WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock2" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock" "DisplayName" "ActiveLock Licensing System" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock" "DisplayIcon" "$INSTDIR\ActiveLock2.dll,0" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock" "DisplayIcon" "$INSTDIR\bin\activelock2.dll,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock" "DisplayVersion" "${MUI_VERSION}" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock" "VersionMajor" "${VER_MAJOR}" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock" "VersionMinor" "${VER_MINOR}" @@ -220,9 +253,10 @@ !insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "The core files required to use ActiveLock" !insertmacro MUI_DESCRIPTION_TEXT ${SecExample} "Example applications that show you how to use ActiveLock" - !insertmacro MUI_DESCRIPTION_TEXT ${SecSrc} "Source code to ActiveLock and all related files" - !insertmacro MUI_DESCRIPTION_TEXT ${SecSrcAL} "Source code to ActiveLock" - !insertmacro MUI_DESCRIPTION_TEXT ${SecSrcALCrypto} "Source code to ALCrypto" + !insertmacro MUI_DESCRIPTION_TEXT ${SecSrc} "Source code for ActiveLock and all related files" + !insertmacro MUI_DESCRIPTION_TEXT ${SecSrcAL} "Source code for ActiveLock" + !insertmacro MUI_DESCRIPTION_TEXT ${SecSrcALCrypto} "Source code for ALCrypto" + !insertmacro MUI_DESCRIPTION_TEXT ${SecSrcALUGEN} "Source code for ALUGEN" !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} "ActiveLock Documentation (API docs, Usage Guide, etc..)" !insertmacro MUI_DESCRIPTION_TEXT ${SecIcons} "Creates Start Menu shortcuts." !insertmacro MUI_FUNCTIONS_DESCRIPTION_END @@ -246,11 +280,13 @@ ;Uninstaller Section Section Uninstall - IfFileExists $SYSDIR\ActiveLock2.dll skip_confirmation + IfFileExists $INSTDIR\bin\activelock2.dll skip_confirmation MessageBox MB_YESNO "It does not appear that ActiveLock is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)" IDYES skip_confirmation Abort "Uninstall aborted by user" skip_confirmation: - UnRegDLL "$SYSDIR\ActiveLock2.dll" + UnRegDLL "$INSTDIR\bin\alutil.dll" + UnRegDLL "$INSTDIR\bin\activelock2.dll" + UnRegDLL "$INSTDIR\bin\alugen.dll" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ActiveLock" DeleteRegKey HKLM "SOFTWARE\${ASC}\ActiveLock2" |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:44:23
|
Update of /cvsroot/activelock/activelock/src In directory sc8-pr-cvs1:/tmp/cvs-serv27924 Modified Files: ActiveLock2.vbp Log Message: - now using alutil.dll - change dll name to all lowercase. This will be our file naming convention. - use dll in ..\bin\ for binary compatibility Index: ActiveLock2.vbp =================================================================== RCS file: /cvsroot/activelock/activelock/src/ActiveLock2.vbp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ActiveLock2.vbp 22 Sep 2003 02:14:14 -0000 1.2 +++ ActiveLock2.vbp 5 Oct 2003 08:44:19 -0000 1.3 @@ -1,5 +1,6 @@ Type=OleDll Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#stdole2.tlb#OLE Automation +Reference=*\G{9AC9BB25-D182-447E-8398-D8A8F40DE906}#1.0#0#..\bin\alutil.dll#ActiveLockUtil Class=ActiveLock; ActiveLock.cls Class=IActiveLock; IActiveLock.cls Class=Globals; Globals.cls @@ -11,7 +12,6 @@ Module=modMD5; modMd5.bas Module=modSHA1; modSha1.bas Module=modRegistryAPIs; modRegistryAPIs.bas -Class=INIFile; INIFile.cls Module=modWinApi; modWinApi.bas Class=ActiveLockEventNotifier; ActiveLockEventNotifier.cls Module=modActiveLock; modActiveLock.bas @@ -22,12 +22,12 @@ Startup="(None)" HelpFile="ActiveLock2.chm" Title="ActiveLock2" -ExeName32="ActiveLock2.dll" +ExeName32="activelock2.dll" Command32="" Name="ActiveLock2" HelpContextID="0" CompatibleMode="2" -CompatibleEXE32="ActiveLock2.dll" +CompatibleEXE32="..\bin\activelock2.dll" VersionCompatible32="1" MajorVer=2 MinorVer=0 @@ -37,7 +37,6 @@ VersionCompanyName="The ActiveLock Software Group" VersionLegalCopyright="Copyright © 2003" VersionProductName="ActiveLock" -CondComp="AL_DEBUG = 1" CompilationType=0 OptimizationType=0 FavorPentiumPro(tm)=0 |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:40:22
|
Update of /cvsroot/activelock/activelock/src In directory sc8-pr-cvs1:/tmp/cvs-serv27540 Modified Files: modActiveLock.bas Log Message: Minor change - declare statements to use alcrypto.dll (all lowercase) Index: modActiveLock.bas =================================================================== RCS file: /cvsroot/activelock/activelock/src/modActiveLock.bas,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- modActiveLock.bas 7 Aug 2003 17:30:59 -0000 1.1 +++ modActiveLock.bas 5 Oct 2003 08:40:18 -0000 1.2 @@ -89,21 +89,21 @@ ' @param bits key length in bits ' @param pfn TBD ' @param pfnparam TBD -Public Declare Function rsa_generate Lib "ALCrypto" (ptrKey As RSAKey, ByVal bits As Long, ByVal pfn As Long, ByVal pfnparam As Long) As Long +Public Declare Function rsa_generate Lib "alcrypto" (ptrKey As RSAKey, ByVal bits As Long, ByVal pfn As Long, ByVal pfnparam As Long) As Long '' ' Returns the public key blob fro the specified key. ' @param ptrKey RSA key structure ' @param blob [Output] Key bob to be returned ' @param blobLen Length of the key blob, in bytes -Public Declare Function rsa_public_key_blob Lib "ALCrypto" (ptrKey As RSAKey, ByVal blob As String, blobLen As Long) As Long +Public Declare Function rsa_public_key_blob Lib "alcrypto" (ptrKey As RSAKey, ByVal blob As String, blobLen As Long) As Long '' ' Returns the private key blob fro the specified key. ' @param ptrKey RSA key structure ' @param blob [Output] Key bob to be returned ' @param blobLen Length of the key blob, in bytes -Public Declare Function rsa_private_key_blob Lib "ALCrypto" (ptrKey As RSAKey, ByVal blob As String, blobLen As Long) As Long +Public Declare Function rsa_private_key_blob Lib "alcrypto" (ptrKey As RSAKey, ByVal blob As String, blobLen As Long) As Long '' ' Creates a new RSAKey from the specified key blobs. @@ -113,11 +113,11 @@ ' @param priv_len Length of private key blob, in bytes ' @param ptrKey [out] RSA key to be returned. ' -Public Declare Function rsa_createkey Lib "ALCrypto" (ByVal pub_blob As String, ByVal pub_len As Long, ByVal priv_blob As String, ByVal priv_len As Long, ptrKey As RSAKey) As Long +Public Declare Function rsa_createkey Lib "alcrypto" (ByVal pub_blob As String, ByVal pub_len As Long, ByVal priv_blob As String, ByVal priv_len As Long, ptrKey As RSAKey) As Long '' ' Release memory allocated by rsa_createkey() to store the key. ' @param ptrKey RSA key -Public Declare Function rsa_freekey Lib "ALCrypto" (ptrKey As RSAKey) As Long +Public Declare Function rsa_freekey Lib "alcrypto" (ptrKey As RSAKey) As Long '' ' RSA encrypts the data. @@ -126,7 +126,7 @@ ' @param dLen [in/out] Length of data, in bytes. This parameter will contain length of encrypted data when returned. ' @param ptrKey Key to be used for encryption ' -Public Declare Function rsa_encrypt Lib "ALCrypto" (ByVal CryptType As Long, ByVal data As String, dLen As Long, ptrKey As RSAKey) As Long +Public Declare Function rsa_encrypt Lib "alcrypto" (ByVal CryptType As Long, ByVal data As String, dLen As Long, ptrKey As RSAKey) As Long '' ' RSA decrypts the data. @@ -135,7 +135,7 @@ ' @param dLen [in/out] Length of data, in bytes. This parameter will contain length of encrypted data when returned. ' @param ptrKey Key to be used for encryption ' -Public Declare Function rsa_decrypt Lib "ALCrypto" (ByVal CryptType As Long, ByVal data As String, dLen As Long, ptrKey As RSAKey) As Long +Public Declare Function rsa_decrypt Lib "alcrypto" (ByVal CryptType As Long, ByVal data As String, dLen As Long, ptrKey As RSAKey) As Long '' ' Signs the data using the specified RSA private key. @@ -144,7 +144,7 @@ ' @param dLen Data length ' @param sig [out] Signature ' @param sLen Signature length -Public Declare Function rsa_sign Lib "ALCrypto" (ByRef ptrKey As RSAKey, ByVal data As String, ByVal dLen As Long, ByVal sig As String, ByRef sLen As Long) As Long +Public Declare Function rsa_sign Lib "alcrypto" (ByRef ptrKey As RSAKey, ByVal data As String, ByVal dLen As Long, ByVal sig As String, ByRef sLen As Long) As Long '' ' Verifies an RSA signature. @@ -153,14 +153,14 @@ ' @param sLen Signature length ' @param data Data with which to verify ' @param dLen Data length -Public Declare Function rsa_verifysig Lib "ALCrypto" (ByRef ptrKey As RSAKey, ByVal sig As String, ByVal sLen As Long, ByVal data As String, ByVal dLen As Long) As Long +Public Declare Function rsa_verifysig Lib "alcrypto" (ByRef ptrKey As RSAKey, ByVal sig As String, ByVal sLen As Long, ByVal data As String, ByVal dLen As Long) As Long '' ' Computers an MD5 hash from the data. ' @param inData Data to be hashed ' @param nDataLen Length of inData ' @param outData [out] 32-byte Computed hash code -Public Declare Function md5_hash Lib "ALCrypto" (ByVal inData As String, ByVal nDataLen As Long, ByVal outData As String) As Long +Public Declare Function md5_hash Lib "alcrypto" (ByVal inData As String, ByVal nDataLen As Long, ByVal outData As String) As Long Type PhaseType exponential As Byte |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:38:18
|
Update of /cvsroot/activelock/activelock/src In directory sc8-pr-cvs1:/tmp/cvs-serv27250 Modified Files: ActiveLock.cls Log Message: Minor change - new alcrypto.dll checksum Index: ActiveLock.cls =================================================================== RCS file: /cvsroot/activelock/activelock/src/ActiveLock.cls,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ActiveLock.cls 22 Sep 2003 02:11:21 -0000 1.2 +++ ActiveLock.cls 5 Oct 2003 08:38:07 -0000 1.3 @@ -46,6 +46,10 @@ ' This is an implementation of IActiveLock. It is not public-creatable, and so must only ' be accessed via ActiveLock.NewInstance() method. ' +' NOTE: If you want to turn off dll-checksumming, add this compilation flag to the Project Properties (Make tab) +' AL_DEBUG = 1 +' +' ' @author th...@us... ' @version 2.0.0 ' @date 20030616 @@ -116,12 +120,13 @@ GoTo Done #End If ' Checksum ALCrypto.dll - Const ALCRYPTO_MD5$ = "67874c0aabab26ec19f5a2cad84595ef" + Const ALCRYPTO_MD5$ = "d41d8cd98f00b204e9800998ecf8427e" Dim strdata As String, strMD5 As String - Call modActiveLock.ReadFile(App.path & "\ALCrypto.Dll", strdata) + Call modActiveLock.ReadFile(App.path & "\alcrypto.dll", strdata) strMD5 = modMD5.Hash(strdata) ' use our own MD5 hashing routine instead of ALCrypto's md5_hash() function. +Debug.Print "ActiveLock Hash: " & strMD5 If strMD5 <> ALCRYPTO_MD5 Then - Err.Raise ActiveLockErrCodeConstants.alerrFileTampered, "IActiveLock_Acquire", "ALCrypto.dll has been tampered." + Err.Raise ActiveLockErrCodeConstants.alerrFileTampered, "IActiveLock_Acquire", "alcrypto.dll has been tampered." End If Done: mfInit = True |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:36:31
|
Update of /cvsroot/activelock/activelock/examples/example1 In directory sc8-pr-cvs1:/tmp/cvs-serv27053 Modified Files: frmMain.frm modMain.bas Log Message: Minor change - new activelock2.dll checksum Index: frmMain.frm =================================================================== RCS file: /cvsroot/activelock/activelock/examples/example1/frmMain.frm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- frmMain.frm 22 Sep 2003 04:03:52 -0000 1.3 +++ frmMain.frm 5 Oct 2003 08:36:26 -0000 1.4 @@ -58,10 +58,12 @@ TabCaption(1) = "Sample App" TabPicture(1) = "frmMain.frx":0CE6 Tab(1).ControlEnabled= 0 'False - Tab(1).Control(0)= "Frame1" + Tab(1).Control(0)= "fraViewport" Tab(1).Control(1)= "fraTicker" - Tab(1).Control(2)= "fraViewport" - Tab(1).ControlCount= 3 + Tab(1).Control(2)= "Frame1" + Tab(1).Control(3)= "lblLockStatus2" + Tab(1).Control(4)= "lblLockStatus" + Tab(1).ControlCount= 5 Begin VB.Frame fraViewport BorderStyle = 0 'None Height = 400 @@ -92,7 +94,7 @@ Height = 1890 Left = -74880 TabIndex = 32 - Top = 420 + Top = 780 Width = 7575 Begin VB.TextBox txtTicker Height = 1200 @@ -115,10 +117,10 @@ End Begin VB.Frame Frame1 BorderStyle = 0 'None - Height = 2775 + Height = 2535 Left = -74865 TabIndex = 20 - Top = 2580 + Top = 2820 Width = 6615 Begin VB.OptionButton optForm Caption = "System Tray" @@ -295,6 +297,15 @@ TabIndex = 4 Top = 420 Width = 7695 + Begin VB.TextBox txtChecksum + BackColor = &H80000013& + Height = 285 + Left = 1560 + Locked = -1 'True + TabIndex = 40 + Top = 1680 + Width = 4335 + End Begin VB.TextBox txtVersion BackColor = &H80000013& Height = 285 @@ -342,6 +353,14 @@ Top = 840 Width = 4335 End + Begin VB.Label Label3 + Caption = "DLL Checksum:" + Height = 255 + Left = 120 + TabIndex = 41 + Top = 1680 + Width = 1335 + End Begin VB.Label Label2 Caption = "App Version:" Height = 255 @@ -383,6 +402,31 @@ Width = 975 End End + Begin VB.Label lblLockStatus2 + Caption = "Disabled" + BeginProperty Font + Name = "MS Sans Serif" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 375 + Left = -71880 + TabIndex = 39 + Top = 480 + Width = 975 + End + Begin VB.Label lblLockStatus + Caption = "Application Functionalities Are Currently: " + Height = 375 + Left = -74880 + TabIndex = 38 + Top = 480 + Width = 2895 + End End End Attribute VB_Name = "frmMain" @@ -424,6 +468,10 @@ '' ' This test app is used to exercise all functionalities of ActiveLock. ' +' If you're running this from inside VB and would like to bypass dll-checksumming, +' Add the following compilation flag to your Project Properties (Make tab) +' AL_DEBUG = 1 +' ' @author th2tran ' @version 2.0.0 ' @date 20030715 @@ -629,6 +677,11 @@ lblHost.Enabled = flag optForm(0).Enabled = flag optForm(1).Enabled = flag + If flag Then + lblLockStatus2 = "Enabled" + Else + lblLockStatus2 = "Disabled (Registration Required)" + End If End Property Private Sub optForm_Click(Index As Integer) Index: modMain.bas =================================================================== RCS file: /cvsroot/activelock/activelock/examples/example1/modMain.bas,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- modMain.bas 22 Sep 2003 03:05:01 -0000 1.3 +++ modMain.bas 5 Oct 2003 08:36:26 -0000 1.4 @@ -299,12 +299,11 @@ ' Returns the checksum. ' Public Function VerifyActiveLockdll(obj As IUnknown) As String - Const AL_CRC& = 175936 ' ActiveLock2.dll's CRC checksum to be used for comparison Dim crc As Long crc = modActiveLock.CRCCheckSumTypeLib(obj) Debug.Print "Hash: " & crc If crc <> Value Then - MsgBox "ActiveLock2.dll has been corrupted. If you were running a real application, it should terminate at this point." + MsgBox "activelock2.dll has been corrupted. If you were running a real application, it should terminate at this point." End If VerifyActiveLockdll = CStr(crc) End Function @@ -313,7 +312,7 @@ ' Returns the expected CRC value of ActiveLock2.dll ' Private Property Get Value() As Long - Value = 176608 + 1856 ' 178464 - computed so that it can't be easily spotted via a Hex Editor + Value = 135035 + 1792 ' 136827 - computed so that it can't be easily spotted via a Hex Editor End Property '' |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:33:00
|
Update of /cvsroot/activelock/activelock/examples/example1 In directory sc8-pr-cvs1:/tmp/cvs-serv26657 Removed Files: ALTestApp.exe Log Message: Removed - this exe doesn't need to be in CVS. --- ALTestApp.exe DELETED --- |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:31:40
|
Update of /cvsroot/activelock/activelock/bin In directory sc8-pr-cvs1:/tmp/cvs-serv26520 Added Files: ActiveLockGroup.vbg ExamplesGroup.vbg Log Message: VB Group used by developers (not redistributable). I put it here because some project requires the DLL to be in the current working directory. So if you launch the group from here, you'll be fine. --- NEW FILE: ActiveLockGroup.vbg --- VBGROUP 5.0 StartupProject=..\src\ActiveLock2.vbp --- NEW FILE: ExamplesGroup.vbg --- VBGROUP 5.0 StartupProject=..\examples\example1\ALTestApp.vbp |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:28:41
|
Update of /cvsroot/activelock/activelock/src In directory sc8-pr-cvs1:/tmp/cvs-serv26170 Removed Files: ActiveLock2.dll ALCrypto.dll Log Message: Moved to ..\bin\ directory --- ActiveLock2.dll DELETED --- --- ALCrypto.dll DELETED --- |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:27:52
|
Update of /cvsroot/activelock/activelock/bin In directory sc8-pr-cvs1:/tmp/cvs-serv26025 Added Files: activelock2.dll alcrypto.dll alutil.dll Log Message: Initial addition to \bin\. This will be the new common directory for all binary compatible libraries. --- NEW FILE: activelock2.dll --- MZ $ Sfs fá¬fÇf{¶fff³fÊff-£f<fPGfÄf5¢fÌffîHf¦¢fÝIf~b f[Ff¡ÿfŤfef5Ìfbf*¦fc³ fLÌf¼f * 0 ' / ProductLicense 0 µI;oAõ4ÒG¶wϬÒx!=ûüú h§8 êC:\WINDOWS\System32\msvbvm60.dll\3 *|JÑÝÈDà¿Ù¨ql*Dÿ¢¼@®rUNBTÆ ValidateValue ç þ Mèÿ¤ Mèÿ¨ Mèÿ¨ ´ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¤ Mèÿ¨ Mèÿ¨ Mìÿ¨ Mìÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¤ Mèÿ¤ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ D$] QM Pp2I¸ QM Pp2I¸ Mìÿ¨ ÿ 3ÒI\$0T$3ÒÛD$1T$,3ÒÝ\$ÝD$Ü ÿX ÿÿUììhö MÄÿ¨ ëöEüt Mäÿ¨ Mèÿ¨ Mèÿ¨ Mèÿ¨ MExÿÿÿJMÜQÇ pÿÿÿTi MÜÿ ÿ( ^ a *¼ :@§'KýZ° ;;;;";(;.;4;:;@;F;L;R;X;^;d;j;p;v;|;;;;;; ;¦;¬;²;¸;¾;Ä;Ê;Ð;Ö;Ü;â;è;î;ô;ú; >>>>">(>.>4>:>@>F>L>R>X>^>d>j>p>v>|>>>>>> >¦>¬>²>¸>¾>Ä>Ê>Ð>Ö>Ü>â>è>î>ô>ú>?? 99909@9J99¥9Ä9Í9Ò9Þ9ç9ì9ø9:::: :+:W:u:}:::£:×:õ:;$;/;g; ;¯;´;¿;÷;<?<D<O<<¥<Ï<Ô<ß<=5=y===¬=·=Ð=å=ÿ=>/>9>D>T>o>>¬>Æ>Ë>Ü>ì>ü> ?G?e??¤?¸?Ã?Î? 3N3_3 3°3¸3ù3 4444<4F4Q4a4q4§4Å4ñ4ù4555%5-5X5l55·5Ø5-686@6Q6k6q6³6»6Ä6Í6å6ø677&7.7:7E7N7f77µ7ç7í788*828;8K8V8\8{88¬8Æ8Î8×8â8è89989R9Z9c9n9t999Ä9Þ9æ9ï9ú9 55,5R5W5k5t555±5Ç5å5ì5 66 6&6G6V6\6666Å6Ô6Ú6777F7K777Ø78b8§8ì819v9É9 ;;8;R;Z;`;;°;¹;å; 99+9;9K9X99¥9Ô9Þ9ä9û9::*:3:H:Y:b:r:: --- NEW FILE: alcrypto.dll --- MZ $ ò!Yò!Yò!Y¯¯*Yó!Yq/Yç!Y¯¯+Y¢!Y2Yõ!Yò Y®!Y¯+Yû!Y¯*Yó!Y5'Yó!Y %Yó!YRichò!Y IfùfwäÃVt$3ÀfL ùu%L$(IL$(y|$ÇD$( D$;ÁÇD$( Ifùfwä í~Í3ÀûÑéó«Éfó«SèZ$ D$(t$ëD$(3ÉfLhþfthþL$L$,I;ét3öfthT$3ÉfhÁâÊ3ÒÁ÷÷3ÒØÁ÷÷D$¯ÃÊÁáÎ;ÁvKáÿÿ f;ÁvG+ÈD$f îêHD$uÐ;|$tMT$43ÀJÿ É|?T$0t$(JÍNt$4t$3ÿ3öf:f1øêé7t$fAÁèNt$uÙKD$8 Àt L$,t$4|$<+Í+ÎÁáÏQSPè Hf= Hf= ;T$,~T$,L$0BÆ;Ñ~´fT$,_^]f[ÄÃ_f(^][ÄÃD$L$j Hf= D$f0ë3À+È+Êf Òf÷Ðtf;ÈÒBëf;ÁÒ÷Úf Ét\$3ÉCfÆ;Ù~D$ fT$PfèðèÿÿÄÇ_^][ÄÃD$ _^][ÄÃD$Ç ÁãÓX×\$,Ú÷Óï#Ù#êÝl$,Ýêó¯|Ư|õÁãÁîÞpÚt$ó#ë÷Ö#÷õl$õñ*ÆGÆ*Æ úÖþï#×÷Õ#éêP êT$HÝØiÃØÁêÁãÓ×ê÷Õß#î#ÚëX$ë\$Dͯ÷ Ïx0Î|$8L$0#l$0÷Ñ#ËÍÏÑH4L$(º"Â"kÁçÁêúT$0úêÏ#ï÷Ñ#ÎÍl$(ÍÙqýÃq ÞñÚ#óît$$îýê·b%öÇb%ÁîÁç÷|$Pó#û#îýl$<ýù@³@ÀÇ@³@ ø\$Áþ÷ÐÇ3ÆÃ\$Ч# ÁêúÑþ÷Ò×3ÖÓ\$$Â}ôïÿ}ô ÁèÇù÷ׯø3þû\$(úC£ÇC ÇùÆ÷×ø3þý×l$Dº»Ò D$T$¹ FNPQëVFRPUèÌÿÿvÄÎN ÉØtVSèØÿÿÄGÖN ÒuìSè×ÿÿÀL$ âUÂÁøè*ËÿÿSè$ËÿÿÄ_^][ÃD$ ÀD$HQuPD$RPèËÿÿÄÃPD$RPèËÿÿÄÃSVt$WFPèP×ÿÿNøQèE×ÿÿ\SèËòÿÿVøRèàÖÿÿÁøFPèÒÖÿÿÁøGNQèÃÖÿÿÁøGVRè´ÖÿÿGFOPQèØÿÿVÀÇRPèõ×ÿÿD$@Ä,Ç_^[ÃVt$F Àt Pè.ÊÿÿÄF Àt PèÊÿÿÄF Àt PèÊÿÿÄv öt VèòÿÿÄ^ÃìSUl$VWEPèÖÿÿÀMâQÂØÁûèÖÿÿÀ|$(âwÂÆ è^ÀÿÿSèXÀÿÿÄ$3À_^[ ÿÿÿÄÃD$jPh`GhÀGèêþÿÿÄÃD$L$RT$RQPh HhHè D$T$¹ è¸ Pèê j èg 3ÀÇIuøãu D$[^_ÃD$ø øtøuVTøUøNTuIVXÇFX ÿtÀ û@tÈÿë{VuVçþè. ÿ AúÐ|Ñ^Ãè»ýÿÿ=I u} ëj © SPè % øuè +MðñMøÁþNþ?~j?^;÷ LüëMøuðÑN L2üuô Éy>u;°OuMü; ¨Ou%°O } SQ»6MKCkY[ ÐÿÿYF0 ÀtPèüÏÿÿYF8 ÀtPèîÏÿÿYF@ ÀtPèàÏÿÿYFD ÀtPèÒÏÿÿYFP=¸7tPèÁÏÿÿYVèºÏÿÿYj ¡ NÆ$ À$Á ÃH÷ØÀÀõPÿpÀ NëNCû|ÿ5 Oÿ¸À ú t?ú t:} @8uû@8uö+Ç@èUèQÈÿÿðY;óu3öëUWVèõÿÿÄWÿÄÀ uÿEðÆ jèÖÿÿYëVÿ×E_^[]ÃUìE Àu]Ã=ôJ ÿlÀ B8ÙtÑÉtQ÷ ¿ÿþþ~Á÷3Ëðùñÿðÿ3Ï3ÆÂá Àuõ^[_3ÀÃF8ðuë~ÿaät(Æ8àuÄAÀtfÿÁ8àtßë±3À^[_ÂéÓþÿÿGÿ^[_ÃÇ^[_ÃUìWVSMã&Ù}÷3Àò®÷ÙËþuó¦Fÿ3É:GÿwtII÷ÑÁ[^_ÉÃÌÌÌÌÌÌÌÌT$L$ ÒtG3ÀD$Wùúr-÷Ùát+ÑGIuúÈÁàÁÈÁàÁÊâÁétó« ÒtGJuúD$_ÃD$ÃUììSVWjèqÍÿÿÿuè ¶À;Áw+ȼìþÿÿA¸ ÙÁéó«ËáóªBBBÿÀuÐ_[j jèÅÇÿÿYëVÿ×D$_^[ÃUìQ=ôJ jj #EÉÃUìjÿh Àt&:au% ätÁè:Au Àt:auÁ äuÒÿ3ÀÃÀÑà@Ãÿ÷ Àtà÷ ÀtÊ:auÉ ätÁÁëÌÌÌÌÌÌÌÌÌÌÌÌUìV3ÀPPPPPPPPUI ÀtB«$ëóuÉÿA ÀtF£$sòÁÄ ^ÉÃÌÌUìV3ÀPPPPPPPPUI ÀtB«$ëóu Àt F£$sóFÿÄ ^ÉÃVt$;5 Os8ÎÆÁùà NÀöDtWVètøÿÿVè( ÿlÀ Àt.F'G8Ätò,A<Éá ÁAà,A<Éá ÁA8àtÒÀÿ¾ÀëxðÿTL=PL Àt'FG8ØtòPSè8 jè$ÀÿÿÄÃ[^_ÉÃUìWVSMÉé ät! ÀtFG8ür8Üwæ8ør8ØwÆ8Äu Iu×3É8Ä ¡X8X#Æ ÀuÃëeX8ÃÁø¶ÈöDJte ! 1 9 = I W a c g o u { © « µ ½ Á Ï Ù å ç í ñ ó #)-?GQW]eo{·¹ÃËÏÝáéõû%/1A[_amsw³µ¹»Çãåëñ÷û ! + - = ? O U i y £ « · ½ Ç É Í Ó Õ Û å ç ó ý ÿ !'/5;KWY]kqu}±·¹ÃÑÕÛíïù %)1CGMOSY[gk¡£§³µ»ÑÓÙéïûý!%+9=?Qisy{ £¥¯±»ÁÉçñóý'-9EGY_cio¡¥§«ÃÅÑ×çïõû #)+17AGS_qsy}¯³µ¹¿ÁÍÑßý '-7CEIOW]gim{¯»ÃÕÙßëíóùÿ!/3;EMYkoqu¡±·½ËÕãç%)+7=ACI_egk}µ»ÁÅÍ×÷ %39=EOUimou©¯µ½ÃÏÓÙÛáåëí÷ù #'3A]cw{¥³¹¿ÉËÕáéóõÿ57;CIMUgqw} §³¹ÁÇÑ×Ùßåëõý13EIQ[y£©«±µÇÏÛíý!#-/5?MQik{}§«±¹ÉÏÕ×ãóûÿ#%/17;AGOUYeks§¿ÅÑ×Ùï÷ '+-3=EKOUs£¥µ·Éáóù !#59?AKS]ciqu{}¥§³·Å×Ûáõù%+/=IMOmq¡»ÁÅÇËÝãï÷ý 9IKQgu{ ¥¯µ»Óáçëóÿ ' ) - 3 G M Q _ c e i w } ¡ « ± ¹ à Šã ç í ï û ÿ !!5!A!I!O!Y))!)#)?)G)])e)i)o)u)))))¡)§)«)¿)Ã)Õ)×)ã)é)í)ó)***%*/*O*U*_*e*k*m*s******¹*»*Å*Í*Ý*ã*ë*ñ*û*+'+1+3+=+?+K+O+U+i+m+o+{++++£+¥+©+½+Í+ç+ë+ó+ù+ý+ ,,,#,/,5,9,A,W,Y,i,w,,,,,,³,·,Ë,Ï,Û,á,ã,é,ï,ÿ,---;-C-I-M-a-e-q---¡-©-³-µ-Å-Ç-Ó-ß-... ...%.-.3.7.9.?.W.[.o.y.. ....£.¥.±.·.Á.Ã.Í.Ó.ç.ë./ ///'/)/A/E/K/M/Q/W/o/u/}///¥/«/³/Ã/Ï/Ñ/Û/Ý/ç/í/õ/ù/0 0#0)070;0U0Y0[0g0q0y0}0 000£0©0¹0¿0Ç0Ë0Ñ0×0ß0å0ï0û0ý01 11!1'1-191C1E1K1]1a1g1m1s11111©1±1Ã1Ç1Õ1Û1í1÷1ÿ1 2222)252Y2]2c2k2o2u2w2{2222§22³2·2É2Ë2Ï2Ñ2é2í2ó2ù23%3+3/353A3G3[3_3g3k3s3y333¡3£33¹3Á3Ë3Ó3ë3ñ3ý34444474E4U4W4c4i4m444444¥4¯4»4É4Ó4á4ñ4ÿ4 555-535;5A5Q5e5o5q5w5{5}555555¡5·5½5¿5Ã5Õ5Ý5ç5ï5666#6165676;6M6O6S6Y6a6k6m6666¯6¹6»6Í6Ñ6ã6é6÷67777?7E7I7O7]7a7u777£7©7«7É7Õ7ß7ñ7ó7÷788!83858A8G8K8S8W8_8e8o8q8}888§8·8Å8É8Ï8Õ8×8Ý8á8ã8ÿ899#9%9)9/9=9A9M9[9k9y9}999999¡9§9¯9³9»9¿9Í9Ý9å9ë9ï9û9::::':+:1:K:Q:[:c:g:m:y::¥:©:·:Í:Õ:á:å:ë:ó:ý:;;;!;#;-;9;E;S;Y;_;q;{;;;;;¥;§;;·;¹;Ã;Ë;Ñ;×;á;ã;õ;ÿ;< <<<<)<5<C<O<S<[<e<k<q< <<<§<µ<¿<Ç<Ñ<Ý<ß<ñ<÷<= ====!=-=3=7=?=C=o=s=u=y={= ====«=¯=µ=»=Á=É=Ï=ó=> >>>>#>)>/>3>A>W>c>e>w>>>¡>¹>½>¿>Ã>Å>É>×>Û>á>ç>ï>ÿ>? ?7?;?=?A?Y?_?e?g?y?}????¿?Í?Ó?Ý?é?ë?ñ?ý?@!@%@+@1@?@C@E@]@a@g@m@@@£@©@±@·@½@Û@ß@ë@÷@ù@ AAAA!A3A5A;A?AYAeAkAwA{AA«A·A½A¿AËAçAïAóAùABBBB#B)B/BCBSBUB[BaBsB}BB BBBBBµBÅBËBÓBÝBãBñBCCC%C'C3C7C9COCWCiCCCC¥C©C¯CµC½CÇCÏCáCçCëCíCñCùC DDD#D)D;D?DEDKDQDSDYDeDoDDD¡D¥D«DD½D¿DÉD×DÛDùDûDEEE+E1EAEIESEUEaEwE}EEE£EE¯E»EÇEÙEãEïEõE÷EFF FF%F'F3F9F=FCFEF]FyF{FFFFFF©F±FÇFÉFÏFÓFÕFßFåFùFGGG#G)G/G5G9GKGMGQG]GoGqG}GGGGG¥G±G¿GÃGËGÝGáGíGûGHHHHHH1H=HGHUHYH[HkHmHyHHH¡H¹HÍHåHïH÷HI III+I7I=IEIUIcIiImIsII«IµIÓIßIáIåIçIJJJ#J9JAJEJWJ]JkJ}JJJJJ±JÃJÅJÕJÛJíJïJKK KKK%K1K;KCKIKYKeKmKwK KK³KµK»K¿KËKÙKÝKßKãKåKéKñK÷KLL LLLL!L-L3LKLULWLaLgLsLyLLLLLÍLáLçLñLóLýLMMM'M)M/M3MAMQMYMeMkMMMMMM±M³MÉMÏM×MáMíMùMûMNNNNN+N5N7N=NONSN_NgNyN NNNNN¡N¯N³NµNÁNÍNÑN×NéNûNO OO%O-O?OIOcOgOmOuO{OO OOO¥O©O¯O·O»OÏOÙOÛOýOÿOPPP)P5P?PEPGPSPqPwPPPP¡P·PÉPÕPãPíPïPûPQQ QQQ#Q%Q5QGQIQqQyQQQQ¡Q£Q§Q¹QÁQËQÓQßQãQõQ÷Q RRRRRR'RCRERKRaRmRsRRRRR¥R«R±R»RÃRÇRÉRÛRåRëRÿRSS#SASESGSKS]ScSSSSSSSS«S¹SÛSéSïSóSõSûSÿS TTTT5T7T;TATITSTUT_TaTkTmTqTTTT©T³TÅTÑTßTéTëT÷TýTU UU'U+U9U=UOUQU[UcUgUoUyU UU©U±U·UÉUÙUçUíUóUýUVVVV#V/V3V9V?VKVMV]V_VkVqVuVVVVVVV±VÕVçVóVÿVWWWWWW#WGWMW_WaWmWwW}WW¡W©W¯WµWÅWÑWÓWåWïWX XXX'X+X-XUX[X]XmXoXsX{XXX£X©X«XµX½XÁXÇXÓXÕXßXñXùXÿXYYY!YEYKYMYWY]YuY{YYYY±Y³Y½YÑYÛYãYéYíYóYõYÿYZ ZZZZZ)Z/Z;ZMZ[ZgZwZZ ZZZ¡Z£Z©Z»ZÓZåZïZûZýZ[[[[%[+[=[I[K[g[y[[[£[±[É[Õ[ë[ñ[ó[ý[\ \\\\)\/\3\9\G\K\M\Q\o\u\w\}\\\§\½\¿\Ã\É\Ñ\×\Ý\í\ù\]]]]]1]=]A]G]O]U][]e]g]m]y]]£]©]]¹]Á]Ç]Ó]×]Ý]ë]ñ]ý]^ ^^^!^'^+^-^1^9^E^I^W^i^s^u^ ^^^¥^¯^·^»^Ù^ý^ __'_3_5_;_G_W_]_c_e_w_{___¡_³_½_Å_Ï_Õ_ã_ç_û_`#`/`7`S`_`e`k`s`y` ```»`¿`Í`Ù`ß`é`õ` aaaa-a9aKaUaWa[aoayaaaaaaµaÇaÉaÍaáañaÿa bbb!b'b;bAbKbQbSb_bebbbbbb¥bbÕb×bÛbÝbébûbÿbc ccc/cAcCcOc_cgcmcqcwc}cc³cÁcÅcÙcécëcïcõcdd dd!d'd+d9dCdIdOd]dgdud dddd£d«dÁdÇdÉdÛdñd÷dùdee!e/e9e?eKeMeSeWe_eqe}eeee¡e¥ee¹eÅeãeóeûeÿefff)f1f;fAfGfMf[fafsf}ffffffµf¹fÅfÍfÑfãfëfõfgggg'g1g7g?gEgQg[gogygg gg«g½gÁgÍgßgågh hhh-h9h;h?hEhKhMhWhYh]hchihkhqhhhh±h½hÅhÑh×háhíhïhÿhii ii)i/iCiGiIiOieikiqiiii£i³iµi»iÁiÅiÓißiãiåi÷ij+j7j=jKjgjijuj{jjjjj£jÁjÉjájçjkkk#k'k-k9kAkWkYk_kukkkkkk½k¿kÛkákïkÿkll)l+l1l5lUlYl[l_lelglslwl}llllll¡l©l¯l³lÇlËlëlõlýl mm%m'm+m1m9m?mOm]mamsm{mmmm¥m±m·mÁmÃmÍmÏmÛm÷mnnn)n3n;nEnunwn{nnnnnn½n¿nãnénónùnûn oooo/o=oMoSoaoeoyo}oo oooo£o¯oµo»o¿oËoÍoÓo×oãoéoñoõo÷oýoppp'p3p9pOpQpWpcpupypppp¥p«p»pÃpÇpÏpåpípùpÿpqq!q3qQqYq]q_qcqiqqqqqÃqÉqËqÑqÛqáqïqõqûqrrrr%r/r;rCrUrgrqrwrrrrr£r³rÇrËrÍr×rÙrãrïrõrýrs s!s+s=sWs[sasss ssss«s½sÁsÉsßsåsçsóstt-t9t?tAt]tkt{tttt§t«t±t·t¹tÝtátçtûtuu%u;u=uMu_ukuwuuuuuu¡u§uµu¹u»uÑuÙuåuëuõuûuvv!v-v3v=v?vUvcvivovsv vvvµv·vÃvÛvßvñvwwww!w-w5wAwKwYw]w_wqww§ww³w¹wÅwÏwÕwáwéwïwówùwx%x+x5x=xSxYxaxmxwxyxx xxxx¡xx¿xÓxÙxÝxåxûxyy%y+y9y?yKyWy]ygyiysyyy£y«y¯y±y·yÉyÍyÏyÕyÙyóy÷yÿyzzzzz#z'z-zKzWzYz_zeziz}zzzz¡z¥zízõzùz{{{{+{5{7{;{O{U{_{q{w{{{¡{©{¯{³{Ç{Ó{é{ë{ï{ñ{ý{|||1|7|I|g|i|s||||£|Õ|Û|å|í|÷|} }}}3}9};}?}E}M}S}Y}c}u}w}}}}}·}½}¿}Ë}Õ}é}í}û}~~)~+~/~5~A~C~G~U~a~g~k~q~s~y~}~~~~§~~¹~»~Ó~ß~ë~ñ~÷~û~139=CK[acmy¯µÃÉÍÏí!#?AGKew¥«½ÉË×Ûáçõÿ /1;CSY_}§¯³»Çß %13?CEIOao{ ±µ½ÇÏÕßñùý!)-35?AMQSW]eio§±¹ËÕ×Ýçéíÿ#%;AGOaew©¯Íãïñ÷ K O Q ] c m o { £ ¥ © · Í Ó Õ Û á ë ù ý ÿ !/9?AMcu}¥§³·ÃÅÏÑ×éïõ+/5GY[kqw ¡©³»ÅÇËÝ÷!7=CQag{ ¥ÏÓëíóý #'-9EMQWc³¹ÃÏÑÛïõûÿ#5AIO[_mwy £³µÁÇËÍÑ×ñõ !W]£©¯»ÕÙÛá÷ýÿ'9;GS]o{§«±ÅÝãéó #)7A[_qy §µÅËÓÙßõ÷%Qcisuy«¯±½ÇÏÓÛçë÷ÿ#-?EKSYeiq«³·¹ÉÕáïù #%17;ACOSms ¯¹ÁÅßéý'3=EOQag{ »½ÁÉÙÛíñóù!/AGWkqu}¡«¹¿ÃÅËÕ×çó;=CUs§³µÇ×Ýåï÷ ?EKOcgim{¥µÃáç !'-59KW]_u±·¹½Ïãéù/15;=e¡§©ÁËÑÓåïûý %+379CIQ[]o¥±·ÃÍÓÙë÷ )/;AQko§±¹¿ÃÉÏÝãõùû )1;=AGIS} ¯¿ÇËÍ×åñû%KOUWau·ÃÇÏëó÷ÿ'/5EQYcow¡§±·½ÅËÏÝù#+/5IM_eg£¯»¿Á×Ùãéñý'-1=U[a¥©Ãçëíñ#'-3;GQS_o¡³½¿õùû#/7;CSamsw}£¯³ÁÇßåëõ ! 3 9 ? O W [ a u y « µ · ½ É Ù Û ß å ñ ó ý ¡¡¡¡¡)¡/¡5¡A¡S¡u¡}¡¡¡¥¡«¡¡·¡Ã¡Å¡ã¡í¡û¡¢¢#¢)¢/¢1¢C¢G¢M¢k¢y¢}¢¢¢¢¢¢¢©¢¯¢³¢»¢Å¢Ñ¢×¢÷¢£ ££!£+£1£I£Q£U£s£y£{££££¥£©£¯£·£Ç£Õ£Û£á£å£ç£ñ£ý£ÿ£¤¤!¤#¤'¤;¤M¤W¤Y¤c¤i¤u¤¤¤¤¹¤Ã¤Å¤Ë¤Ñ¤Õ¤á¤í¤ï¤ó¤ÿ¤¥)¥+¥5¥;¥C¥S¥[¥a¥m¥w¥ ¥¥¥¥£¥§¥©¥Á¥Å¥Ë¥Ó¥Ù¥Ý¥ß¥ã¥é¥÷¥û¥¦ ¦%¦=¦I¦K¦Q¦]¦s¦¦¦¦«¦µ¦»¦Á¦É¦Í¦Ï¦Õ¦ß¦ç¦ñ¦÷¦ÿ¦§§#§)§-§E§M§W§Y§e§k§o§§§«§±§¹§¿§É§Ñ§×§ã§í§û§¨¨¨)¨+¨7¨;¨U¨_¨m ¨}¨¨¨©¨µ¨Á¨Ç¨×¨å¨ý¨©©©1©7©9©C©© ©©©©£©±©»©Á©Ù©ß©ë©ý©ªª5ª9ª;ªGªMªWªYª]ªkªqªªªªª«ª¿ªÅªÉªéªïª«««« «««M«[«q«s«««§«¯«¹«»«Á«Å«Ó«×«Ý«ñ«õ«û«ý« ¬¬¬'¬7¬9¬E¬O¬W¬[¬a¬c¬¬¬¬¬©¬«¬¯¬½¬Ù¬á¬ç¬ë¬í¬ñ¬÷¬ù¬?ES]_e¡¥ÃËÑÕÛçóõùÿ®®#®+®I®M®O®Y®a®g®k®q®®®®®§®¹®Å®Ñ®ã®å®é®õ®ý® ¯¯'¯+¯3¯C¯O¯W¯]¯m¯u¯¯¯¯¯£¯«¯·¯»¯Ï¯Õ¯ý¯°°°?°A°G°K°Q°S°i°{°}°°°±°¿°Ë°Ï°á°é°í°û°±±±±±±1±A±M±[±e±s±y±±©±³±¹±¿±Ó±Ý±å±ñ±õ±²²²²-²?²I²[²c²i²m²{²²²©²·²½²Ã²Ç²Ó²ù²ý²ÿ²³ ³³³'³-³?³E³w³}³³³³³¥³Å³Ë³á³ã³í³ù³´ ´´´5´=´C´I´[´e´g´k´w´´´´µ´¿´Á´Ç´Ý´ã´å´÷´µ µµ-µ?µKµgµiµoµsµyµµµµ£µ«µ¯µ»µÕµßµçµíµýµÿµ ¶¶)¶/¶3¶9¶G¶W¶Y¶_¶c¶o¶¶¶¶¶¥¶±¶³¶×¶Û¶á¶ã¶í¶ï¶· ···)·5·G·U·m···©·Á·Ë·Ñ·Ó·ï·õ·¸¸¸¸!¸'¸+¸-¸9¸U¸g¸u¸ ¸¸¥¸¯¸·¸½¸Á¸Ç¸Í¸Õ¸ë¸÷¸ù¸¹¹¹¹/¹9¹;¹G¹Q¹c¹¹¹¹¹¹¡¹§¹¹·¹Ë¹Ñ¹Ý¹ç¹ï¹ù¹º ºº%º)º+ºAºSºUº_ºaºeºyº}ºº¡º£º¯ºµº¿ºÁºËºÝºãºñºýº »»'»-»=»C»K»O»[»a»i»m»»»»±»É»Ï»Û»í»÷»ù»¼¼#¼3¼;¼A¼E¼]¼o¼w¼¼¼¼«¼·¼¹¼Ñ¼Õ¼á¼ó¼ÿ¼ ½½½½5½A½O½Y½_½a½g½k½q½½½½½½³½»½Í½Ñ½ã½ë½ï½¾ ¾¾!¾%¾'¾[¾]¾o¾u¾y¾¾¾¾¾¾©¾±¾µ¾·¾Ï¾Ù¾Û¾å¾ç¾ó¾ù¾¿3¿9¿M¿]¿_¿k¿q¿{¿¿¿¿¿¡¿¿¹¿Ï¿Õ¿Ý¿á¿ã¿ó¿ÀÀÀÀ)À/À1À7À;ÀGÀeÀmÀ}ÀÀÀÀ³ÀµÀ»ÀÓÀ×ÀÙÀïÀñÀÁÁ ÁÁÁ+Á3Á7ÁEÁIÁ[ÁsÁyÁ{ÁÁÁÁÁ½ÁÃÁÍÁÛÁáÁçÁÿÁÂÂÂ!Â/Â?ÂKÂMÂSÂ]ÂwÂ{Â}§³½ÂÏÂÕÂãÂÿÂÃÃÃÃÃ%ÃGÃIÃOÃeÃgÃqÃÃà ÃÃçÃõÿÃÇÃËÃÑÃÓÃãÃéÃïÃÄÄ-Ä3Ä7ÄUÄWÄaÄoÄsÄÄÄÄĥķĻÄÉÄÏÄÓÄëÄñÄ÷Ä ÅÅÅAÅGÅQÅ_ÅkÅoÅuÅwÅÅÅšŧÅÃÅ×ÅÛÅïÅûÅÆ#Æ5ÆAÆOÆUÆYÆeÆ ÆÆÆ¡Æ©Æ³Æ¹ÆËÆÍÆÝÆëÆñÆÇ ÇÇÇ-Ç1Ç9ÇWÇcÇgÇsÇuÇǥǻǽÇÁÇÏÇÕÇáÇùÇýÇÿÇÈÈÈ'È)È9È?ÈSÈWÈkÈÈÈÈÈȡȷÈÏÈÕÈÛÈÝÈãÈçÈíÈïÈùÈÉÉÉÉÉ/É7É=ÉAÉSÉ_ÉkÉyÉ}ÉÉÉÉɯɵɿÉËÉÙÉßÉãÉëÉÊÊ Ê%Ê7Ê9ÊKÊUÊ[ÊiÊsÊuÊÊÊÊÊʵʻÊÃÊÉÊÙÊåÊíÊËË ËË)Ë5Ë;ËSËYËcËeËqËËË˳˹ËÃËÑËÕË×ËÝËéËÿË ÌÌÌ#Ì+ÌAÌCÌMÌYÌaÌÌÌỊ̧̀ÌÑÌåÌéÌ ÍÍÍ%Í1Í=Í?ÍIÍQÍWÍ[ÍcÍgÍÍÍÍÍ»ÍÁÍÓÍÙÍåÍçÍñÍ÷ÍýÍÎÎ!Î/ÎGÎMÎQÎeÎ{Î}ÎÎÎΥΧηÎÉÎ×ÎÝÎãÎçÎíÎõÎÏÏÏ7Ï;ÏMÏUÏ_ÏaÏeÏmÏyÏ}ÏÏÏϩϳϵÏÅÏÍÏÑÏïÏñÏ÷ÏÐÐÐ!Ð3Ð=ÐKÐOÐiÐoÐÐ ÐÐУЫнÐÁÐÍÐçÐÿÐÑÑ-Ñ/ÑAÑWÑYÑ]ÑiÑkÑqÑwÑ}ÑÑÑÑѱѽÑÃÑÕÑ×ÑãÑÿÑ ÒÒÒÒ5Ò;ÒGÒYÒaÒeÒyÒÒÒÒÒÒ£Ò§Ò³Ò¿ÒÇÒãÒéÒñÒûÒýÒÓ!Ó+ÓCÓKÓUÓiÓuÓ{ÓÓÓÓ¥Ó±ÓÉÓëÓýÓÔÔÔ'Ô/Ô3Ô;ÔKÔYÔ_ÔcÔiÔÔÔÔÔÔÔ¥Ô«Ô±ÔÅÔÝÔáÔãÔçÔõÔùÔÕ ÕÕÕ#Õ1Õ5Õ7ÕIÕYÕ_ÕeÕgÕwÕÕÕÕµÕ¹ÕÁÕÇÕßÕïÕõÕûÕÖÖ-Ö1ÖCÖUÖ]ÖaÖ{Ö ÖÖÖ¥Ö¯Ö½ÖÃÖÇÖÙÖáÖíÖ ××××!×'×?×E×M×W×k×{×סק×ױ׳׽×Ë×Ñ×Û×ûר#Ø%Ø)Ø+Ø/Ø7ØMØUØgØsØØØ¡ØØ¿ØÍØ×ØéØõØûØÙ%Ù3Ù9ÙCÙEÙOÙQÙWÙmÙoÙsÙyÙÙÙÙ٥٩ٵÙÓÙëÙñÙ÷ÙÿÙÚ ÚÚÚÚÚ#Ú)Ú?ÚQÚYÚ]Ú_ÚqÚwÚ{Ú}ÚÚÚ³Ú½ÚÃÚÉÚçÚéÚõÚÛÛÛ#Û%Û1Û;ÛCÛUÛgÛkÛsÛ ÛÛÛÛ¯Û¹ÛÇÛËÛÍÛëÛ÷Û Ü'Ü1Ü9Ü?ÜIÜQÜaÜoÜuÜ{Ü ÜÜÜÜܩܷܵܽÜÇÜÏÜÓÜÕÜßÜùÜÝÝÝ#Ý5Ý9ÝSÝWÝ_ÝiÝoÝ}ÝÝÝݡݫݿÝÅÝËÝÏÝçÝéÝíÝõÝûÝÞÞ)Þ;Þ=ÞAÞMÞOÞYÞ[ÞaÞmÞwÞ}ÞÞÞÞ¡Þ§ÞÍÞÑÞ×ÞãÞñÞõÞß ßßß+ß3ß7ß=ßKßUß[ßgßißsß ßßߣ߫ߵ߷ßÃßÇßÕßñßóßàààà'à-à5àEàSàqà{àààà·à¹àÕà×àãàóàùàá%á)á1á5áCáOáYáaámáqáwááááááµá»á¿áÁáËáÑáåáïá÷áýáââ+â-â=âCâWâ[âuâyâââ«â¯â»âÁâÉâÍâÓâÙâóâýâÿâã#ã'ã)ã9ã;ãMãQãWã_ãcãiãuãwã}ãããÅãÉãÑãáãûãÿãääää#ä+ä1ä;äGäIäSäUämäqää©ä¯äµäÇäÍäÓäéäëäõäå!å%å7å?åEåKåWågåmåuå ååå£å¥åÏå æææææ!æ)æ9æ?æSæWæcæoæuææææææ«ææ·æ½æÅæËæÕæãæéæïæóæç ççç/ç=çGçIçSçUçaçgçkççççÅçÍç×çÝçßçéçñçûçèèèèè1è3è7è=èKèOèQèièuèyèè¥è©è¯è½èÛèáèåèëèíèééééé-é3é;éKéQé_écéié{éééé¡é¹é×éçéïéêê/ê5êCêMê_êmêqê}ê êêê³ê¹ê»êÅêÇêËêßêåêëêõêëë ë1ë9ë?ë[ëaëcëoëë ëë«ë±ë·ëÁëÕëßëíëýëìì!ì)ìMìQì]ìiìoì{ìì¹ì¿ìÃìÉìÏì×ìÝìçìéìóìõìííí/í7í=íAíUíYí[íeíkíyííí»íÅí×íÙíãíåíñíõí÷íûí îîî!îIîOîcîgîsî{îî£î«îÁîÉîÕîßîáîñîï'ï/ïEïMïcïkïqïïïïïï³ïÃïÅïÛïáïéïðððð+ð/ð5ðCðGðOðgðkðqðwðyðð£ð©ðð»ð¿ðÅðËðÓðÙðãðéðñð÷ðñññ!ñ7ñ=ñUñuñ{ñññ¥ñ¯ñ·ñÕñçñíñýñ òòòò#ò'ò3ò;òAòWò_òeòiòwòòò§ò±ò³ò¹ò½ò¿òÛòíòïòùòÿòóóóAóYó[ó_ógósówóóó¯óÁóÑó×óûóô ô ôô!ô%ô+ôEôKôUôcôuôô ôôô£ô©ô¯ô½ôÃôÛôßôíôõõõ!õ)õ5õGõQõcõkõõõõõ±õ·õÉõÏõÑõÛõùõûõööö ö5ö7öSö[öaögöyööööööËöÝößöëö ÷÷-÷1÷C÷O÷Q÷U÷c÷i÷s÷y÷÷÷÷÷÷¥÷±÷»÷½÷Ï÷Ó÷ç÷ë÷ñ÷ÿ÷øø!ø'ø-ø5øGøYøcøeøoøqøwø{øøøø¡ø«ø³ø·øÉøËøÑø×øÝøçøïøùøÿøùù%ù1ù7ù;ùAùOù_ùaùmùqùwùù£ù©ù¹ùÍùéùýùú úú!ú%ú?úCúQú[úmú{úúúú«ú»ú½úÙúßúçúíúûûû-û/û?ûGûMûuû}ûûû±û·ûÃûÅûãûéûóûü)ü7üAüCüOüYüaüeümüsüyüüüü§üµüÅüÍüëüûü ýýý+ý1ýQýUýgýmýoý{ý ýýýý©ý·ýÉýåýëýóýþþ þþ'þ/þAþKþMþWþ_þcþiþuþ{þþþþþþ³þ½þ×þéþóþõþÿ ÿÿ+ÿ/ÿIÿMÿ[ÿeÿqÿÿ ÿÿÿÿ§ÿ©ÿÇÿÙÿïÿñÿ failure, see the Visual C++ documentation on asserts - unable to initialize heap - not enough space for lowio initialization - not enough space for stdio initialization - pure virtual function call - not enough space for _onexit/atexit table - unable to open console device - unexpected heap error - unexpected multithread lock error - not enough space for thread data abnormal program termination - not enough space for environment - not enough space for arguments - floating point not loaded Program: ?????¸?Ã?È?Ò?×? 99$9@9O9a9j99©9³9¼9Ø9û9::: :%:/:6:>:D:K:P:a:}:Á=ç=)>X>^>>¾>c?j?y??¢?®?¾?Å?Ì?Ò?ù? 3$3)383>3N3Y3k3~33333§3Ä3Ê3Õ3Ú3ã3è3ø3þ3B4è4Õ6à6è6û6777$7.74797?7O7X7r7777þ7¨8´8Ã8É8Ù899"9(90999B9È9Î9Ù9ß9û9:::+:1:9:H:::í:;;;§;^<k<z<Û<0==Ø>???¥? 88 848B8O8T8Z8µ8¼89I9,:E:z:::¨:¸:÷:G;Z;;¸;Å;ê;5<H<¿<Ì<ñ< = ==4>>>®>ø>@?W?i?q?w??Ê?ï? --- NEW FILE: alutil.dll --- MZ $ Sfs fÇf{¶fÊf³fPGf<f¦¢f[FfÝIfbf*¦f êC:\WINDOWS\System32\MSVBVM60.DLL\3 Mèÿ4 Mèÿ4 Mèÿ4 MExÿÿÿJMÜQÇ pÿÿÿ< L veLockUtilWW |
From: Thanh H. T. <th...@us...> - 2003-10-05 08:25:25
|
Update of /cvsroot/activelock/activelock/bin In directory sc8-pr-cvs1:/tmp/cvs-serv25769/bin Log Message: Directory /cvsroot/activelock/activelock/bin added to the repository |
From: AJcompany A. <ajc...@ya...> - 2003-10-05 02:31:49
|
Ok, thanks for the information. I will try to be there. ----- Original Message ----- From: Thanh Hai Tran To: act...@li... Sent: Saturday, October 04, 2003 9:59 AM Subject: [family] Re: [ActiveLock-Development] Meeting Call - Sunday, Oct. 5, 2003 The proposed time is 9PM Eastern (our usual slot). That's 8PM Central, 7PM Mountain, 6PM Pacific. If any of you can't make this time, we're willing to entertain suggestions on an alternate time. Please confirm whether or not you can attend. - Thanh ----- Original Message ----- From: AJcompany AJcompany To: act...@li... Sent: Saturday, October 04, 2003 9:44 AM Subject: Re: [family] Re: [ActiveLock-Development] Meeting Call - Sunday, Oct. 5, 2003 yeah, but which timezone? (I'm in central: GMT -6:00) ----- Original Message ----- From: Thanh Hai Tran To: act...@li... Sent: Friday, October 03, 2003 4:42 PM Subject: Re: [family] Re: [ActiveLock-Development] Meeting Call - Sunday, Oct. 5, 2003 Please read the subject line. ----- Original Message ----- From: AJcompany AJcompany To: act...@li... Sent: Friday, October 03, 2003 5:28 PM Subject: Re: [family] Re: [ActiveLock-Development] Meeting Call - Sunday, Oct. 5, 2003 9PM when? ----- Original Message ----- From: Michael E. Crute To: act...@li... Sent: Friday, October 03, 2003 10:19 AM Subject: [family] Re: [ActiveLock-Development] Meeting Call - Sunday, Oct. 5, 2003 I can be there at about 9PM -Mike Thanh Hai Tran wrote: Team, We need everyone to get together this Sunday to discuss planning and activities to get Alpha 2 released, targeted for Oct. 13. Please suggest an appropriate time that suits each of you. Thank you. - Thanh -- ****************************************Michael E. CruteSenior Applications DeveloperSoftGroup Development Cor...@so... --------------------------------- Do you Yahoo!? The New Yahoo! Shopping - with improved product search |