Win32ASM-进程学习[3]-读写进程空间

 invoke ReadProcessMemory,hProcess,lpBaseAddress,lpBuffer,dwSize,lpNumberOfBytesReadinvoke WriteProcessMemory,hProcess,lpBaseAddress,lpBuffer,dwSize,lpNumberOfBytesWritten


hProcess 指定将要被读写的目标进程句柄

lpBaseAddress 目标进程中被读写的起始线性地址.

lpBuffer 用来接受数据的缓冲区

dwSize要读取的字节数

lpNumberOfBytesRead 或 lpNumberOfBytesWritten 指向一个双字变量,用来供函数返回实际读写的字节数,如果不关心读写结果,可以在这里使用NULL

 

如果函数执行成功则返回非0值,否则返回0

 

注意

(1)lpBaseAddress 和 lpBuffer参数指向的地址位于不同的进程空间内,lpBuffer指向的缓冲区位于自身进程地址空间中,lpBaseAddress指向的地址位于目标进程的地址空间内

(2)要对 目标进程的地址空间进行读写,必须具备PROCESS_VM_READ或PROCESS_VM_WRITE或PROCESS_VM_OPERATION

(3)lpBaseAddress位置开始的dwSize大小的内存必须可存取的,函数在执行前会对整个区域进行测试,如果中间有某处是不可存取的,(如没有递交到物理内存),那么函数直接返回失败

,所以一般不会出现只读写了一部分内存的情况

(4)在ring3级下,自己进程中,代码段是不可写的,但使用WriteProcessMemory函数是 可以去写目标进程的代码段是允许的

也不是一定不能写自己的代码段,可以通过修改PE导入表中的属性来达到自己可写的目的

 

下面给出一个内存补丁的例子

.386
.model flat,stdcall
option casemap:noneinclude windows.incinclude kernel32.incinclude user32.incincludelib user32.libincludelib kernel32.lib
L MACRO var:VARARG        
local lbl
.constlbl db var,0
.codeexitm   <offset lbl>
ENDM
.code
start:xor eax,eax.if eaxinvoke MessageBox,NULL,L("您使用的是正版软件"),L("Caption"),MB_OK.elseinvoke MessageBox,NULL,L("您所使用的是盗版软件"),L("错误"),MB_OK.endifinvoke ExitProcess,NULL
end start

 

 可以通过OD等软件来查看.if eax的语句的地址....


 

;--------------------------------------------------------------------------------
;程序环境设置
.386
.model flat,stdcall
option casemap:none
;--------------------------------------------------------------------------------
;头文件与库文件导入
include windows.inc
include kernel32.inc
include user32.incincludelib kernel32.lib
includelib user32.lib
;--------------------------------------------------------------------------------
;函数定义
;--------------------------------------------------------------------------------
;等值替换定义
PATCH_POSITION equ 00401014h
;--------------------------------------------------------------------------------
;宏定义
L macro var:VARARGLOCAL @lbl.const@lbl db var,0.codeexitm <offset @lbl>
endm
;--------------------------------------------------------------------------------
;包含文件
;--------------------------------------------------------------------------------
;已初始化数据段
.data
;--------------------------------------------------------------------------------
;未初始化数据段
.data?
dwOldBytes db 2 dup(?)
stStartUp  STARTUPINFO  <?>
stProcessInfo PROCESS_INFORMATION <?>
;--------------------------------------------------------------------------------
;常量段
.const
dbPatched db 90h,90h
dbPatch  db 74h,15h
;--------------------------------------------------------------------------------
;代码段
.code
start:invoke GetStartupInfo,addr stStartUpinvoke CreateProcess,L("Test.exe"),NULL,NULL,NULL,NULL,NORMAL_PRIORITY_CLASS or CREATE_SUSPENDED,0,0,offset stStartUp,offset stProcessInfo.if eaxinvoke ReadProcessMemory,stProcessInfo.hProcess,PATCH_POSITION,addr dwOldBytes,2,NULL.if eaxmov ax,word ptr dwOldBytes.if ax == word ptr dbPatchinvoke WriteProcessMemory,stProcessInfo.hProcess,PATCH_POSITION,addr dbPatched,2,NULLinvoke ResumeThread,stProcessInfo.hThread.elseinvoke TerminateProcess,stProcessInfo.hProcess,-1invoke MessageBox,NULL,L("可执行文件版本不正确"),NULL,MB_OK or MB_ICONSTOP.endif.endifinvoke CloseHandle,stProcessInfo.hProcessinvoke CloseHandle,stProcessInfo.hThread.elseinvoke MessageBox,NULL,L("无法加载执行文件 或 可执行文件没有找到"),NULL,MB_OK or MB_ICONSTOP.endifinvoke ExitProcess,NULL;--------------------------------------------------------------------------------
end start  ;函数入口地址


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB使用记录

安装服务 使用以下命令将MongoDB安装成为Windows服务。笔者的MongoDB目录为D:\Program Files\mongodb mongod --logpath "D:\Program Files\mongodb\data\logs.txt" --logappend --dbpath "D:\Program Files\mongodb\data" --directoryperdb --serviceName…

OC基础知识

Object C 语言基础 第一节总括 这一节是对Objective-C(以后简称OC)的简要介绍,目的是使读者对OC有一个概括的认识。 1.面象的读者 在阅读本文之前,应具备使用与C类似的编程语言(如C,C,JAVA)的一些经验,同时熟悉面向对象编程。 2.OC简介 OC是以SmallTalk为基础&#xff0c;建立…

Windows使用筛选器来处理异常

很久木有管博客了 最近也没有学什么 Dos系统下发生异常后,系统会调用int 24h服务例程,然后根据中断的返回值决定下一步要做什么,他会在屏幕上显示ignore Retry Fail Abort 让用户选择进而进行下一步操作 这样的话 只要应用程序截取int 24h中断,就可以随意的"胡作非…

