none
VB.net 讀取記憶體問題 RRS feed

  • 問題

  • Hi 各位大大 最近不知道為什麼遇到一堆API問題

    我已前式過WriteProcessMemory 但 ReadProcessMemory 參數跟WriteMemory 好像有點差異

    ReadProcessMemory 參數宣告

     <DllImport("kernel32.dll", SetLastError:=True)> _
    
     Public Shared Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, <Out()> ByVal lpBuffer() As Byte, ByVal dwSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Boolean
    
     End Function
    
    

    OpenProcess 宣告

    <DllImport("kernel32.dll")> _
    Private Shared Function OpenProcess(
    ByVal dwDesiredAccess ProcessAccessFlags, _
    <MarshalAs(UnmanagedType.Bool)> ByVal bInheritHandle As Boolean, _
    ByVal dwProcessId As Integer) As IntPtr
    End Function
    
    '================Eunm===============
      Public Enum ProcessAccess As Integer
        AllAccess = CreateThread Or DuplicateHandle Or QueryInformation Or SetInformation Or Terminate Or VMOperation Or VMRead Or VMWrite Or Synchronize
        CreateThread = &H2
        DuplicateHandle = &H40
        QueryInformation = &H400
        SetInformation = &H200
        Terminate = &H1
        VMOperation = &H8
        VMRead = &H10
        VMWrite = &H20
        Synchronize = &H100000
      End Enum

    Form Load

     Dim window As IntPtr = FindWindow(vbNullString, "踩地雷")
    
      Dim ID As Integer
    
      Dim PHandle As IntPtr
    
      GetWindowThreadProcessId(window, ID)
    
      PHandle = OpenProcess(ProcessAccess.AllAccess, False, ID)
    
      Dim buffer() As Byte
    
      Dim rvalue As Integer
    
      Dim bool As Boolean
    
      bool = ReadProcessMemory(PHandle, &H1005194, buffer, 4, rvalue)
    
      MsgBox(Str(rvalue))
    
      MsgBox(Str(buffer))
    參數問題   ReadProcessMemory  為什麼沒有ByRef    用 <Out> 好像沒有傳回數值

    如何糾正 回傳值問題

    錯誤再      MsgBox(Str(buffer))

    buffer 為 Nothing


    2011年4月6日 下午 03:39

解答

  •     Dim buffer(3) As Byte
        Dim rvalue As Integer
        Dim bool As Boolean
        bool = ReadProcessMemory(PHandle, &H1005194, buffer, 4, rvalue)    
        MsgBox(Str(rvalue))    
        MessageBox.Show(BitConverter.ToInt32(buffer, 0))
    
    • 已標示為解答 Just Lin 2011年4月7日 上午 10:44
    2011年4月7日 上午 02:10

所有回覆

  •     Dim buffer(3) As Byte
        Dim rvalue As Integer
        Dim bool As Boolean
        bool = ReadProcessMemory(PHandle, &H1005194, buffer, 4, rvalue)    
        MsgBox(Str(rvalue))    
        MessageBox.Show(BitConverter.ToInt32(buffer, 0))
    
    • 已標示為解答 Just Lin 2011年4月7日 上午 10:44
    2011年4月7日 上午 02:10
  • 謝謝您 沒起懷疑心來回答

    我還以為大家都認為我要做惡意程式之類的

    因為網路上的資源大多都有 Write \ Read ProcessMemory

    真正的目的是寫好玩的

    且此函數不是一此就會  所以我想說快點把它學起來

    但用踩地雷測試有點....

    那個記億體位置是 地雷的數目
    2011年4月7日 上午 10:46
  • 大大可以問你一下嗎  你是如何知道地雷數目在記億體的那個位置呢  可以交一下小弟我嗎?

    2011年4月12日 上午 03:46
  • 請去搜尋一下   關鍵字 : 記憶體搜尋器

    2011年4月17日 下午 02:13