编程实现批量清除Real木马
from:沉默空间
Real格式的影音文件有着清晰度高、文件小的优点。正因如此,一些不怀好意的家伙非常喜欢用它来制造网页木马。我们这些可怜的虫虫难道只能放弃精彩的影片么?当然不能,请跟着我一起来清除它吧!
知己知彼
RealPlayer播放rm∕rmvb文件时可以用一些手段使其自动打开指定的网页:如果这是广告网页,那么它仅仅是影响我们观赏影片,但如果是木马的话我们就损失惨重了。下面我们来看看这样的Real木马是如何打造出来的。
首先建立一个文本文件,在其中添加如下内容。
上图中u是事件标志(Flag):表示要在文件中插入的是一个URL地址。第二、三字段分别表示起始和截止时间点,格式是小时、分、秒、毫秒。最后一个字段是将要弹出的URL地址。rpexternal参数表示在外部浏览器打开URL,而不是使用缺省的RealPlayer内嵌浏览器。
保存之后打开命令行窗口,到rmevents.exe所在的目录(此文件可在RealProducer安装目录的RealMediaEditor子目录中找到)执行以下命令:“rmevents -i 要修改的rm∕rmvb文件 -e 刚新建的文本文件 -o 新文件保存的路径及文件名”。
其中-i参数是输入文件的路径和文件名;-e参数是Real事件文件;-o参数是输出文件的路径和文件名。,打开我们生成的文件看看效果。
百度已经在浏览器中静静的躺着了。知道了原理就开工:上面是建立了一个有内容的Real事件文件,那么如果要清除这个事件,只要用一个空事件来替换就可以了。但是每次都手工清除,这样的机械劳动相信没有人愿意干吧,下面来看我的编程实现。
程序设计
先给出界面与对应的属性,这样便于理解。
首先需要声明相应的函数,定义常数和变量。同时获取当前路径,并判断需要的外部文件是否存在,不存在则退出程序,防止程序崩溃。代码如下:
'声明系统API函数
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
'定义常数
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = &HFFFFFFFF
'定义变量
Dim FileInfo() As String '存放获取的文件信息
Dim CurrentPath As String '存放当前路径
'程序初始化
Private Sub Form_Load()
'判断当前路径是否为根目录
If Right(App.Path, 1) <> "\" Then
'不是则在当前路径后添加“\”字符并给对应变量
CurrentPath = App.Path + "\"
Else
'是则直接给对应变量
CurrentPath = App.Path
End If
'判断当前目录下是否存在rmevents.exe和smallrascal.dll两个文件
If Dir(CurrentPath & "rmevents.exe") = "" Or Dir(CurrentPath & "smallrascal.dll") = "" Then
'不存在则给出提示并退出程序
MsgBox "错误!当前目录下缺少文件rmevents.exe或者smallrascal.dll!", vbCritical
End
End If
End Sub
接着就要选择文件了。先要设置通用对话框的各个属性,随后将选择好的文件完整路径填入列表框,并将选择文件的数量填入标签中。这里要注意的是一次选择的文件,所有的路径+文件名最多不能超过32KB,这是通用对话框的上限,否则会出错。代码如下:
'选择文件
Private Sub cmdChooseFile_Click()
'存放选择文件总数
Dim FileNumber As Integer
'设置错误陷阱
On Error GoTo userCanceled
'定义循环变量
Dim i As Integer
With CDlog
'设置文件名缓存
.MaxFileSize = 32767
'设置通用对话框标题
.DialogTitle = "CleanReal——选择文件"
'清空文件名
.FileName = ""
'设置当选取取消按钮时产生一个错误
.CancelError = True
'设置通用对话框隐藏只读复选框、允许多重选择、使用类似资源管理器的打开一个文件的对话框模板和不间接引用快捷方式
.Flags = cdlOFNHideReadOnly Or cdlOFNAllowMultiselect Or cdlOFNExplorer Or cdlOFNNoDereferenceLinks
'设置扩展名过滤
.Filter = "RM文件(*.rm)|*.rm|RMVB文件(*.rmvb)|*.rmvb|所有文件(*.*)|*.*"
'打开通用对话框
.ShowOpen
'获得指定文件的信息
GetFileInfo (.FileName)
End With
'分离文件属性并添加至列表框中
For i = 1 To UBound(FileInfo)
List1.AddItem (FileInfo(0) + FileInfo(i))
Next
'获取选择的文件总数
FileNumber = UBound(FileInfo)
'显示选择的文件总数
Label2.Caption = "选择文件" + Str(FileNumber) + "个!"
'退出本过程,不执行错误陷阱
Exit Sub
'设置错误陷阱标号
userCanceled:
'将列表框的数量给选择的文件总数,保持上一次选择的文件总数
FileNumber = List1.ListCount
End Sub
'获得指定文件的信息
Private Sub GetFileInfo(Source As String)
'定义位置变量
Dim t As Integer
'以空字符NULL拆分文件名字符串并给对应变量
FileInfo = Split(Source, Chr(0))
'判断是否选择了文件
If UBound(FileInfo) = 0 Then
'选择则重新定义文件信息数组大小
ReDim Preserve FileInfo(1)
t = InStrRev(FileInfo(0), "\")
'获取文件名
FileInfo(1) = Mid(FileInfo(0), t + 1)
'获取文件路径
FileInfo(0) = Left(FileInfo(0), t)
Else
'否则则判断是否是根目录,不是则添加“\”字符并给对应变量
If Right(FileInfo(0), 1) <> "\" Then FileInfo(0) = FileInfo(0) & "\"
End If
End Sub
下面的就是本文的核心了。先判断列表框中有没有要清除的文件,有则将各个按钮设置为无效,防止在清除时误操作;接着判断有没有Real事件文件存在,有则删除后创建;随后分别获取输入文件、事件文件及输出文件的完整路径;最后调用rmevents.exe,并用OpenProcess API打开进程,用WaitForSingleObject API等待清除完后再进行下一个文件清除过程,直到全部清除完,最后恢复各个按钮。
'清除Real格式
Private Sub cmdClean_Click()
'设置错误陷阱
On Error Resume Next
'判断列表框选择的总数是否大于0
If List1.ListCount <= 0 Then
'不大于则给出提示
MsgBox "没有选择文件,不能清除!"
Else
'大于则继续程序,并设置选择文件、删除选中、清除列表、开始清除和退出按钮无效
cmdChooseFile.Enabled = False: cmdDelChoose.Enabled = False: cmdCLS.Enabled = False: cmdClean.Enabled = False: cmdExit.Enabled = False
'判断当前目录下smallrascal.txt文件是否存在,存在则将其清除
If Dir(CurrentPath & "smallrascal.txt") <> "" Then Kill (CurrentPath & "smallrascal.txt")
'定义自由文件号变量
Dim FileNumber As Integer
'获取自由文件号
FileNumber = FreeFile
'新建一空白smallrascal.txt文件
Open CurrentPath & "smallrascal.txt" For Append As #FileNumber
'关闭文件
Close #FileNumber
'定义循环变量并初始化
Dim i As Integer: i = 0
'定义新文件存放路径变量并初始化
Dim Path As String: Path = "'"
'定义新文件名变量并初始化
Dim NewFileName As String: FileName = ""
'定义扩展名变量并初始化
Dim ExtendName As String: ExtendName = ""
'定义进程ID变量
Dim pId As Long
'定义进程句柄变量
Dim pHnd As Long
'如果循环变量小于列表框的总数则循环
While (i < List1.ListCount)
'获取新文件存放路径
Path = Mid(List1.List(i), 1, InStrRev(List1.List(i), "\"))
'获取新文件名
NewFileName = Mid(List1.List(i), InStrRev(List1.List(i), "\") + 1, InStrRev(List1.List(i), ".") - InStrRev(List1.List(i), "\") - 1) & "_clean"
'获取扩展名
ExtendName = Mid(List1.List(i), InStrRev(List1.List(i), "."))
'MsgBox CurrentPath & "rmevents.exe -i " & List1.List(i) & " -e " & CurrentPath & "smallrascal.
补充:综合编程 , 安全编程 ,