亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Windows API 錯誤“句柄無效”

Windows API 錯誤“句柄無效”

Go
湖上湖 2023-07-04 16:56:29
我正在嘗試創建一個程序,利用MiniDumpWriteDumpWindows API 轉儲另一個進程的內存。但是,它不斷返回錯誤并提示The handle is invalid。我對我的進程句柄非常有信心,因為我OpenProcess以前使用過 Windows API,所以我認為這就是我使用CreateFileW.我在網上看過這樣的例子,但我無法讓任何東西發揮作用。到目前為止,這是我的代碼:package mainimport (    "fmt"    "os"    "strconv"    "syscall"    "unsafe")var kernel32        = syscall.NewLazyDLL("kernel32.dll")var procOpenProcess = kernel32.NewProc("OpenProcess")var procCreateFileW = kernel32.NewProc("CreateFileW")var procCloseHandle = kernel32.NewProc("CloseHandle")var dbghelp               = syscall.NewLazyDLL("Dbghelp.dll")var procMiniDumpWriteDump = dbghelp.NewProc("MiniDumpWriteDump")func main() {    fmt.Println("[ ] Starting Enum-DumpProcessMemory\n")    pid, _ := strconv.Atoi(os.Args[1])    fmt.Println("[-] PID            :", pid)    processHandle, _, _ := procOpenProcess.Call(uintptr(0xFFFF), uintptr(1), uintptr(pid))    fmt.Println("[-] Process Handle :", processHandle)    path, _ := syscall.UTF16PtrFromString(os.Args[2])    fileHandle, _, _ := procCreateFileW.Call(uintptr(unsafe.Pointer(path)), syscall.GENERIC_READ, syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE, 0, syscall.OPEN_EXISTING, syscall.FILE_ATTRIBUTE_NORMAL, 0)    fmt.Println("[-] File Handle    :", fileHandle)    ret, _, err := procMiniDumpWriteDump.Call(uintptr(processHandle), uintptr(pid), uintptr(fileHandle), 0x00061907, 0, 0, 0)    if ret != 0 {        fmt.Println("[+] Process memory dump successful")    } else {        fmt.Println("[x] Process memory dump not successful")        fmt.Println(err)    }}這是輸出:> .\Enum-DumpProcessMemory.exe 6892 C:\Users\user\Documents\dump.dmp[ ] Starting Enum-DumpProcessMemory[-] PID            : 6892[-] Process Handle : 236[-] File Handle    : 18446744073709551615[x] Process memory dump not successfulThe handle is invalid.
查看完整描述

1 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

問題是我試圖為不存在的文件創建處理程序。


這是我的工作代碼:


package main


import (

    "fmt"

    "os"

    "strconv"

    "syscall"

    "unsafe"

)


var kernel32        = syscall.NewLazyDLL("kernel32.dll")

var procOpenProcess = kernel32.NewProc("OpenProcess")

var procCreateFileW = kernel32.NewProc("CreateFileW")


var dbghelp               = syscall.NewLazyDLL("Dbghelp.dll")

var procMiniDumpWriteDump = dbghelp.NewProc("MiniDumpWriteDump")


func main() {

    fmt.Println("[ ] Starting Enum-DumpProcessMemory\n")


    pid, _ := strconv.Atoi(os.Args[1])

    fmt.Println("[-] PID            :", pid)


    processHandle, _, _ := procOpenProcess.Call(uintptr(0xFFFF), uintptr(1), uintptr(pid))

    fmt.Println("[-] Process Handle :", processHandle)


    if _, err := os.Stat(os.Args[2]); os.IsNotExist(err) {

        os.Create(os.Args[2])

    }

    path, _ := syscall.UTF16PtrFromString(os.Args[2])


    fileHandle, _, _ := procCreateFileW.Call(uintptr(unsafe.Pointer(path)), syscall.GENERIC_WRITE, syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE, 0, syscall.OPEN_EXISTING, syscall.FILE_ATTRIBUTE_NORMAL, 0)

    fmt.Println("[-] File Handle    :", fileHandle)


    ret, _, err := procMiniDumpWriteDump.Call(uintptr(processHandle), uintptr(pid), uintptr(fileHandle), 0x00061907, 0, 0, 0)


    if ret != 0 {

        fmt.Println("[+] Process memory dump successful")

    } else {

        fmt.Println("[x] Process memory dump not successful")

        fmt.Println(err)

    }

}


查看完整回答
反對 回復 2023-07-04
  • 1 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號