易语言拦截文件读写源码
系统结构:a1641242,拦截打开文件,NEWCreateFileA,写字节集内存,取文本指针,卸载,读入文件函数模型,拦截取文件长度,NEWGetFileSize,拦截文件读入,NEWReadFile,读字节集内存,拦截文件读写位置,NEWSetFilePointer,修改虚拟保护,取函数地址,取模块句柄,lms520_创建文件,lms520_取文件尺寸,lms520_读入数据,lms520_设置读写位置,lms520_关闭内核对象,取文本指针_,取自进程ID,OpenProcess,写内存字节集,关闭对象,读内存字节集,
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |------ a1641242
| |
| |------ 拦截打开文件
| |
| |------ NEWCreateFileA
| |
| |------ 写字节集内存
| |
| |------ 取文本指针
| |
| |------ 卸载
| |
| |------ 读入文件函数模型
| |
| |------ 拦截取文件长度
| |
| |------ NEWGetFileSize
| |
| |------ 拦截文件读入
| |
| |------ NEWReadFile
| |
| |------ 读字节集内存
| |
| |------ 拦截文件读写位置
| |
| |------ NEWSetFilePointer
| |
| |
======调用的Dll
| |
| |---[dll]------ 修改虚拟保护
| |
| |---[dll]------ 取函数地址
| |
| |---[dll]------ 取模块句柄
| |
| |---[dll]------ lms520_创建文件
| |
| |---[dll]------ lms520_取文件尺寸
| |
| |---[dll]------ lms520_读入数据
| |
| |---[dll]------ lms520_设置读写位置
| |
| |---[dll]------ lms520_关闭内核对象
| |
| |---[dll]------ 取文本指针_
| |
| |---[dll]------ 取自进程ID
| |
| |---[dll]------ OpenProcess
| |
| |---[dll]------ 写内存字节集
| |
| |---[dll]------ 关闭对象
| |
| |---[dll]------ 读内存字节集
调用的DLL命令:
.DLL命令 修改虚拟保护, 整数型, "kernel32", "VirtualProtect", , 修改虚拟保护
.参数 lpAddress, 整数型
.参数 dwSize, 整数型
.参数 flNewProtect, 整数型
.参数 lpflOldProtect, 整数型, 传址
.DLL命令 取函数地址, 整数型, "kernel32", "GetProcAddress", , 返回函数地址
.参数 模块句柄, 整数型
.参数 函数名, 文本型
.DLL命令 取模块句柄, 整数型, "kernel32", "GetModuleHandleA", , 获取一个应用程序或动态链接库的模块句柄 如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError
.参数 模块名, 文本型, , 指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD;
.DLL命令 lms520_创建文件, 整数型, "kernel32", "CreateFileA", , 这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台 如执行成功,则返回文件句柄。INVALID_HANDLE_VALUE表示出错,会设置GetLastError。即使函数成功,但若文件存在,且指定了CREATE_ALWAYS ; 或 OPEN_ALWAYS,GetLastError也会设为ERROR_ALREADY_EXISTS
.参数 打开文件名, 文本型, , 要打开的文件的名字
.参数 访问权限, 整数型, , 如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息
.参数 共享方式, 整数型, , 零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问
.参数 security特性, 整数型, , SECURITY_ATTRIBUTES,指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的security特性(如果操作系统支持的话)
.参数 创建方式, 整数型, , 下述常数之一:;CREATE_NEW:创建文件;如文件存在则会出错;CREATE_ALWAYS:创建文件,会改写前一个文件;OPEN_EXISTING:文件必须已经存在。由设备提出要求;OPEN_ALWAYS:如文件不存在则创建它;TRUNCATE_EXISTING:讲现有文件缩短为零长度
.参数 文件属性, 整数型, , 一个或多个下述常数;FILE_ATTRIBUTE_ARCHIVE:标记归档属性;FILE_ATTRIBUTE_COMPRESSED:将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式;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:关闭了上一次打开的句柄后,将文件删除。特别适合临时文件也可在Windows NT下组合使用下述常数标记:SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY
.参数 从文件复制文件属性, 整数型, , 如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性;
.DLL命令 lms520_取文件尺寸, 整数型, "kernel32", "GetFileSize", , 判断文件长度 返回文件长度。&HFFFFFFFF表示出错。注意如lpFileSizeHigh不为NULL,且结果为&HFFFFFFFF,那么必须调用GetLastError,判断是否实际发生了一个错误,因为这是一个有效的结果
.参数 文件句柄, 整数型, , 文件的句柄
.参数 尺寸大小, 整数型, , 指定一个长整数,用于装载一个64位文件长度的头32位。如这个长度没有超过2^32字节,则该参数可以设为NULL(变成ByVal);
.DLL命令 lms520_读入数据, 整数型, "kernel32", "ReadFile", , 从文件中读出数据。与lread函数相比,这个函数要明显灵活的多。该函数能够操作通信设备、管道、套接字以及邮槽 非零表示成功,零表示失败。会设置GetLastError。如启动的是一次异步读操作,则函数会返回零值,并将ERROR_IO_PENDING设置成GetLastError的结果。如结果不是零值,但读入的字节数小于nNumberOfBytesToRead参数指定的值,表明早已抵达了文件的结尾
.参数 文件句柄, 整数型, , 文件的句柄
.参数 数据缓冲区, 整数型, , 用于保存读入数据的一个缓冲区
.参数 字符数, 整数型, , 要读入的字符数
.参数 实际读入字符数, 整数型, , 从文件中实际读入的字符数
.参数 异步过程, 整数型, , OVERLAPPED,如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须用这个参数引用一个特殊的结构。那个结构定义了一次异步读取操作。否则,应将这个参数设为NULL(将函数声明成ByVal As 并传递零值);
.DLL命令 lms520_设置读写位置, 整数型, "kernel32", "SetFilePointer", , 在一个文件中设置当前的读写位置 返回一个新位置,它采用从文件起始处开始算起的一个字节偏移量。HFILE_ERROR意味着出错。会设置GetLastError
.参数 hFile, 整数型, , 系统文件句柄
.参数 lDistanceToMove, 整数型, , 字节偏移量
.参数 lpDistanceToMoveHigh, 整数型, , 指定一个长整数变量,其中包含了要使用的一个高双字偏移。可设为零(将声明变为ByVal),表示只使用lDistanceToMove原文:A long variable containing a high double word offset to use. May be zero (change declaration to ByVal) to use only lDistanceToMove.
.参数 dwMoveMethod, 整数型, , 下述常数之一;FILE_BEGIN:lOffset将新位置设为从文件起始处开始算的起的一个偏移;FILE_CURRENT:lOffset将新位置设为从当前位置开始计算的一个偏移;FILE_END:lOffset将新位置设为从文件尾开始计算的一个偏移;
.DLL命令 lms520_关闭内核对象, 整数型, "kernel32", "CloseHandle", , 关闭一个内核对象。其中包括文件、文件映射、进程、线程、security和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError
.参数 对象句柄, 整数型, , 欲关闭的一个对象的句柄;
.DLL命令 取文本指针_, 整数型, "kernel32.dll", "lstrcpynA", 公开, 成功返回保存变量指针,失败返回0
.参数 保存变量, 文本型, 传址, 保存的变量
.参数 待拷变量, 文本型, 传址, 拷与的变量或数据
.参数 拷贝长度, 整数型, , 拷贝长度可用0
.DLL命令 取自进程ID, 整数型, "kernel32.dll", "GetCurrentProcessId", 公开
.DLL命令 OpenProcess, 整数型, "kernel32", "OpenProcess", 公开, 将句柄返回给过程对象
.参数 dwDesiredAccess, 整数型
.参数 bInheritHandle, 整数型
.参数 dwProcessId, 整数型
.DLL命令 写内存字节集, 逻辑型, "kernel32.dll", "WriteProcessMemory", 公开
.参数 进程操作句柄, 整数型
.参数 开始写入进址, 整数型, , 内存地址
.参数 写入数值数据, 字节集, 传址, 数据指针
.参数 写入长度, 整数型, , 长度
.参数 实际写入长度, 整数型, , 实际写出长度0
.DLL命令 关闭对象, 整数型, "kernel32.dll", "CloseHandle", 公开
.参数 对象句柄, 整数型
.DLL命令 读内存字节集, 逻辑型, "kernel32.dll", "ReadProcessMemory", 公开, 地址1048576
.参数 进程操作句柄, 整数型, , 被读内存的进程句柄
.参数 开始读取地址, 整数型, , 开始读的地址
.参数 保存数值变量, 字节集, 传址, 用于放数据的缓存地址
.参数 读取长度, 整数型, , 读取的字节数
.参数 实际读取长度, 整数型, 传址, 从文件中实际读入的字符数0
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。