为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MMTTMM 2023-07-31 16:03:01
我正在学习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 mainimport "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?}
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

这里是发布的 c++ 代码的 golang 等效代码。


package main


import (

    "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() 。将尝试找到解决此问题的方法。如果我有的话,我会在这里引用。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信