讨论(加密方面)

iamxiang 2007-06-28 06:11:52
请各位高手指点一下:

有没有加密密码输入框的代码或者方法啊~
现在的密码框随便用一个*号查看工具就可以看到代码了
想做成仿foxmail 6的那种,txtpassword框显示的都是*号,具体的密码存储在程序里面。

或者有其它好的方法,请指教~
...全文
534 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamxiang 2007-08-26
  • 打赏
  • 举报
回复
谢谢小吉的热情!结贴了!
homezj 2007-08-25
  • 打赏
  • 举报
回复
纯对的防破解是不太现实的。破解与反破解如同捉迷葳,用别人没想到的方法加密,不管是否复杂,都是最有效的,所以这需要有一定的创意才行。我想可能有人会有好的加密方案,但不会随便说出来的,因为可能这东西一公布,就不能叫加密了^_^

楼主提到的问题,是最常见的,一般加密不会这么简单,防止校验函数被NOP的方法很多,例举几个,不过这都是已公开的,实用价值不大,只是开拓一下思路:
1、在校验函数中放入软件运行必需的代码段或变量赋值,不执行校验函数,整个程序都无法执行;

2、用控件属性保存校验结果,如:一个Lable或Menu的Visible属性,这比变量破解难度要大一些,而这些属性会成为程序运行所需的一个相关参数,这比判断后跳转要好一些;

3、人海战术,增加校验执行的机会,对校验函数多做几个复本,内容相同,不同名即可,在不同地方调用;

4、执行时间限定,在校验前记录起始时间,校验后判断时间差,因破解时是要设断点的,而没中断的情况下,再慢的机器再复杂的校验都不会超过1秒吧,所以这可以增加破解难度;

5、是我从一个共享软件中学到的“超级杀招”,属“防修改自校验法”,首先,给主Exe文件加壳,加壳后Exe大小一般都要缩小一倍以上,比如1M变为300K,因为,破解软件前必需要先脱壳,所以在软件中加入对自身文件大小的检查,超过500K,哈,这必然是被破解的!这个方法还有很多变化,如修改加壳文件头,防止再加壳等,自己发挥想像力吧!

最后,补充一点,VB程序的P代码,比N代码难破解得多,大多数破解者看到P代码就会头痛,多数都不愿去破解它,若对程序效率影响不大,不妨用P代码编译。
iamxiang 2007-08-25
  • 打赏
  • 举报
回复
一般程序都这样写:
if(CheckRegCode(szRegCode) == TRUE)
{
//注册信息正确,执行正常的功能
}
else
{
//注册信息不正确,提示错误
}
这种封装看起来使程序代码结构良好,便于代码的组织与维护,但是也为破解者提供了良机。这样的程序通过反汇编之后通常有以下结构:
push 00406070 '字符串szRegCode参数入栈
call 00401050 '调用CheckRegCode函数
test eax,eax '判断CheckRegCode返回值
je 00401029 '跳转到出错位置
' 注册信息正确,顺序执行
从上面的汇编代码可以看到,只需将执行跳转的je指令(机器码是740B)改成两个NOP(CPU空操作指令,机器码是90)就等于忽略了对 CheckRegCode函数返回值的判断,也就是说,无论这个函数返回TRUE还是FALSE,真正的功能代码都会执行,对注册码的校验就形同虚设。破解者根据指令的内存偏移地址计算出在可执行程序文件中的文件偏移位置,直接修改可执行文件就达到了破解这个功能的目的。此外,破解者还知道校验函数的位置是00401050,也就可以直接修改这个函数的代码,将函数开始部分的代码改成:
mov eax,1 ' 机器码是B801
ret ' 机器码是C3
也就是说根本不判断注册码,直接返回1(校验成功的标志),就能够使整个软件的注册码校验功能失效,软件被彻底的破解。

怎么办???
iamxiang 2007-08-25
  • 打赏
  • 举报
回复
谢谢楼上的 我试了都是可以的 不过现在就是第二个问题不知道怎么解决啊?
gddd 2007-07-24
  • 打赏
  • 举报
回复
用子类来处理.防止键盘拦截工具.
建窗口文件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


guyehanxinlei 2007-07-24
  • 打赏
  • 举报
回复
学习,顶一下
Tiger_Zhao 2007-07-24
  • 打赏
  • 举报
回复
有很简单的方法:
如果装了 Office 以后,你可以在 Components 中选择 Microsoft Forms 2.0 Object Library,这是一组轻量控件,根本没有窗口句柄,用里面的 TextBox 然后设 Passwordchar = "*",你没法用密码查看工具看。
在做的好一点,你将它封装在一个 UserControl 中,让这个控件的 WM_GETTEXT 返回一堆随机的乱码,足够人头疼了。
VBAdvisor 2007-07-24
  • 打赏
  • 举报
