当前位置:编程学习 > VB >>

[100分]在线等..求高手把源码改做直接搜AOB!!

--------------------编程问答-------------------- Ctrl+H 替换源代码不就可以了嘛
难道理解错了? --------------------编程问答--------------------
引用楼主 alanwongk 的回复:
在线等!万分感激!希望有人能帮助我,我会一直F5的!

求高手把源码的TEXTBOX改做 直接输入 "11 22 33 44 55"搜索


VB code
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowNam……


Dim itemstr() As String, itemstr2() As String

Private Sub Command1_Click()
    Dim mbi As MEMORY_BASIC_INFORMATION
    Dim WndHandle As Long, hProcessID As Long, hProcess As Long
    Dim tmpBassAddr As Long, lBassAddr As Long
    Dim BassAddr() As Long, PageNum As Long, PageSize() As Long
    Dim data() As Byte, fio As Byte
    Dim finded As Long, i As Long, j As Long, k As Long

    List1.Clear
    
    'Text1输入要搜寻视窗的标题
    WndHandle = FindWindow(vbNullString, Text1.Text)
    If HWnd = 0 Then
        MsgBox "无法找到该视窗"
        End
    End If

    '由视窗的Handle取得Process ID
    Call GetWindowThreadProcessId(WndHandle, hProcessID)
    If hProcessID = 0 Then
        MsgBox "无法取得ProcessID"
        End
    End If

    '开启该Process
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, hProcessID)
    If hProcess = 0 Then
        MsgBox "无法开启该Process"
        Exit Sub
    End If

    '为了谨慎起见 定址由0开始一直到 &H7FFFFFFF
    Do While VirtualQueryEx(hProcess, ByVal lBassAddr, mbi, Len(mbi))   '若执行成功
        '预防溢位 由于Long型态最大值是 &H7FFFFFFF
        '如果定址超出这个范围就离开
        tmpBassAddr = mbi.BaseAddress
        If tmpBassAddr > &H7FFFFFFF Then
            Exit Do
        End If
     
        '定出已配置解渴读写的区块
        If mbi.State = MEM_COMMIT Then  '已配置
            If mbi.Protect And (PAGE_READWRITE Or PAGE_EXECUTE_READWRITE Or PAGE_EXECUTE_WRITECOPY) Then
                '符合纪录基底位址以及区块大小
                ReDim Preserve BassAddr(PageNum)
                ReDim Preserve PageSize(PageNum)
                BassAddr(PageNum) = mbi.BaseAddress     '基底位址
                PageSize(PageNum) = mbi.RegionSize      '区块大小
                PageNum = PageNum + 1   '纪录总区块数
            End If
        End If
        
        lBassAddr = tmpBassAddr + mbi.RegionSize     '对应下一笔
    Loop

    ProgressBar1.Min = 1
    ProgressBar1.Max = PageNum
    finded = 0
    fio = CByte("AOB") '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
                finded = finded + 1
            End If
        Next j
        ProgressBar1.Value = i + 1
    Next i
    
    Label4.Caption = "首次搜寻项目数 --> " & finded & " 笔位址"
    
    If List1.ListCount <> 0 Then
        ReDim itemstr(List1.ListCount - 1)
        For i = 0 To List1.ListCount - 1
            itemstr(i) = List1.List(i)
        Next i
        Command1.Enabled = False
        Command2.Enabled = True
    Else
        Command1.Enabled = False
        Command2.Enabled = False
    End If
    
    '关闭该Process
    CloseHandle hProcess
    '释放阵列配置的记忆体
    Erase BassAddr
    Erase PageSize
    Erase data
End Sub

--------------------编程问答--------------------
引用 2 楼 worldy 的回复:
引用楼主 alanwongk 的回复:
在线等!万分感激!希望有人能帮助我,我会一直F5的!

求高手把源码的TEXTBOX改做 直接输入 "11 22 33 44 55"搜索


VB code
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Str……

我并不是个开玩笑的人

请不要这样去踩我 --------------------编程问答--------------------
引用 1 楼 ybh37 的回复:
Ctrl+H 替换源代码不就可以了嘛
难道理解错了?



引用 1 楼 ybh37 的回复:
Ctrl+H替换源代码不就可以了嘛
难道理解错了?

这段代码能搜出的大小为Byte 0-255

不知为什么把他改做Long搜起来的地址与CE等等的搜出来是不相符

我现在是想把他改作搜Array of Bytes
--------------------编程问答-------------------- 老实说,看了两遍楼主的问题(并没仔细看代码),没有明白楼主的意思。楼主能否再详细解释一下? --------------------编程问答-------------------- 好长哦 --------------------编程问答--------------------

图片以上,可看到吗? --------------------编程问答-------------------- 看不到 --------------------编程问答--------------------
引用 8 楼 ybh37 的回复:
看不到

这张可以吗?
http://i.imgur.com/l7LA5.png --------------------编程问答-------------------- 其实我这专档是一个内存搜索程序

但搜索的范围只在Byte, 现我想改作搜Array of Bytes

不知道怎做,请求高手指教 --------------------编程问答-------------------- 顶顶顶顶顶顶顶! 
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,