[讨论]如何编程修改exe内存里的数据,并将结果保存到exe

n00000000p 2006-12-24 07:53:34
例如一个MessageBox的代码,要求编程实现修改数据:

.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

.data
szText db '你可以把我修改成别的内容吗',0

.code
start:
invoke MessageBox, NULL, addr szText,NULL, MB_OK
invoke ExitProcess,NULL
end start

现在编译这个代码,然后在这个程序的内存中修改并且保存szText的内容...

按照一般的思路是,在修改之前,首先找到它的内存地址或者它本身,例如下面代码是在这个exe中寻找“你可以把我修改成别的吗”这个字符串:


.data
szText db '你可以把我修改成别的吗',0

invoke CreateFile,_lpszFile,GENERIC_READ,\ ;打开找到的文件
FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,\
OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
.if eax != INVALID_HANDLE_VALUE
mov @hFile,eax
invoke GetFileSize,eax,NULL
mov @dwFileSize,eax
.if eax
invoke CreateFileMapping,@hFile,\
NULL,PAGE_READONLY,0,0,NULL
.if eax
mov @hMapFile,eax
invoke MapViewOfFile,eax,\
FILE_MAP_READ,0,0,0
.if eax
mov @lpMemory,eax

mov ecx, @dwFileSize ;保存文件长度
sub ecx,10; 子字符串长度减 1
mov esi, @lpMemory ;保存共享句柄
@@:
mov edi, offset szText
push ecx
push esi
mov ecx,13 ; 子字符串长度
repe cmpsb ;这里对比,如果不符合,就继续
pop esi
pop ecx
je @f
inc esi
loop @b
@@:
.if ecx != 0 ;找到了字符串
;这里开始处理.....

至于怎么替换掉szText ,并把它保存成我想要的数据,这里我就不懂了,请朋友们指教!

顺便在问一下,win32汇编里有RtlZeroMemory,怎么就没有RtlCopyMemory..

怎么用另外的方法来实现和RtlCopyMemory相同的功能?

是否这样实现:
invoke lstrlen,addr szBuffer
lea esi,szBuffer
mov edi,lpData
add edi,000800h
mov ecx,eax
cld
rep movsb

还有其他方法吗?

...全文
583 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
n00000000p 2006-12-25
  • 打赏
  • 举报
回复
如果利用内存共享查找捏?调用MapViewOfFile的时候,可写就行.例如
invoke MapViewOfFile,eax,FILE_MAP_WRITE,0,0,0
...然后自动保存到磁盘,我自己写代码测试一下 :-)
csShooter 2006-12-25
  • 打赏
  • 举报
回复
up
zara 2006-12-25
  • 打赏
  • 举报
回复
查找资源是否成功, 在 FindResource 后检查下 eax 就可以了. 对于 exe 文件的结构, 还是比较复杂的, 我自己没有实际操作过. 可以参考 http://211.90.241.130:22366/view.asp?file=38 (罗云彬的编程乐园) 侯捷翻译的 "Winfows 系统程序设计 - 大解密" 的第八章 "PE 与 COFF OBJ 档案格式" 的介绍
n00000000p 2006-12-24
  • 打赏
  • 举报
回复
zara能给出一段代码我参考一下吗?  :-)
zara 2006-12-24
  • 打赏
  • 举报
回复
首选开始的查找资源是否成功; 其次, exe 文件不仅仅是资源就可以的, 它有一定的结构要求的
n00000000p 2006-12-24
  • 打赏
  • 举报
回复
那如何导出一个程序的二进制资源,然后存为exe?

下面是主要代码,不过我导出的时候却是一个空的exe,

   invoke FindResource,NULL,ASM,RT_RCDATA ;查找ASM资源
mov hRsrc,eax
invoke SizeofResource,NULL,hRsrc
mov dwSize,eax
invoke LoadResource,NULL,hRsrc
mov hResData,eax
invoke GlobalAlloc,GPTR,dwSize
mov lpData,eax
invoke LockResource,hResData
mov lpRes,eax
invoke lstrcpyn,lpData,lpRes,dwSize
invoke lstrlen,addr szBuffer
lea esi,szBuffer ;esi=szBuffer
mov edi,lpData ;edi=lpData
add edi,000800h ;edi=lpData+000800H
mov ecx,eax ;ecx=szBuffer的长度
cld
rep movsb
invoke CreateFile,offset szName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
.if eax != NULL
mov hFile,eax
invoke WriteFile,hFile,addr lpData,dwSize,addr dwSizeWritten,NULL
invoke MessageBox,hWnd,offset szText,offset szCaption,MB_OK
invoke CloseHandle,hRsrc
invoke CloseHandle,hResData
invoke CloseHandle,hFile
invoke GlobalFree,lpData

