他プロセスのメモリ内容を取り込むには?


かに  2008-08-16 08:48:29  No: 145107

他プロセスでメモリ内容を取得したいのですが、
以下の方法でダメでした。

ご教授願います。

    Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hWnd As Integer, ByRef lpdwProcessID As Integer) As Integer
    Dim PROCESS_VM_OPERATION = &H8
    Dim PROCESS_VM_READ = &H10
    Dim PROCESS_VM_WRITE = &H20
    Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessID As UInteger) As Integer

    Declare Function ReadProcessMemory Lib "kernel32" _
            (ByVal hProcess As IntPtr, _
             ByRef lpBaseAddress As Object, _
             ByRef lpBuffer As Object, _
             ByVal nSize As Integer, _
             ByRef lpNumberOfBytesWritten As Integer) As Integer

    Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        Dim hWnd As Integer
        Dim PID As UInteger
        Dim hProcess As IntPtr

        Dim res As Integer
        Dim bRet As Integer
        Dim dwRead As Integer

        hWnd = FindWindow(vbNullString, "無題 - メモ帳")
        GetWindowThreadProcessId(hWnd, PID)
        hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, PID)

        If hProcess <> 0 Then
            bRet = ReadProcessMemory(hProcess, &H1001000, res, 4, dwRead)
            MessageBox.Show(hProcess.ToString  & ":" & &H1001000 & ":" & res)
        End If
    End Sub


オショウ  2008-08-17 09:51:50  No: 145108

そんな数行で簡単にでいたら、セキュリティー以前に
ウィルスに乗っ取られてしまいますヨ!

まぁ〜できるかできないか・・・を言えば、OSの
タイプに依存します。NT系では、一般的にできま
せんが、Win95/98系はできます。

※  もう手に入りませんが、UnDocumented Windows
    だったかの書籍や、Windows95システムxxxx
    とか言う書籍に、他プロセスをハッキンする
    C言語のソースコードが掲載されていました。

※  デバッガー作る気ならば、できるヨ!

以上。


YuO  2008-08-17 12:56:25  No: 145109

APIの宣言から怪しげですが……。
# As Objectとか。

まずは,エラーチェックをちゃんとしましょう。
「ダメでした。」がどこで起きているのか,どういう理由による物なのかがわかります。

どこで失敗したのか,そのときのGetLastErrorの値は何だったかまで書いて,始めて質問として成立します。
まずは,それらを調べるところから始めて下さい。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加