首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

讨论(加密方面),该如何处理

2012-03-23 
讨论(加密方面)请各位高手指点一下:有没有加密密码输入框的代码或者方法啊~现在的密码框随便用一个*号查看

讨论(加密方面)
请各位高手指点一下:

有没有加密密码输入框的代码或者方法啊~
现在的密码框随便用一个*号查看工具就可以看到代码了  
想做成仿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代码编译。

热点排行