我啃 2006-12-24
  • 打赏
  • 举报
回复
要访问和修改人家的内存
zara 2006-12-24
  • 打赏
  • 举报
回复
RtlMoveMemory 就是内存块复制功能, 是你想像的 RtlCopyMemory 的功能

如果要对运行中的文件进行修改的话, 是不能的. 正在运行的程序模块文件是被系统保护的.
如果不是特别的需用, 可以通过其它方式来改变不同的使用内容, 比如是注册表, 自己的配置文件等等, 而不非得去修改自己
代码下载地址: https://pan.quark.cn/s/bcac7912890d 在本文中,我们将详细研究如何将Windows 10操作系统调整为类似苹果的主题风格,并分析这一过程可能涉及的关键技术要素。Windows 10用户有时期望通过改变系统界面来获得与苹果Mac OS相近的体验,这通常涉及到图标、窗口布局、任务栏等方面的调整。"windows10美化变仿苹果主题"是一个此类解决方案,它致力于提供一种简便高效的方法,让用户能够在不降低系统性能的情况下,使Windows 10的外观更接近苹果的操作系统。 我们需要熟悉这个美化工具的关键部分——"安装程序Dock.exe"。Dock是苹果Mac OS中的一个显著功能,它是一个可定制的快捷方式条,用于迅速访问常用的应用程序和文件。在Windows 10中,实现仿苹果主题通常包括一个类似的功能,模拟Mac的Dock效果,使用户能够便捷地启动和切换应用程序。这个Dock程序很可能包含了模仿Mac样式的任务栏和启动器的界面组件。 在描述中提及的"一键启动,完美仿苹果",表明这个美化工具应该是用户友好的,只需执行一个简单的步骤,就能完成整个系统的转换。这样的设计对于那些不熟悉复杂系统设置调整的用户来说非常便利。同时,"支持:windows7/windows10"显示这个工具不仅适用于Windows 10,还适用于较早版本的Windows 7,拓宽了它的适用范围。 值得关注的是,该工具被强调为"不会占用很多资源",在个人电脑测试中,仅消耗3%的内存资源。这在一定程度上确保了系统性能不会因为美化而受到明显影响。在进行系统美化时,保证软件的轻量化和资源使用效率是至关重要的,因为过多的后台进程可能会减慢系统运行速度。 在达...
源码链接: https://pan.quark.cn/s/a4b39357ea24 ### MG996R舵机控制详细说明 #### 一、MG996R舵机概述 MG996R舵机是一种在机器人、无人机、模型飞机等多个领域得到普遍应用的伺服电机。该舵机能够依据输入的脉冲宽度调制(PWM)信号进行精准的角度定位。由于具备操作简便、运行高效、成本较低等优势,这种舵机在各种机电控制系统中被频繁采用。 #### 二、MG996R舵机的工作机制 MG996R舵机内部配备了一个精密的反馈系统,确保其输出的角度具有高度的精确性。其主要运作过程如下: 1. **控制信号调节**:控制信号由接收机的通道传输至信号调制芯片,该信号通常表现为周期性变化的PWM信号。信号调制芯片会提取出这一信号中的直流偏置电压。 2. **基准信号的产生**:舵机内部设有基准电路,用于生成一个周期为20ms、宽度为1.5ms的基准信号。 3. **电压对比**:所获取的直流偏置电压与电位器的电压进行对比,从而得出电压差。 4. **电机驱动**:电压差的正负决定了电机的旋转方向。电机通过一系列的齿轮减速装置驱动电位器旋转,使电压差趋近于零,此时电机停止转动。 #### 三、舵机控制信号详述 舵机的控制信号通常采用PWM信号,通过调节信号的占空比来控制舵机的位置。一般情况下,对舵机的控制要求如下: - **周期**:通常设置为20ms。 - **脉冲宽度**:依据所需控制的角度而变动,通常范围为1ms至2ms之间。 - **最小脉冲宽度**:1ms对应舵机的最左侧位置。 - **最大脉冲宽度**:2ms对应舵机的最右侧位置。 - **中间位置**:1.5ms对应的脉冲宽度代表舵机的中心位置。 #### 四...

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