能力值:
(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
);
能力值:
( 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`.`.
能力值:
( LV8,RANK:130 )
4 楼
先ZwOpenProcess,然后得到ProcessHandle再ZwWriteVirtualMemory/ZwReadVirtualMemory
搞定后记得ZwClose
能力值:
( LV2,RANK:10 )
5 楼
内存默认只读,修改内存之前需要先用VirtualProtect 把要修改的内存块改成可写
能力值:
( LV2,RANK:10 )
6 楼
但是我无法获得正在运行的程序的可写权限。我要改的是可执行的内存段
能力值:
(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
能力值:
( LV9,RANK:850 )
8 楼
bithaha的就可以了吧!
能力值:
( LV8,RANK:130 )
9 楼
ZwProtectVirtualMemory?
能力值:
( LV2,RANK:10 )
10 楼
我不是没试,你的那几句我早试过了根本不行
能力值:
( LV2,RANK:10 )
11 楼
我试了根本不行。
能力值:
( 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 //写入大小