查看完整版本: 有关内存问题请教^^

tao1224 2006-12-23 14:38

有关内存问题请教^^

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

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

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

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

Nothing 2006-12-23 21:09

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

tao1224 2006-12-24 09:29

[color=black][size=12px][size=9pt][size=9pt]感谢您帮我看程序[/size][size=9pt]...[/size][size=9pt]谢谢您[/size][size=9pt]^^[/size][/size][/size]
[b][font=新細明體][size=9pt]我有找过[/size][/font]"用VB制作带搜索功能的游戏修改器"[font=新細明體]教学文章[/font][/b][/color]
[b][color=black][font=新細明體][size=9pt]经测试后[/size][/font][b][font=Verdana][size=9pt]..[/size][/font][/b][b][font=新細明體][size=9pt]结果也是错的[/size][/font][/b][/color][/b]
[b][color=black][font=新細明體][size=9pt]本篇如果可以测试通过[/size][/font][b][font=Verdana][size=9pt].[/size][/font][/b][b][font=新細明體][size=9pt]正好也可以让有心想学好[/size][/font][/b][b][font=Verdana][size=9pt]vb[/size][/font][/b][b][font=新細明體][size=9pt]的人[/size][/font][/b][/color][/b]
[b][color=black][font=新細明體][size=9pt]多了一篇实用文章[/size][/font][b][font=Verdana][size=9pt]...[/size][/font][/b][/color][/b]
[size=12px][/size]
[font=新細明體]可以再看看后面的问题吗[/font][size=9pt][font=Verdana]..QQ[/font][/size]
[size=9pt][font=Verdana][/font][/size]
[size=12px][font=新細明體][size=9pt]经测试后[/size][/font][font=Verdana][size=9pt].hwnd[/size][/font][font=新細明體][size=9pt]没问题[/size][/font][font=Verdana][size=9pt]...[/size][/font][font=新細明體][size=9pt]加上一句判断式就可以了[/size][/font][font=Verdana][size=9pt][/size][/font]
[/size]
[size=12px]hwnd = FindWindow(vbNullString, Text1.Text) ' [color=blue]完美世界窗口名"Element Client[/color]"
[color=red]If Text1.Text = "" Then hwnd = 0[/color]
If hwnd = 0 Then
    MsgBox "找不到窗口"
    Exit Sub
End If[/size]
[size=12px][/size]
[size=12px][font=新細明體][size=9pt][color=blue]感觉是[font=新細明體][size=9pt][color=blue]以下[/color][/size][/font]这段搜索[font=Verdana]条件[/font]出问题了[/color][/size][/font][/size]
[size=12px]我不知要如何用Long去比对4个Byte
(byte只要比对一个Byte,Integer和Long分别要比对2和4个Byte..)
[/size]
[size=12px][/size]
[size=12px]Dim data() As [color=red]Long[/color], i As Long, j As Long, k As Long
Dim finded As Long, fio As [color=red]Long
[/color]fio = [color=red]CLng[/color](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                                                 [color=black]'[size=12pt][size=12pt]10[/size][font=新細明體][size=12pt]进制[/size][/font][/size][/color][/size]
[size=12px][color=black][size=12pt][/size][/color]            List1.AddItem Right("00000000" & Hex(BassAddr(i) + j - 1), 8)   '[size=12pt]16[/size][font=新細明體][size=12pt]进制[/size][/font][/size]
[size=12px]            DoEvents
            finded = finded + 1
        End If
    Next[/size]
[size=12px]Next
Next[/size]
[size=12px][/size]
[size=12px][/size]
[size=12px][color=blue][font=新細明體][size=9pt]原本的程序是比对[/size][/font][font=Verdana][size=9pt]Byte[/size][/font][/color][/size]
[size=12px][color=blue][font=Verdana][size=9pt]([/size][/font][font=新細明體][size=9pt]开启一[/size][/font][font=Verdana][size=9pt]wordpad,[/size][/font][font=新細明體][size=9pt]再用本程序与[/size][/font][font=Verdana][size=9pt]gm8[/size][/font][font=新細明體][size=9pt]所搜索出的值是一样的[/size][/font][font=Verdana][size=9pt])[/size][/font][/color][/size]
[size=12px][/size]
[size=12px]Dim data() As [color=red]Byte,[/color] i As Long, j As Long, k As Long
Dim finded As Long, fio As [color=red]Byte
[/color]fio = [color=red]CByte[/color](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                                                [color=#000000]'[/color][size=12pt][size=12pt]10[/size][font=新細明體][size=12pt]进制[/size][/font][/size][/size]
[size=12px][size=12pt][/size]            List1.AddItem Right("00000000" & Hex(BassAddr(i) + j - 1), 8)   '[size=12pt]16[/size][font=新細明體][size=12pt]进制[/size][/font][/size]
[size=12px]            DoEvents
            finded = finded + 1
        End If
    Next
Next
Next[/size]

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

Nothing 2006-12-24 20:15

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

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

还有可能是数据的字符数不一样,这一点要注意。

netice 2006-12-24 22:05

:lol  :lol   :lol

不错也。。我也正打算用VB做游戏修改器呢。。西西
楼主,有问题还要向你请教啊。。
页: [1]
查看完整版本: 有关内存问题请教^^