用vb可不可以做一个获取本机屏保的密码的程序?

youxi 2002-06-11 03:38:51
用vb可不可以做一个获取本机屏保的密码的程序?
如果可以能否提供一些代码。
...全文
71 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Iamfish 2002-06-11
  • 打赏
  • 举报
回复
可以给分了吧?

如果以后有什么问题可以先到:

http://www.dapha.net找一下有没有源代码...
Iamfish 2002-06-11
  • 打赏
  • 举报
回复
Attribute VB_Name = "PassWord"
Option Explicit
'==============================================
'解密屏保密码的模块
'==============================================
Public Const MaxLength = 128 '屏幕保护的长度最大为128个字符
Public Const MainKey = &H80000001 '主键:HKEY_CURRENT_USER
Public Const STANDARD_RIGHTS_READ = &H20000
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const SYNCHRONIZE = &H100000
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const ERROR_SUCCESS = 0&

Global En_Data(128) As Integer '存放处理注册表中的口令密码
Global RetString As String

Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Function Query_Reg_Value(SubKeys As String, ValueName As String, ValueType As Long) As String
'======================================
'取得注册表反指定键的值
'======================================
On Error GoTo err
Dim RetQueryValue, KeyHandle, lngcbData As Long, RetValue As String

If Not ERROR_SUCCESS = RegOpenKeyEx(MainKey, SubKeys, 0&, KEY_READ, KeyHandle) Then Exit Function

RetQueryValue = RegQueryValueEx(KeyHandle, ValueName, 0&, ValueType, ByVal RetValue, lngcbData)
RetValue = Space(lngcbData)
RetQueryValue = RegQueryValueEx(KeyHandle, ValueName, 0&, ValueType, ByVal RetValue, lngcbData)
RegCloseKey (KeyHandle)
Query_Reg_Value = RetValue

Exit Function
err:
End Function




Public Sub CharToHex()
'==============================================
'将返回字符串两两合并,形成十六进制数,如:“79DF”转换为"&H79"和"&HDF"
'==============================================
Dim a1 As String, i As Integer, k As Long
'返回字符串中最后一位的ASC码为0,不考虑
For i = 0 To Len(RetString) - 1
a1 = Mid$(RetString, i + 1, 1)
If a1 >= "A" And a1 <= "F" Then
k = 10 + Asc(a1) - Asc("A")
Else
k = Val(a1)
End If
If i Mod 2 = 0 Then
En_Data(Int(i / 2)) = (k * 16) And &HF0 '左移四位,低四位清零
Else
En_Data(Int(i / 2)) = En_Data(Int(i / 2)) + (k And &HF)
End If
Next i
End Sub

Public Function Getsecret()
'==============================================
'解码并显示密码内容和密码字符串数目
'==============================================
Dim strPassWord As String
Dim Multiplier(4) As Long
Dim Mdd(2 * MaxLength) As Integer, Data_D(MaxLength) As Long
Dim i, j1, j2, j3 As Integer
Dim PasswordData(MaxLength) As Integer

Multiplier(0) = &HB2
Multiplier(1) = &HDC
Multiplier(2) = &H90
Multiplier(3) = &H8F

'给增值器赋初值
For i = 0 To MaxLength * 2 - 1
Mdd(i) = i '运算数组中各元素的下标值赋给各元素
Next i

For i = 0 To MaxLength * 2 - 1
j1 = Mdd(i)
j2 = (j1 + j3 + Multiplier(i Mod 4))
j2 = j2 And &HFF
Mdd(i) = Mdd(j2)
Mdd(j2) = j1
j3 = j2
Next i

j2 = 0
For i = 1 To MaxLength
j1 = Mdd(i)
j2 = (j2 + j1) And &HFF
Mdd(i) = Mdd(j2)
Mdd(j2) = j1
Data_D(i - 1) = Mdd((Mdd(i) + j1) And &HFF) '求得密钥
Next i

Call CharToHex

strPassWord = ""

For i = 0 To (Len(RetString) - 1) / 2 - 1
PasswordData(i) = En_Data(i) Xor Data_D(i) '异或运算求得口令
strPassWord = strPassWord + Chr$(PasswordData(i))
Next i

Getsecret = strPassWord
End Function
wang6176820 2002-06-11
  • 打赏
  • 举报
回复
回答是肯定可以
wgku 2002-06-11
  • 打赏
  • 举报
回复
UP
Speedies 2002-06-11
  • 打赏
  • 举报
回复
算法可以在www.21Code.com获得
Lzh_lee 2002-06-11
  • 打赏
  • 举报
回复
破解肯定是可能的,但是你首先要知道它的加密方法呀。嘻嘻,想清除密码容易,但破解密码就不是那么容易了。
胡楮智 2002-06-11
  • 打赏
  • 举报
回复
令一个方法:
前提:被破解的机器有光驱
就是利用光盘自动播放功能,执行光盘上的自己写的破解程序,
修改打开HKEY_USERS\.Default\Control Panel\ desktop 中 ScreenSaveUsePassword值为0,
再马上ScreenSaveUsePassword值改为1。
这时会自动退出平保。



youxi 2002-06-11
  • 打赏
  • 举报
回复
局域网中,设定当前机器ip和平保运行机器相同,然后重新启动,
这个方法我以前试过,开始可以,但不知后来单位干了些什么,就破不了了
另外我其实不想干坏事,想看看vb的功能能否提供一些VB操作注册表的代码?
yanga 2002-06-11
  • 打赏
  • 举报
回复
to mornwoo(疾风之虫)
你说的我做了果然很灵,谢了。^o^
thinkeasy 2002-06-11
  • 打赏
  • 举报
回复
密码在98的机器上可以破的,在2000下破不了。
胡楮智 2002-06-11
  • 打赏
  • 举报
回复
教你破解!
在局域网中,设定当前机器ip和平保运行机器相同,然后重新启动,
平保运行机器就会解除平保。
呵呵,可别拿去干坏事……
youxi 2002-06-11
  • 打赏
  • 举报
回复
感谢二位,但我看了一下它的键值是二进制的,如何变为原值?
另外能否提供一些VB操作注册表的代码?
孙小雄 2002-06-11
  • 打赏
  • 举报
回复
解除屏保密码
如果你忘记了屏保程序的密码怎么办,不要着急,用修改注册表,你就可以轻松搞定。

打开HKEY_USERS\.Default\Control Panel\ desktop,找到右侧窗口中的ScreenSave_Data,将该键删除。这样屏保的密码就轻松地解除了。
llpei 2002-06-11
  • 打赏
  • 举报
回复
可以的,密码主要是在注册表里
你读取注册,找到相应的键值就可以了
相应位置在HKEY_CURRENT_USER\Control Panel\Desktop下
具体的就不知道了

7,789

社区成员

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

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