能力值:
( LV9,RANK:250 )
2 楼
跟到这行pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
看看pid与任务管理器中的pid是否相同?
试一下我那个工具Dirapi看不能改指定进程的内存内容
能力值:
( LV9,RANK:180 )
3 楼
谢谢你。
是相同的。我有在这行一前面弄一个text=pid,和进程管理器中的PID是一样的,就是这一句得不到结果,不知道怎么回事。
能力值:
(RANK:300 )
4 楼
试试 OpenProcess(16, 0, pid)
能力值:
( LV9,RANK:250 )
5 楼
最初由 波导终结者 发布 谢谢你。 是相同的。我有在这行一前面弄一个text=pid,和进程管理器中的PID是一样的,就是这一句得不到结果,不知道怎么回事。
提升一下本进程的权限,再openprocess.如果还不行,试一下获取出错信息
能力值:
( LV9,RANK:180 )
6 楼
谢谢二位。
使用
OpenProcess(16, 0, pid)
不再报错,应该是成功了。
能告诉我为什么要这样写吗?
接下来的问题,我要修改某游戏中的4FCBD0内存地址为数值0
WriteProcessMemory pHandle, &H4FCBD0, "0", 2, 2&
我是这样写的,但是并未成功。使用游戏修改器看内存,并未被修改。请问我哪里写错了?把后面的2改成1也是没写入。
能力值:
( LV13,RANK:970 )
7 楼
你的参数类型有问题,声明API的时候不要用系统提供的默认参数类型,应该是:
Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long (注意变量的参数类型)
这是我以前写的一个:
Dim p1 As Long
p1 = &HB8
WriteProcessMemory pHandle, &H40360F, p1, 2, 0&
能力值:
( LV9,RANK:180 )
8 楼
谢谢你。
我把语句改成:
Dim p1 As Long
p1 = &HB8
WriteProcessMemory pHandle, &H4FCBD0, p1, 2, 0&
但是执行以后,内存地址未发生变化。
是否因为我的系统是XP,需要提高权限?该怎么做呢? 语句
OpenProcess(16, 0, pid)
的原理是什么?
谢谢。
能力值:
( LV9,RANK:180 )
9 楼
顶下。
能力值:
( LV2,RANK:10 )
10 楼
#define PROCESS_VM_READ (0x0010)
能力值:
( LV2,RANK:10 )
11 楼
//提升权限
void EnableDebugPriv( void )
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return;
if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){
CloseHandle( hToken );
return;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
CloseHandle( hToken );
}
使用方法:
EnableDebugPriv();
HANDLE hWnd = ::OpenProcess PROCESS_ALL_ACCESS,FALSE,m_notepadID);
能力值:
( LV13,RANK:970 )
12 楼
我写的那个在XP里面的确不好用
用一下mhsong的这个.应该可以的
能力值:
(RANK:1060 )
13 楼
WriteProcessMemory pHandle, &H4FCBD0, "0", 2, 2&
------------------
DWORD是4BYTE,你这样写了2BYTE的字符"0"+NULL吧
能力值:
( LV13,RANK:970 )
14 楼
最初由 forgot 发布 WriteProcessMemory pHandle, &H4FCBD0, "0", 2, 2& ------------------ DWORD是4BYTE,你这样写了2BYTE的字符"0"+NULL吧 长度好像没关系.随便写个数就可以.好像是这样
但是"0"设置成string是很不可取得
能力值:
(RANK:1060 )
15 楼
最初由 nbw 发布 长度好像没关系.随便写个数就可以.好像是这样 但是"0"设置成string是很不可取得
谬论。
能力值:
( LV13,RANK:970 )
16 楼
最初由 forgot 发布 谬论。 多谢大虾指正,我有试验了一下,长度果真不可以随便填写.看来VB语法要求没我想象中那么松
能力值:
( LV9,RANK:180 )
17 楼
嗯,原来是我写错了。
我已经成功了,谢谢大家!
能力值:
( LV9,RANK:180 )
18 楼
最初由 mhsong 发布 //提升权限 void EnableDebugPriv( void ) { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) return; if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){ CloseHandle( hToken ); return; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken ); } 使用方法: EnableDebugPriv(); HANDLE hWnd = ::OpenProcess PROCESS_ALL_ACCESS,FALSE,m_notepadID); 收藏。
果然是权限不够。
还有我的写入也有问题
谢谢大家,这里高手真多,问了N个地方,还是在这里得到解答,谢谢!
能力值:
( LV2,RANK:10 )
19 楼
VB就是不一样啊,跨进程读写都不用去掉内存读写保护??有意思!不过用Delphi编就更容易了!!
能力值:
( LV2,RANK:10 )
20 楼
木马?
能力值:
( LV2,RANK:10 )
21 楼
最初由 lordor 发布 跟到这行pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid) 看看pid与任务管理器中的pid是否相同? 试一下我那个工具Dirapi看不能改指定进程的内存内容
Dirapi是甚么工具?
能力值:
( LV2,RANK:10 )
22 楼
lorder你的主页打不开……