回复
Subclassing WM_GETTEXT Message
zzyong00 2007-07-23
  • 打赏
  • 举报
回复
我看,也只能编驱动了,像QQ哪个密码框,虽然能用HOOK取得它的输入,但是内容不对,是加密以后的字符,其它恐怕都不行
CuiCanBin 2007-07-23
  • 打赏
  • 举报
回复
附加一个文本框控件 txtPasswordTrue,将其 Visible 设为 False;截获密码输入框 txtpassword 的按键事件,将用户输入的字符存储于 txtPasswordTrue,同时以星代替用户的输入在 txtpassword 中显示。
iamxiang 2007-07-23
  • 打赏
  • 举报
回复
第二个问题还是没有解决!
我啃 2007-07-03
  • 打赏
  • 举报
回复
sendmessage就可以好像
zyg0 2007-07-03
  • 打赏
  • 举报
回复
引用form2.0看看 那个 text没有句丙
  • 打赏
  • 举报
回复
那就在每一处都插入验证好了 就算破解也让他把程序破解个遍
iamxiang 2007-07-02
  • 打赏
  • 举报
回复
我现在确实把mkey加密了,不过,又发现一个新问题!

一般程序都这样写:
if(CheckRegCode(szRegCode) == TRUE)
{
//注册信息正确,执行正常的功能
}
else
{
//注册信息不正确,提示错误
}
这种封装看起来使程序代码结构良好,便于代码的组织与维护,但是也为破解者提供了良机。这样的程序通过反汇编之后通常有以下结构:
push 00406070 '字符串szRegCode参数入栈
call 00401050 '调用CheckRegCode函数
test eax,eax '判断CheckRegCode返回值
je 00401029 '跳转到出错位置
' 注册信息正确,顺序执行
从上面的汇编代码可以看到,只需将执行跳转的je指令(机器码是740B)改成两个NOP(CPU空操作指令,机器码是90)就等于忽略了对 CheckRegCode函数返回值的判断,也就是说,无论这个函数返回TRUE还是FALSE,真正的功能代码都会执行,对注册码的校验就形同虚设。破解者根据指令的内存偏移地址计算出在可执行程序文件中的文件偏移位置,直接修改可执行文件就达到了破解这个功能的目的。此外,破解者还知道校验函数的位置是00401050,也就可以直接修改这个函数的代码,将函数开始部分的代码改成:
mov eax,1 ' 机器码是B801
ret ' 机器码是C3
也就是说根本不判断注册码,直接返回1(校验成功的标志),就能够使整个软件的注册码校验功能失效,软件被彻底的破解。

怎么办???
  • 打赏
  • 举报
回复
干脆把MKEY也MD5加密好了 不过没有完全安全的方法的 人家HOOK你的键盘 你再加密也没用
iamxiang 2007-07-02
  • 打赏
  • 举报
回复
在使用这种方法时,把输入的密码存在了 mkey这个变量中,但是能不能直接从内存中将mkey的值破解出来了???? 如果能破解,那么这样也不太安全啊~
hongsongboy 2007-06-30
  • 打赏
  • 举报
回复
关注!!
jacktown 2007-06-29
  • 打赏
  • 举报
回复
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
of123 2007-06-29
  • 打赏
  • 举报
回复
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
加载更多回复(4)
内容概要:本文介绍了基于低秩逼近代理模型的N-1安全约束经济调度快速计算方法,并提供了完整的Matlab代码实现。该方法针对电力系统中N-1故障场景下的安全约束经济调度(SCED)问题,提出采用低秩逼近技术构建高效代理模型,有效降低高维优化问题的计算维度与复杂度,显著提升多场景下调度方案的求解效率。文中系统阐述了数学建模过程、代理模型构造原理、低秩近似算法推导及其实现流程,特别适用于含高比例可再生能源接入、存在大量不确定性因素的现代电力系统优化调度,能够在保障计算精度的同时满足实时性与准实时性应用需求。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员和工程技术人员,尤其适合从事电力系统经济调度、安全稳定分析、不确定性建模与高性能计算等相关领域的专业人士。; 使用场景及目标:①应用于大规模电力系统在N-1故障条件下的快速安全校核与经济调度决策支持;②为高渗透率新能源接入的电力系统提供高效的多场景优化求解方案;③支撑日前调度、实时调度等对计算速度与精度均有较高要求的工程应用场景。; 阅读建议:读者应结合所提供的Matlab代码深入理解算法实现细节,建议在标准测试系统上复现并调试程序,以掌握低秩逼近方法在电力系统优化中的具体应用技巧,并可根据实际研究方向进行模型拓展、性能对比与算法改进。

7,787

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