发新话题
打印

[VB资源] 有关内存问题请教^^

有关内存问题请教^^

目前小弟想制作完美世界国际版的辅助程序,
但一开始就遇到内存搜索的问题,
(因为完美世界每次登入时,内存都会不一样,所以要先制作一个搜索HP内存的功能)

目前可以搜索到一些数值(Long),但都不是正确的HP内存,
(可用其他工具(gm8)先搜索出正确的内存,再比对其中,看是不是有在List1中)

所以想在这请教高手们,要如何改,才能搜索到正确的内存值,
等到可以搜索到正确的内存,再来就简单多了...请大家帮帮忙^^

程序码在附件中.请大家多多指导^^

附件

3.rar (3.07 KB)

2006-12-23 14:38, 下载次数: 468

test

TOP

没有三研究过完美世界,不过你的方法都是一些修改内存的程序常用的方法,因为Windows系统给每个系统都是一个虚拟机,所以,你需要先得到启动程序的地址,然后再得到里面的程序在地址。
我看你的程序,是先找程序的时候出错了,你可以试试hwnd = FindWindow(vbNullString, Text1.Text),看看这个hwnd与GM8的是否一致。
换个头像,看见广告就眼红,直接封ID。

TOP

感谢您帮我看程序...谢谢您^^
我有找过"用VB制作带搜索功能的游戏修改器"教学文章

经测试后..结果也是错的
本篇如果可以测试通过.正好也可以让有心想学好vb的人
多了一篇实用文章...

可以再看看后面的问题吗..QQ

经测试后.hwnd没问题...加上一句判断式就可以了

hwnd = FindWindow(vbNullString, Text1.Text) ' 完美世界窗口名"Element Client"
If Text1.Text = "" Then hwnd = 0
If hwnd = 0 Then
    MsgBox "找不到窗口"
    Exit Sub
End If


感觉是以下这段搜索条件出问题了
我不知要如何用Long去比对4个Byte
(byte只要比对一个Byte,Integer和Long分别要比对2和4个Byte..)


Dim data() As Long, i As Long, j As Long, k As Long
Dim finded As Long, fio As Long
fio = CLng(Text2.Text)
For i = 0 To PageNum - 1
    ReDim data(1 To PageSize(i))
    ReadProcessMemory hProcess, ByVal BassAddr(i), data(1), PageSize(i), ByVal 0&
    For j = 1 To PageSize(i)
        If data(j) = fio Then
            'List1.AddItem BassAddr(i) + j - 1                                                 '10进制

            List1.AddItem Right("00000000" & Hex(BassAddr(i) + j - 1), 8)   '16进制
            DoEvents
            finded = finded + 1
        End If
    Next

Next
Next



原本的程序是比对Byte
(开启一wordpad,再用本程序与gm8所搜索出的值是一样的)

Dim data() As Byte, i As Long, j As Long, k As Long
Dim finded As Long, fio As Byte
fio = CByte(Text2.Text)
For i = 0 To PageNum - 1
    ReDim data(1 To PageSize(i))
    ReadProcessMemory hProcess, ByVal BassAddr(i), data(1), PageSize(i), ByVal 0&
    For j = 1 To PageSize(i)
        If data(j) = fio Then
            'List1.AddItem BassAddr(i) + j - 1                                                '10进制

            List1.AddItem Right("00000000" & Hex(BassAddr(i) + j - 1), 8)   '16进制
            DoEvents
            finded = finded + 1
        End If
    Next
Next
Next


[ 本帖最后由 tao1224 于 2006-12-24 09:44 编辑 ]

TOP

有可能是完美世界进行了一些加密处理,如果是GM8能搜索正确,可能是算法的问题,一般类似的程序很少用VB开发的,因为VB对低层操作能力并不强。

你可以先用GM8读取地址,然后用VB程序也读那个地址,看看出来的值是否一样。

还有可能是数据的字符数不一样,这一点要注意。
换个头像,看见广告就眼红,直接封ID。

TOP

     

不错也。。我也正打算用VB做游戏修改器呢。。西西
楼主,有问题还要向你请教啊。。

TOP

发新话题