易语言拦截文件读写源码
系统结构: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
原贴 [易语言首发]PCVX小程序解密 因为 我也不懂 就看了下这个 PC小程序解密.e 发出来不知道怎么用,所以 度娘一步步找答案得到 的 自行研究捉摸了下 仅供学习参考 1.打开 PC小程序解...
易语言模块基址获取源码,模块基址获取,GetModuleBaseAddress...
易语言流程控制编译原理源码,流程控制编译原理,是否汉字,读字符,是否运算符,是否逻辑运算符,指针回溯,跳过空格,跳过注释,代码块,取程序返回值,外部接口_代码块执行,外部接口_表达式计算,表达式计算,逻辑判断,文本到逻辑,函数调用,函数_位或,函数_测试,函数_信...
易语言搜索程序隐藏代码源码,搜索程序隐藏代码,枚举子程序...
易语言打鱼学习链表源码,打鱼学习链表,入栈,出栈,清空链表,取顶数据,取索引处值,取长度,取值处索引,插入,删除,倒置,是否为空,到八,入队,出队...
易语言脚本解析类源码,脚本解析类,子程序1,QEHash,创建进入许可证_,进入许可区_,退出许可区_,删除进入许可证_,启动线程_,销毁线程_,寻找字节集_,内存_申请,内存_释放,内存_尺寸,内存_读整数,内存_写整数,内存_复制,内存_写字节集,内存_写文本,内存_读字节集,...
易语言核心算术计算解析源码,核心算术计算解析,信息框3,信息框2...
易语言获取网页和密码例程源码,获取网页和密码例程,取文档对象,取浏览器文档对象_API,注册消息_API,发送消息_API,置鼠标捕获窗口_API,取消鼠标捕获窗口_API,取窗口类名_API,取座标窗口句柄_API,取光标位置_API...
易语言置入代码调用子程序办法源码,置入代码调用子程序办法,普通写法,置入写法...