golang无需编译环境生成exe

admin 2024年10月13日15:24:22评论11 views字数 1849阅读6分9秒阅读模式

二进制如何不依赖编译环境?这个问题困扰了好久,没有编译环境怎么生成呢?

最近在用golang写马子,以前版本是需要依赖golang环境,每次服务端启动之后要想生成客户端,就必须安装golang环境,服务端部署到哪都得安装go,很是不舒服,废话不多说,正题。

1、举个例子如生成exe,那么最简单的是直接硬编码ip地址像BBBBBBBBBBB这样,写客户端代码的时候注意替换掉 | (后面讲到),之后以这个进行编译生成(类似作为模板供使用),通过010editor搜索可以找到如下:

golang无需编译环境生成exe

每次我们需要生成新的马子时都需要修改相关值,木马需要ip、端口等自定义的值,需要替换它。

2、接下来就是替换它为我们的ip地址,查找到sigPtr时直接替换成pachttr(直到查询到末尾以便都替换掉),直接上代码:

package utilsimport "sync"// sigCheck accepts two byte arrays and returns a bool it will compare input// and sig byte by byte to see if we have a matchfunc sigCheck(input []byte, sig []byte) bool {  for i := range input {    if input[i] != sig[i] {      return false    }  }  return true}// doPatch accepts two byte arrays and an intfunc doPatch(output []byte, patch []byte, found int) {  c := 0  for i := found; i < found+len(patch); i++ {    output[i] = patch[c]    c++  }}func GoPatch(input []byte, output []byte, sigPtr, pachttr string,  wg *sync.WaitGroup) {  defer wg.Done()  for i := 0; i < len(input); i++ {    if len(input) < i+len([]byte(sigPtr)) {      break    }    found := sigCheck(input[i:i+len([]byte(sigPtr))], []byte(sigPtr))    if found {      doPatch(output, []byte(pachttr), i)    }  }}

input 参数是读取的二进制文件内容

output 参数是输出新文件的内容

sigPtr 参数是需要替换的值,如BBBBBBBBBBB

pachttr 参数是想替换的值,如ip地址

如何调用GoPatch:这里说明一下output 是输出新文件的内容,是在这个的基础上修改,所以得设置为全局变量

args是一个map,key是sigPtr也就是BBBBBBBBBBB,value是你想替换的值,如ip地址(长度补全之后的),代码如下:

var output []bytevar wg sync.WaitGroupswitch input.OSTarget {  case system.Windows64:    output = staticfs.W64Bytes    for key, value := range args {      wg.Add(1)       go utils.GoPatch(staticfs.W64Bytes, output, key, value, &wg)    }  case system.Linux64:  default:  }  wg.Wait()

替换的二进制肯定涉及到长度是否一致,那么这时只能通过补,保证它长度一致,这样就保证了sigPtr和pachttr长度一致,代码如下:

func padWithHash(str string, length int) string {  if len(str) >= length {    return str  }  padCount := length - len(str)  pad := strings.Repeat("|", padCount)  return str + pad}

str 参数是想替换的值,如ip地址

length 参数是长度,也就是BBBBBBBBBBB的长度

至于为什么使用 | 来补全位数,这个看你怎么来写咯,但是得和ip地址有区分。

最后只需要保存成新文件new.exe,大功告成!!

仅限交流学习使用,如您在使用本工具或代码的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。“如侵权请私聊公众号删文”。

原文始发于微信公众号(柠檬赏金猎人):golang无需编译环境生成exe

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月13日15:24:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   golang无需编译环境生成exehttps://cn-sec.com/archives/3261082.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息