偶遇WriteProcessMemory

来源:互联网 发布:网络诈骗有什么特点 编辑:程序博客网 时间:2024/05/17 03:11

最近看一个大神视频,里面有用到WriteProcessMemory在目标进程空间改成相关判断,看玩之后觉得有意思便自己动手也模仿着写。用CE先扫到相关地址,然后分析好要写的操作,接着就开始了程序编写。

首先介绍下WriteProcessMemory函数,这个函数用起来也不难,先看下这个函数的原型:

BOOL WriteProcessMemory(  HANDLE hProcess,  // 想要写的进程句柄  LPVOID lpBaseAddress,//想要改成代码的地址  LPVOID lpBuffer,  // 要写入的内容的地址  DWORD nSize,      // 准备写入的字节  LPDWORD lpNumberOfBytesWritten,实际写入的字节);
这个函数参数不多,也容易理解。于是马上就搞定了,运行后什么都没有出现,第一反应是不是代码有问题,然后一行行看了下,没什么问题。接下来用微调了代码的各部分,还是没有用。想到是不是进程权限的问题?但是进程权限的判断并没有报错,这里应该排除掉。接着想到用ReadProcessMemory来读下试试,结果还真读出来了。那么问题就定位到WriteProcessMemory了。没办法了,只能拿到函数的返回值,看看什么情况,果然返回值是没有成功的。于是就调用GetLastError函数看返回是什么错误吗。结果是998,非法的内存访问。奇葩了!难道程序自己有写保护?于是自己写了个小程序,结果还是998。好吧要彻底绝望了,到网上搜索下,没发现什么解答,当然我只是随便找找,解答或许藏在了某个角落了。顺便提一下,在这个过程中我的杀软并没有提示我的程序有什么非法操作。但是想想不应该啊,这个应该算是有问题的,于是我机智的把杀软退掉,带着最后的希望运行了下,...奇迹出现了,还真成功了!原来这一切是他暗中干的,果断喷它一下,但是想想这个保护也是应该的,不然被某些软件利用了,后果也是挺严重的,好吧!轻喷一下。。。到此问题也就解决了!后面有用VirtualProtecEx更改内存属性还是没有作用。估计是杀软Hook了WritrProceessMemory这个函数,所以函数外面的改变是没有用的!

0 0
原创粉丝点击