跟踪其他修改器修改的内存地址(和SOFTICE+金山取的相同),取得被修改地址为&H163254,然后写程序,思路如下,用FindWindow取窗口句柄,GetWindowThreadProcessId转换为进程句柄,而后ReadProcessMemory读内存值如果不是预定值就WriteProcessMemory写进去。应该没问题吧可是写的时候写不进去呢。。是用下面这个函数取的内存数据,4字节方式吧?取回来是10进制数。Public Function Ncnr(lppid As Long, lpADDress As Long) As Long
Dim pHandle As Long ' 储存进程句柄
' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)
' 在内存地址中读取数据
ReadProcessMemory pHandle, ByVal lpADDress, ByVal VarPtr(Ncnr), 4, 0&
' 关闭进程句柄
CloseHandle pHandle
End Function
这样调用:M = Ncnr(mPid, &H163254)然后修改这个地址的内容,就出问题了,没弄明白,到底咋了,非让我一个字节一个字节写么,疯了WriteProcessMemory lhProcess, ByVal lpDestAddr, ByVal lpSrcAddr, blen, Null
就这句了
lhProcess 是目标进程句柄,用GetWindowThreadProcessId获取的
lpDestAddr 是目标进程中目标地址
lpSrcAddr 是要写入的内容,是一个指针吧
Dim mBuff(3) As BytemBuff(0) = &H0
mBuff(1) = &H0
mBuff(2) = &H2
mBuff(3) = &H1C然后这样调用WriteProcessMemory mPid, &H163254, ByVal VarPtr(mBuff(0))没反应啊?????郁闷,数据怎么就没变呢
WriteProcessMemory的声明没错吧:
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
lpNumberOfBytesWritten 的意思是麻?内存操作类型吗,看的代码都是用0或者&0(也就是Null)。
疯了,求教。。哪位有现成的函数给发一个吧!!另外上次HOOK封包的程序没继续做啊,现在修改成能在进程一开始的时候就截获封包了而已。还没整理,很乱啊,呵呵。
Dim pHandle As Long ' 储存进程句柄
' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)
' 在内存地址中读取数据
ReadProcessMemory pHandle, ByVal lpADDress, ByVal VarPtr(Ncnr), 4, 0&
' 关闭进程句柄
CloseHandle pHandle
End Function
这样调用:M = Ncnr(mPid, &H163254)然后修改这个地址的内容,就出问题了,没弄明白,到底咋了,非让我一个字节一个字节写么,疯了WriteProcessMemory lhProcess, ByVal lpDestAddr, ByVal lpSrcAddr, blen, Null
就这句了
lhProcess 是目标进程句柄,用GetWindowThreadProcessId获取的
lpDestAddr 是目标进程中目标地址
lpSrcAddr 是要写入的内容,是一个指针吧
Dim mBuff(3) As BytemBuff(0) = &H0
mBuff(1) = &H0
mBuff(2) = &H2
mBuff(3) = &H1C然后这样调用WriteProcessMemory mPid, &H163254, ByVal VarPtr(mBuff(0))没反应啊?????郁闷,数据怎么就没变呢
WriteProcessMemory的声明没错吧:
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
lpNumberOfBytesWritten 的意思是麻?内存操作类型吗,看的代码都是用0或者&0(也就是Null)。
疯了,求教。。哪位有现成的函数给发一个吧!!另外上次HOOK封包的程序没继续做啊,现在修改成能在进程一开始的时候就截获封包了而已。还没整理,很乱啊,呵呵。
解决方案 »
- VB串口通信:如何接收缓存中的多条数据,并在多个text中显示出来?
- vb6.0中Picture控件
- 國足慘敗歸來,誰之過?
- 怎样使程序的某项功能定期运行一次?
- 从摄像头读数据
- 请问做报表时要打印图片用什么报表工具最好呢?
- 【花100元买了www.emugua.net国际域名,散分!无聊勿进】
- 如何在vb中将frame 分割成多个frame,类是下面的界面,谢谢
- 求质心的问题!100分!
- 高手帮帮我这个菜鸟啊
- 以有一問,水晶報表打包後出現:Failed to create the Crystal Query Engine的錯誤提示,急急急!!!
- [100分]高难度,已知运行程序中的一个PictureBox的Handle,如何在另一个程序中修改PictureBox的内容?
------------------------------用vb来写这些东西,不得不佩服一下先
mPid是用OpenProcess打开的句炳么?另外,你的参数个数好象都不对(不会vb,难道另有玄机?),最后,你没有传你需要拷贝的大小,你需要返回的已写入的大小,你没有做返回值的出错处理
WriteProcessMemory mPid, &H163254, ByVal VarPtr(mBuff(0)), 4, Null
这样不过我似乎知道问题所在了,不知道为什么,我把写内存函数里面OpenProcess给注释了哈哈
ByVal VarPtr(mBuff(0)) 这个明显不对么,传的是指针,这可不成,把指针当数了。
★传颂之物汉化版★ (全年龄) Version1.00
的人物能力修改器,在以前写的东东基础上改的,没什么好说了。