首页
社区
课程
招聘
[求助]如何改写某进程的数据(头疼※※)
发表于: 2007-8-3 02:14 7940

[求助]如何改写某进程的数据(头疼※※)

2007-8-3 02:14
7940
现在我有一个进程的句柄、id等等,我还知道一个他的内部地址(开线程用的地址),我想把内存中的这个地址的内容改掉,请问怎样实现?我找了很多资料,但是也不清楚writeprocessmemory等函数的用法。关于基地址,网上的资料大都没说明白。
我只是想在运行时改他的一个数据,就像游戏修改器一样。
谢谢哪位能指点一下!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
2
前提你得有权限修改
BOOL WriteProcessMemory(
  HANDLE hProcess,  // handle to process whose memory is written to
  LPVOID lpBaseAddress,
                    // address to start writing to
  LPVOID lpBuffer,  // pointer to buffer to write data to
  DWORD nSize,      // number of bytes to write
  LPDWORD lpNumberOfBytesWritten
                    // actual number of bytes written
);
2007-8-3 06:56
0
雪    币: 431
活跃值: (482)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
3
修改器的例子,其中第二篇是修改代码的.
BLOG地址:
31fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3M7s2u0A6L8X3y4W2i4K6g2X3N6X3g2Y4k6i4c8S2i4K6u0r3j5i4u0U0K9r3W2$3k6g2)9J5c8U0t1H3x3o6g2Q4x3V1j5H3x3#2)9J5c8U0l9J5i4K6u0r3x3K6l9^5x3o6t1#2i4K6u0W2j5i4y4H3P5l9`.`.
da3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3M7s2u0A6L8X3y4W2i4K6g2X3N6X3g2Y4k6i4c8S2i4K6u0r3j5i4u0U0K9r3W2$3k6g2)9J5c8U0t1H3x3o6g2Q4x3V1j5H3x3#2)9J5c8U0l9J5i4K6u0r3x3K6l9^5x3o6b7%4i4K6u0W2j5i4y4H3P5l9`.`.
或:
476K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4k6W2k6$3g2@1j5g2)9J5k6h3u0D9L8$3N6Q4x3X3g2W2L8X3!0J5N6r3S2Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1j5^5y4U0g2Q4x3X3g2K6K9s2c8E0L8l9`.`.
1f2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4k6W2k6$3g2@1j5g2)9J5k6h3u0D9L8$3N6Q4x3X3g2W2L8X3!0J5N6r3S2Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1j5^5y4K6g2Q4x3X3g2K6K9s2c8E0L8l9`.`.
2007-8-3 10:47
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
先ZwOpenProcess,然后得到ProcessHandle再ZwWriteVirtualMemory/ZwReadVirtualMemory
搞定后记得ZwClose
2007-8-3 11:18
0
雪    币: 0
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
内存默认只读,修改内存之前需要先用VirtualProtect 把要修改的内存块改成可写
2007-8-3 12:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
但是我无法获得正在运行的程序的可写权限。我要改的是可执行的内存段
2007-8-4 00:18
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
7
你都没试,怎么能获得正在运行程序的可写权限啊 .
一般的应用程序是可以获得的.
这是个简单的例子
先打开计算器
.386
.model flat ,stdcall
option        casemap:none

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

.data?
hProcess dd ?
dwProcessID dd ?

.const
szName db '计算器',0
szBuffer db 50h

.code
start:
invoke FindWindow,NULL,addr szName
invoke GetWindowThreadProcessId,eax,offset dwProcessID
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,dwProcessID
mov hProcess,eax
mov ecx,010021ACh
invoke WriteProcessMemory,hProcess,ecx,addr szBuffer,1h,NULL
end start
2007-8-4 09:54
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
8
bithaha的就可以了吧!
2007-8-4 09:58
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
ZwProtectVirtualMemory?
2007-8-4 19:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我不是没试,你的那几句我早试过了根本不行
2007-8-7 23:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我试了根本不行。
2007-8-7 23:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你看一下几篇HOOK API的文章就可以了

这里面有很多,如: 汇编ring3下实现HOOK API【原创】    

它里面用的是修改内存的方法来HOOK API的,你可以参考下

;============================下面是核心部分=========================

WriteApi proc Process:DWORD ,Papi:DWORD,Ptype:DWORD,Psize:DWORD

LOCAL mbi:MEMORY_BASIC_INFORMATION
LOCAL msize:DWORD

;返回页面虚拟信息
invoke VirtualQueryEx,Process, Papi,addr mbi,SIZEOF MEMORY_BASIC_INFORMATION

;修改为可读写模式

invoke VirtualProtectEx,Process, mbi.BaseAddress,8h,PAGE_EXECUTE_READWRITE,addr

mbi.Protect

;开始写内存

invoke  WriteProcessMemory,Process, Papi, Ptype,Psize ,NULL

PUSH eax

;改回只读模式

invoke VirtualProtectEx,Process,mbi.BaseAddress,8h,PAGE_EXECUTE_READ,addr mbi.Protect

pop eax

ret

WriteApi endp

=======================
你可以直接引用

WriteApi proc
Process:DWORD ,   //进程句柄
Papi:DWORD,          //写入起点
Ptype:DWORD      //写入内容
,Psize:DWORD    //写入大小
2007-8-9 23:29
0
游客
登录 | 注册 方可回帖
返回