• 标 题:帖一个类似的 (5千字)
  • 作 者:a.out
  • 时 间:2001-10-25 17:10:16
  • 链 接:http://bbs.pediy.com

我用两种方式达到解狗的目的
1)修改程序中的关键的用于判断的立即数,以及通过修改指针替换某些关键变量,最终满足判断条件(无论用什么手段,达到目的就得了呗)。
2)修改狗的驱动DLL,这种方法大众化一些。

================== hasp dll and its API inferface ===========
' Module2
Option Explicit
Declare Sub extsub258 Lib "haspmsw3.dll" Alias "hasp" (ByVal p1%, ByVal p2%, ByVal p3%, ByVal p4%, ByVal p5%, p6%, p7%, p8%, p9%)
Declare Function extfn290 Lib "haspmsw3.dll" Alias "HASPOFF" () As Integer
Declare Function extfn2C8 Lib "haspmsw3.dll" Alias "HASPSEG" () As Integer

Sub sub300 ()
    gv0274 = gc025C
    Call extsub258(gv0274, gv0276, gv0278, gv027A, gv027C, gv027E%, gv0280%, gv0282%, gv0284%)
End Sub

Function fn338 () As Integer
    gv0274 = gc025A
    Call extsub258(gv0274, gv0276, gv0278, gv027A, gv027C, gv027E%, gv0280%, gv0282%, gv0284%)
    fn338 = gv027E%
End Function

Function fn370 () As Integer
    If  fn338() = 0 Then
        gv0252 = MsgBox("Illegal Installation" & gv024E & "Contact Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
        fn370 = 0
        Exit Function
    End If
    gv0276 = 1
    Call sub300
    If  gv027E <> -6693 Or gv0280 <> 32541 Or gv0282 <> -6787 Or gv0284 <> 1918 Then
        gv0252 = MsgBox("Cannot Take Photo!" & gv024E & "Invalid Protection Key" & gv024E & "Contact Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
        fn370 = 0
        Exit Function
    Else
        gv0274 = gc025E
        gv027E% = 1
        gv0280% = -1
        Call extsub258(gv0274, gv0276, gv0278, gv027A, gv027C, gv027E%, gv0280%, gv0282%, gv0284%)
        If  gv0282% <> 0 Then
            gv0252 = MsgBox("Cannot Take Photo!" & gv024E & "Credit Read Error" & gv024E & "Contact Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
            fn370 = 0
        Else
            If  gv0280% = 0 Then
                gv0252 = MsgBox("Cannot Take Photo!" & gv024E & "Purchase Credit from Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
                fn370 = 0
            Else
                gv0254 = gv0280%
                fn370 = 1
            End If
        End If
    End If
End Function

Sub sub3A8 ()
    If  fn338() = 0 Then
        gv0252 = MsgBox("Illegal Installation" & gv024E & "Contact Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
        gv0258 = 0
        Exit Sub
    End If
    gv0276 = 2
    Call sub300
    If  gv027E <> -1712 Or gv0280 <> 30983 Or gv0282 <> 18370 Or gv0284 <> 388 Then
        gv0252 = MsgBox("Invalid Protection Key" & gv024E & "Contact Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
        gv0258 = 0
        Exit Sub
    Else
        gv0274 = gc0260
        gv027E% = 1
        gv0280% = gv0254
        Call extsub258(gv0274, gv0276, gv0278, gv027A, gv027C, gv027E%, gv0280%, gv0282%, gv0284%)
        If  gv0282% <> 0 Then
            gv0252 = MsgBox("Credit Write Error" & gv024E & "Contact Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
            gv0258 = 0
        Else
            gv0258 = 1
        End If
    End If
End Sub

======================= Application =======================
' MCISTART.FRM
Option Explicit
Dim m001A As String
Dim m001E
Dim m0020 As String
Dim m0024 As String
Dim m0028 As String
Dim m002C As String
Dim m0030 As String
Dim m0034 As Integer
Dim m0036 As Integer
Dim m0038 As Integer
Dim m003A As Integer
Dim m003C As Integer
Dim m0040 As String * 1
Dim m0044 As String * 1
Dim m0048 As String * 2
Dim m004C As String * 1
Const c00BC = 2 ' &H2%
Const c00CC = 1 ' &H1%
Const c00DC = 1 ' &H1%
Const c00DE = 1 ' &H1%
Const m00E2 = 0 ' &H0%
Const m00E4 = 0 ' &H0%

Sub Com_event0000 ()
....
                If  gv0256 = 1 Then      ; 改0000359e, e8 -> ea
                    gv0258 = gv0254 - 1  ; 原来是gv0254 = gv0254 - 1
                    Call sub3A8          ; 如果再改3596, e8-> ea
                    If  gv0258 = 1 Then  ; 则指令为gv0258 = gv0258 - 1
                        For m001E = 1 To 5000
                            DoEvents     ; 如果改 e8 -> ec
                        Next m001E     ; 则为 gv0252 = gv0254 - 1
                        InfSys.Recordset.Edit
                        If  Val(SerialNext.Text) = 9999 Then
                            SerialNext.Text = "1"
                        Else
                            SerialNext.Text = Str$(Val(SerialNext.Text) + 1)
                        End If
                        InfSys.Recordset.Fields("NextSerial") = Val(SerialNext.Text)
                        InfSys.Recordset.Update
                    Else
                        Kill "C:\INFSYS\UPLOAD\J" + m0048 + Format$(SerialNext.Text, "0000") + "A.JPG"
                        Kill "C:\INFSYS\UPLOAD\J" + m0048 + Format$(SerialNext.Text, "0000") + "B.JPG"
                        gv0252 = MsgBox("Error Saving Photo" & gv024E & "Contact Smart Vision (Asia) Ltd" & gv024E & "Tel: 23143193", 16, "Happy Baby 2.0")
                    End If
....
End Sub
=============================================================