讨论(加密方面)
请各位高手指点一下:
有没有加密密码输入框的代码或者方法啊~
现在的密码框随便用一个*号查看工具就可以看到代码了
想做成仿foxmail 6的那种,txtpassword框显示的都是*号,具体的密码存储在程序里面。
或者有其它好的方法,请指教~
[解决办法]
Dim myKey As String
Private Sub Text1_Change()
If Text1 = " " Then myKey = " "
End If
Private Sub Text1_KeyPress(Keyascii As Integer)
Select Case Keyascii
Case Asc( "0 ") To Asc( "9 "), Asc( "A ") To Asc( "Z "), Asc( "a ") To Asc( "z ")
myKey = myKey + Chr(KeyAscii)
Keyascii = Asc( "* ")
Case 8
myKey = Left(myKey, Len(myKey) - 1)
Case 9, 13
Case Else
Keyascii = 0
End Select
End Sub
[解决办法]
Dim password
Private Sub Command1_Click()
password = " "
Label1.Caption = "当前密码 "
Text1.Text = " "
End Sub
Private Sub Form_Load()
Text1.Text = " "
Command1.Caption = "Clear "
End Sub
Private Sub Text1_Change()
If Len(Text1.Text) > = 1 Then Text1.Text = MD5(password)
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
password = password & Chr(KeyAscii)
Text1.Text = " "
Label1.Caption = "当前密码 " & password
End Sub
[解决办法]
那就在每一处都插入验证好了 就算破解也让他把程序破解个遍
[解决办法]
附加一个文本框控件 txtPasswordTrue,将其 Visible 设为 False;截获密码输入框 txtpassword 的按键事件,将用户输入的字符存储于 txtPasswordTrue,同时以星代替用户的输入在 txtpassword 中显示。
[解决办法]
用子类来处理.防止键盘拦截工具.
建窗口文件FrmWndProc,模块文件ModWndProc
窗口文件包括
Text1.text= "text1 "(*号隐藏)
Text2.text= "Text2 "
Command1.cap= "开始 "(按纽)
FrmWndProc代码包括
Option Explicit
Dim St As Long
Private Sub Command1_Click()
If St = -1 Then
PrevWndProc = SetWindowLong(Text1.Hwnd, GWL_WNDPROC, AddressOf SubWndProc)
Command1.Caption = "停止 "
St = 1
Me.Caption = "子类处理状态! "
Else
SetWindowLong Text1.Hwnd, GWL_WNDPROC, PrevWndProc
Command1.Caption = "开始 "
St = -1
Me.Caption = "正常状态 "
End If
End Sub
Private Sub Form_Load()
St = -1
Me.Caption = "准备完毕 "
End Sub
Private Sub Form_Unload(Cancel As Integer)
If St <> -1 Then
SetWindowLong Text1.Hwnd, GWL_WNDPROC, PrevWndProc
End If
End Sub
Private Sub Timer1_Timer()
Text2.Text = Text1.Text
End Sub
ModWndProc模块代码
Option Explicit
Public Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32 " Alias "CallWindowProcA " (ByVal lpPrevWndFunc As Long, ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_GETTEXT = &HD
Public PrevWndProc As Long
Public Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case MSG '在这里进行过滤.如果知道其他的消息,也可以在这里过滤.
Case WM_GETTEXT '因为 "取得文本 "都是发的这个消息,所以嘛.....
Exit Function '一旦发现从程序外部发来的这个消息,就什么也不做,直接返回!!
End Select
SubWndProc = CallWindowProc(PrevWndProc, Hwnd, MSG, wParam, lParam) '其它消息不管
End Function
[解决办法]
纯对的防破解是不太现实的。破解与反破解如同捉迷葳,用别人没想到的方法加密,不管是否复杂,都是最有效的,所以这需要有一定的创意才行。我想可能有人会有好的加密方案,但不会随便说出来的,因为可能这东西一公布,就不能叫加密了^_^
楼主提到的问题,是最常见的,一般加密不会这么简单,防止校验函数被NOP的方法很多,例举几个,不过这都是已公开的,实用价值不大,只是开拓一下思路:
1、在校验函数中放入软件运行必需的代码段或变量赋值,不执行校验函数,整个程序都无法执行;
2、用控件属性保存校验结果,如:一个Lable或Menu的Visible属性,这比变量破解难度要大一些,而这些属性会成为程序运行所需的一个相关参数,这比判断后跳转要好一些;
3、人海战术,增加校验执行的机会,对校验函数多做几个复本,内容相同,不同名即可,在不同地方调用;
4、执行时间限定,在校验前记录起始时间,校验后判断时间差,因破解时是要设断点的,而没中断的情况下,再慢的机器再复杂的校验都不会超过1秒吧,所以这可以增加破解难度;
5、是我从一个共享软件中学到的“超级杀招”,属“防修改自校验法”,首先,给主Exe文件加壳,加壳后Exe大小一般都要缩小一倍以上,比如1M变为300K,因为,破解软件前必需要先脱壳,所以在软件中加入对自身文件大小的检查,超过500K,哈,这必然是被破解的!这个方法还有很多变化,如修改加壳文件头,防止再加壳等,自己发挥想像力吧!
最后,补充一点,VB程序的P代码,比N代码难破解得多,大多数破解者看到P代码就会头痛,多数都不愿去破解它,若对程序效率影响不大,不妨用P代码编译。