昨天夜尿时闪了腰,在家休两天假,无聊了写个蠕虫弹楼上MM家的玻璃,按C++的方法转一个你们或许有用的Function

monica888 2008-03-27 08:26:05
我的思路是将病原体的日期全部改至1999年,EXE文件我可以按PE格式去改,但DLL文件就不知道了,用UltraEdit看了半天楞没看出个规律来,就用api搞算了。
感谢Google,感谢C++的作者,我的整个工程只有这个模块是不违法的,就发给你们一起完善一下下了

Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

'说明
'这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台
'返回值
'Long,如执行成功,则返回文件句柄。
'正在装载数据……
'INVALID_HANDLE_VALUE表示出错,会设置GetLastError。即使函数成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也会设为ERROR_ALREADY_EXISTS
'参数表
'参数 类型及说明
'lpFileName String,要打开的文件的名字
'dwDesiredAccess Long,如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息
'dwShareMode Long,零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问
'lpSecurityAttributes SECURITY_ATTRIBUTES,指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)
'dwCreationDisposition Long,下述常数之一:
'CREATE_NEW 创建文件;如文件存在则会出错
'CREATE_ALWAYS 创建文件,会改写前一个文件
'OPEN_EXISTING 文件必须已经存在?由设备提出要求
'OPEN_ALWAYS 如文件不存在则创建它
'TRUNCATE_EXISTING 讲现有文件缩短为零长度
'dwFlagsAndAttributes Long,一个或多个下述常数
'FILE_ATTRIBUTE_ARCHIVE 标记归档属性
'FILE_ATTRIBUTE_COMdivSSED 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式
'FILE_ATTRIBUTE_NORMAL 默认属性
'FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录
'FILE_ATTRIBUTE_READONLY 文件为只读
'FILE_ATTRIBUTE_SYSTEM 文件为系统文件
'FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作
'FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作
'FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理?文件只能写入磁盘卷的扇区块
'FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化
'FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化
'FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件
'=============新加入,来自C++说明===============
'FILE_FLAG_BACKUP_SEMANTICS 打开文件夹专用
'===============================================
'也可在Windows NT下组合使用下述常数标记:
'SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY
'hTemplateFile Long,如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性


'===========================以下是引用C++中使用的一些参数的具体说明========================================================
'当用其进行文件夹打开操作时,第一个参数lpFileName应被设置成为待打开的文件夹的名称;
'至于访问模式可以根据需要灵活设置,对于本文而言,对源文件夹只进行读取操作故可以设置为GENERIC_READ,
'对于备份后的文件夹由于需要将属性信息写入,因此需要有GENERIC_WRITE的支持;
'共享模式参数dwShareMode的设置与进行文件处理时的设置没有什么区别,在此可以设置为 FILE_SHARE_READ|FILE_SHARE_DELETE;
'由于CreateFile()函数在进行文件夹操作时,不能以创建方式进行,因此创建方式只能打开已经存在的对象,即dwCreationDisposition应当设置为OPEN_EXISTING;
'相比而言, dwFlagsAndAttributes参数的设置是比较重要的,
'正是通过将该参数设置为FILE_FLAG_BACKUP_SEMANTICS属性才使CreateFile()函数来进行打开文件夹的操作。(这句话是重点,我太爱你了)
'===========================================================================================================================

Public Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

Public Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long

Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long

Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type


Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Public Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000

Public Const INVALID_HANDLE_VALUE = -1

Public Const GENERIC_READ = &H80000000

Public Const FILE_SHARE_READ = &H1

Public Const OPEN_EXISTING = 3


Function GetDirFileTime(文件夹 As String) As SYSTEMTIME '我很懒,只做修改时间,有人要喜欢把访问时间和创建时间也加上去我很欢迎
Dim DirFileHand As Long
Dim MyFileTime As FILETIME
Dim lpFileFlags As SECURITY_ATTRIBUTES
Dim 创建时间 As FILETIME
Dim 访问时间 As FILETIME
Dim 修改时间 As FILETIME

DirFileHand = CreateFile(文件夹, GENERIC_READ, FILE_SHARE_READ, lpFileFlags, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
If DirFileHand = INVALID_HANDLE_VALUE Then
Debug.Print "对方可能装有SSM或McAfee"
End If


GetFileTime DirFileHand, 创建时间, 访问时间, 修改时间
Dim Ttime As FILETIME
Dim STime As SYSTEMTIME
FileTimeToLocalFileTime 修改时间, Ttime
FileTimeToSystemTime Ttime, STime
GetDirFileTime.wYear = STime.wYear
GetDirFileTime.wMonth = STime.wMonth
GetDirFileTime.wDay = STime.wDay
CloseHandle DirFileHand
End Function


' Debug.Print GetDirFileTime(感染目录).wYear & _
' GetDirFileTime(感染目录).wMonth & _
' GetDirFileTime(感染目录).wDay

CSDN找不到有关 CreateFile 和 GetFileTime 一起使用的例子,他们都简单的使用filedatetime的VB函数去解决,但这对文件夹没有用,最后是FileTimeToSystemTime,这是我根据C++源码改成VB的。
再一次感谢Google。
...全文
94 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2008-03-28
  • 打赏
  • 举报
回复
1楼的说话真有趣 ^_^
qiu5208 2008-03-28
  • 打赏
  • 举报
回复
那天可能用的找,收藏了。
forbearORfolie 2008-03-27
  • 打赏
  • 举报
回复
感谢狗,感谢狼狗,感谢google,是你们让我找回了写vir的信心,其次,还要感谢电信,感谢网通,感谢ISP提供商,是你们让我的vir有机会走进千家万户,还要感谢广大的安全软件厂商,是你们让我的技术有了飞速提高,最后,我要特别感谢的是那些广大的无偿的为我养vir的用户们,谢谢你们,没有你们的支持就没有我们的今天。
谢谢。。
谢谢楼主,给我坐沙发的机会。

7,785

社区成员

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

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