Android 高级编程 RecyclerView 控件的使用

RecyclerView 是Android 新添加的一个用来取代ListView的控件&#xff0c;它的灵活性与可替代性比listview更好。 看一下继承关系&#xff1a; ava.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.support.v7.widget.RecyclerViewKnown Direct …

Android下点亮LED

http://blog.csdn.net/cpj_phone/article/details/43562551转载于:https://www.cnblogs.com/Ph-one/p/4276974.html

SEH处理异常

Win32为每个线程定义了一个线程信息块,其中保存了线程的一些属性数据,线程信息块的属性被定义为NT_TIB结构 typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; PVOID StackBase; PVOID StackLimit; PVOID SubSystemTib; union { PVOID FiberDa…

Asp.net MVC 4新项目中创建area的后续操作

Asp.net MVC 4新项目中创建area后&#xff0c;往往HomeController与area的HomeController路由发生混淆&#xff0c;需要手工设置一些地方避免mvc无法识别默认路由的状况。 无废话具体步骤&#xff1a; 1. 检查早Global.asax和\App_Start\RouteConfig.cs中是否已经自动添加了Are…

55-混沌操作法之我见:一、逆势操作.(2015.2.7)

混沌操作法之我见&#xff1a;一、逆势操作 首先谈谈&#xff0c;均线以及鳄鱼线。单独的市场价格表达了t时刻价格的个体情况&#xff0c;均线表达了一段时间内价格的综合情况。t时刻的价格与均线的比较&#xff0c;表达了考虑了过去以及当前综合价格的比较情况&#xff0c;即t…

SEH链和展开操作

每次我们定义了一个新的SEH异常处理回调函数,EXCEPTION_REGISTRATION结构的prev字段都被要求填写上一个EXCEPTION_REGISTRATION结构的地址,随着应用程序对模块的调用一层层深入下去的时候,那么最后回调函数会形成一个SEH链 当程序中有多个线程在运行的时候,每个线程中都会存在各…

spring的基本知识

首先是回顾一下spring的基本知识 1、controller 控制器&#xff08;注入服务&#xff09; 2、service 服务&#xff08;注入dao&#xff09; 3、repository dao&#xff08;实现dao访问&#xff09; 4、component &#xff08;把普通pojo实例化到spring容器中&#xff0c;相当于…

vs2010 EF4.0 访问mysql

需要安装mysql-connector-net-6.3.5 6.8.9的安装完后在dbfirst里找不到对应的提供程序 链接字符串里需要 指定下编码(如果不是gbk的话) <add name"sourceEntities" connectionString"metadatares://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;pr…

Win32ASM 变长参数的理解

C语言里面 提供了一些宏 可以使用变长参数 int MsgPrintf(INT dwszBuffer,TCHAR* szCaption,TCHAR* szFormat,...){LPVOID lpszBuffer;va_list pArgList;va_start(pArgList,szFormat);lpszBuffer HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,100);_vsntprintf((LPTSTR)lpsz…

jquery判断一个div的边界是否超出另外一个div的边界

摘要&#xff1a;本文简单介绍jquery判断一个div的边界是否超出另外一个div的边界&#xff0c;如果超出边界做出相应的处理。 1、实现效果 判断前 判断后 2、实现思路 实现类似的判断&#xff0c;主要是获取两个div在浏览器中的上下左右的四至&#xff0c;在jquery中&#xff0…

Gson解析Json格式数据

//数据定义&#xff1a;class User{ String name; String password; String getName(){}void setName(){}}Gson gsonnew Gson(); ////解析一条json数据&#xff1a;令str为[{"name":"21001","password":"21001"}] User usernew User()…

进程的细节

从今天开始,重新学习一些细节性质的东西 一.在VS开发环境中,应用程序的入口点: _tWinMain WinMainCRTStartup _tWinMain wWinMainCRTStartup _tmain mainCRTStartup _tmain wmainCRTStartup 相关的介…

maven环境快速搭建(转)

最近&#xff0c;开发中要用到maven&#xff0c;所以对maven进行了简单的学习。因为有个maven高手在身边&#xff0c;所以&#xff0c;很快就上手了&#xff0c;我这里算是自我总结吧。关于maven是什么东东&#xff0c;请参考其它文章。 ----------------准备工作-------------…

cocos2d-x3.0 相对布局(一)

2dx相对布局和Android非常类似。假设前完成Android它应该是easy入门。Size widgetSize Director::getInstance()->getWinSize();Text* alert Text::create("Layout", "fonts/Marker Felt.ttf", 30 );alert->setColor(Color3B(159, 168, 176));aler…

管理员以标准权限运行时

在XP时代,大多数用户都用一个管理员(administrator)帐号来登录Windows 利用这个账户,用户几乎能没有任何限制的访问重要的系统资源,因为该账户被授予了很高的权限,一旦用这个帐号登录了xp以及xp之前的操作系统,Windows操作系统就会创建一个安全令牌(security token).每当有代码…

HDU 4791 amp; ZOJ 3726 Alice#39;s Print Service (数学 打表)

题目链接&#xff1a; HDU:http://acm.hdu.edu.cn/showproblem.php?pid4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId5072 Problem DescriptionAlice is providing print service, while the pricing doesnt seem to be reasonable, so people using…

夺命雷公狗---ECSHOP---08---商品页的拇改成星星

<strong>用户评价&#xff1a;</strong>{*---------商品评价星星开始----------*}<img src"./images/stars{$goods.comment_rank}.gif" alt"comment rank {$goods.comment_rank}">{*---------商品评价星星结束-------*} 这里主要是要有星…