如何检测 ptrace 是否已经在 golang linux 中调用

我正在学习golang,我想在golang中实现一个简单的Linux反调试方法。我有一个 CPP 代码,它的工作方式与我预期的相同。但不能在 golang 中做同样的事情。你们能指导我如何在 go 中做同样的事情吗?


这是我用作参考的 C++ 代码。


#include <stdio.h>

#include <sys/ptrace.h>



bool isBeingTraced(){

    return ptrace(PTRACE_TRACEME, 0, 1, 0) == -1;

}


int main()

{

    if (isBeingTraced()) 

    {

        printf("don't trace me !!\n");

        return 1;

    }

    printf("Not being traced...  (maybe)\n");

    return 0;

}

我想在 go lang 中做同样的事情。在 go 中是否可以做同样的事情?


package main


import "fmt"


func main() {

    if isBeingTraced() {

        fmt.Println("don't trace me !!")

        return

    }


    fmt.Println("Not being traced...  (maybe)")

}


func isBeingTraced() bool {

    return true // How to Implement that Cpp Function here?

}


MMTTMM
浏览 107回答 1
1回答

幕布斯6054654

这里是发布的 c++ 代码的 golang 等效代码。package mainimport (    "fmt"    "syscall")func main() {    if isBeingTraced() {        fmt.Println("don't trace me !!")        return    }    fmt.Println("Not being traced...  (maybe)")}func isBeingTraced() bool {     _, _, res := syscall.RawSyscall(syscall.SYS_PTRACE, uintptr(syscall.PTRACE_TRACEME), 0, 0)    return res == 1}但我对这段代码的问题是,在调用 PTRACE_TRACEME 后无法调用 exec.Command() 。将尝试找到解决此问题的方法。如果我有的话,我会在这里引用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go