一个简单的内存补丁程序
来源:互联网 发布:取餐叫号软件 编辑:程序博客网 时间:2024/06/05 13:26
; 内存补丁例子一:对 Test.exe 进行内存补丁
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
PATCH_POSITION equ 00401004h ;补丁位置的线性地址
PATCH_BYTES equ 2 ;补丁内存的字节数
.data?
dbOldBytes db PATCH_BYTES dup (?) ;读 缓冲区
stStartUp STARTUPINFO <?>
stProcInfo PROCESS_INFORMATION <?>
.const
dbPatch db 74h,15h ;原内容
dbPatched db 90h,90h ;补丁内容
szExecFilename db 'Test.exe',0 ;文件名
szErrExec db '无法装载执行文件!',0
szErrVersion db '执行文件的版本不正确,无法修正!',0
.code
Start:
; 创建进程
invoke GetStartupInfo,addr stStartUp
invoke CreateProcess,offset szExecFilename,NULL,NULL,NULL,NULL,/
NORMAL_PRIORITY_CLASS or CREATE_SUSPENDED,NULL,NULL,/
offset stStartUp,offset stProcInfo;创建进程时使其暂停,改写后再运行
.if eax ; 读进程内存并验证内容是否正确
invoke ReadProcessMemory,stProcInfo.hProcess,PATCH_POSITION,/ ;读
addr dbOldBytes,PATCH_BYTES,NULL
.if eax
mov ax,word ptr dbOldBytes
.if ax == word ptr dbPatch ;验证
invoke WriteProcessMemory,stProcInfo.hProcess,/ ;写
PATCH_POSITION,addr dbPatched,PATCH_BYTES,NULL
invoke ResumeThread,stProcInfo.hThread ;改写后,使程序开始运行
.else
invoke TerminateProcess,stProcInfo.hProcess,-1
invoke MessageBox,NULL,addr szErrVersion,NULL,MB_OK or MB_ICONSTOP
.endif
.endif
invoke CloseHandle,stProcInfo.hProcess
invoke CloseHandle,stProcInfo.hThread
.else
invoke MessageBox,NULL,addr szErrExec,NULL,MB_OK or MB_ICONSTOP
.endif
invoke ExitProcess,NULL
end Start
- 一个简单的内存补丁程序
- C语言枚举进程,实现一个简单的内存补丁
- 内存补丁程序编写
- 2.6.29的一个节省内存的补丁
- SockMon2005 网络验证的去除(附内存补丁程序源码)
- 一个简单的C++内存泄漏检测程序
- linux 补丁文件, 一个最简单的patch的格式
- 一个nginx_reuseport 简单补丁实现
- 简单的一个程序
- 一个简单的程序
- 一个简单的程序
- 一个简单的内存池
- Oracle补丁的简单介绍
- 自动安装补丁的程序
- 一个IE补丁的原代码
- VS2008的一个更新补丁
- 生命里的一个补丁
- 生命里的一个补丁
- 获取Explorer进程ID的两种方式
- selenium 2011 2-19
- WSPRINTF格式化字符串函数
- 获取文件大小、时间
- 从窗口句柄获取进程句柄并终止进程GetWindowThreadProcessID
- 一个简单的内存补丁程序
- 利用进程ID获取主线程ID
- INI文件的操作
- 注册表操作、开机自启动
- 中心城市城域网建设
- 设置文件关联
- _beginThreadex的用法
- 用户界面线程实现
- 8086 汇编指令速查手册(转)