看了很多文章,使用Jmp的办法HOOK API的时候都使用了WriteProcessMemory来改写函数的入口地址.我想既然DLL既然已经被注入了目标进程,那地址空间应该是一样的,所以把WriteProcessMemory用memcpy替换掉,这个时候执行就失败了,是为什么呢? 我是HOOK的MessageBoxA,这个函数是在user32.dll里面,是不是因为在其他模块里面所以不能用memcpy呢?
解决方案 »
- 关于SDK用SendMessage来给按钮添加位图问题
- 在ActiveX中绘制无窗口的Flash做界面,IE下失败,其他浏览器测试正常
- ?求助 一个简单的问题
- 怎样把控件工具栏显示出来
- 如何去掉自动生成的"最近的文件"这个菜单项,但是要保留该功能
- 我想在DLL中使用消息,并且消息处理函数要放在DLL中,请问如何实现?
- 求助 提供一些有关图像分割的算法及代码!谢谢
- 用图形来形象的表示链表,栈,树,图等数据结构的形成及变化
- 用SOCKS5协议同服务器建立连接后,连接到外部网站(象新浪),如何将网页显示出来呢?
- 有关VC的问题!
- CStioFile的问题,看看,谢谢!!!!!!!!!!!
- CComboBox的下拉列表框里画线的问题!请帮帮忙。谢谢
我的做法是,先创建目标进程,然后在开始执行进程前开始用writeProcessMemory进行修改,修改完再让它进行
WriteProcessMemory是为了创造远程jmp的入口,所以如果是本地的话,就不需要,方法自己想~ -v-
那也就是说WriteProcessMemory在读写内存的时候会自动处理内存有保护的情况 ?
WriteProcessMemory在写的时候也不会该页属性,仍然需要用VirtualProtect,它唯一的好处是可以直接向其他进程写入数据
MSDN的解释:
The WriteProcessMemory function writes data to an area of memory in a specified process. The entire area to be written to must be accessible or the operation fails.WriteProcessMemory与memcpy的区别,仅在于能否跨进程,即能否写到其他进程的地址空间中去
看来WriteProcessMemory可以自动处理一部分内存保护的情况,只要是整个进程是可以读写的就可以使用.而不用关心某个页面的保护属性.
所以使用memcpy的使用,先使用VirtualProtect改变页面的保护属性,然后就可以顺利的读写了.
谢谢大家!