背景:

项目用例需要覆盖场景:window rundll32.exe 调用dll并写一段内容到磁盘, 开始使用msf生成,会被安全软件拦截,索性用go 写一个

代码如下:

  1. package main
  2. import "C"
  3. import (
  4. "fmt"
  5. "os/exec"
  6. "unsafe"
  7. )
  8. //export MyDllEntryPoint
  9. func MyDllEntryPoint(hwnd int, hinst int, cmdLine *uint16, cmdShow int) int {
  10. cmdline := C.GoString((*C.char)(unsafe.Pointer(cmdLine)))
  11. command := fmt.Sprintf("cmd.exe /c echo rundll32>%s", cmdline)
  12. cmd := exec.Command("cmd.exe", "/c", command)
  13. err := cmd.Run()
  14. if err != nil {
  15. return 0
  16. }
  17. // Return a value to the caller
  18. return 0
  19. }
  20. func main() {
  21. // The main function is required, but it can be empty
  22. }

然后编译为dll

  1. go build -ldflags "-s -w" -buildmode=c-shared -o payload.dll

命令行调用时直接传入要写入的路径如d:\4.txt

  1. C:\Users\yeping01>rundll32.exe D:\code\go_project\src\dll\payload.dll,MyDllEntryPoint d:\\4.txt

执行完后会在d:\4.txt内写入了"rundll32"

golang生成一个dll供rundll32.exe调用的更多相关文章

  1. golang生成c-shared so供c语言或者golang调用到例子

    1.golang生成c-shared类型到so 建立文件夹hello,创建main.go文件,内容如下 package main import "C" func main() {} ...

  2. code::Blocks生成的dll 在 java jni 调用遇到的问题

    Test.java__________________________________ public class Test{    public static native void p(); pub ...

  3. window下golang生成静态库给C语言调用

    buidmod为c-archive能在window下生成 ,c-shared则不行 1.golang生成c-archive静态库 main.go package main import "C ...

  4. vue+webpack项目实际工作中需要生成一个配置文件供生产环境使用

    大家都知道webpack打包十分方便,但是在工作中,前端写好的项目需要后端进行部署,就需要有一个配置文件. 使用插件 :  GenerateAssetPlugin , 使用方法 : 1  在项目中安装 ...

  5. Visual Studio 2012网站如何只生成一个DLL文件

    简介: 在Visual Studio 2005,2008,2010版本中,都有Web Deployment工具将网站进行发布,所有代码文件和库文件发布,生成为一个动态链接库文件,而在Visual St ...

  6. rundll32.exe文件详解

    平时很常听到有些朋友说:呀,我系统的注册表启动项目有rundll32.exe,系统进程也有rundll32.exe,是不是病毒呀?这是对rundll32.exe接口不了解,其实其原理非常简单,了解并掌 ...

  7. 命令行下的“蒙面歌王”rundll32.exe

    在Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系统中实现了一种共享函数库的方式.这就是DLL(Dynamic Link Library)文件,即动态链接库,这种库包含了可 ...

  8. Winform 生成不需要安装的exe可执行文件 ILMerge使用

    今天应领导要求,把一个程序打包生成一个可以执行的exe文件,不是安装包那种,类似于绿色文件,就是一个exe,可以直接运行.上网查了一下有一个工具可以实现ILMerge. 参照两个文档http://bl ...

  9. java生成jar并用ikvm生成dll供C#调用

    最近想尝试用C#做NB_IOT北向API接口的访问.北向API的接口的访问需要证书的双向认证,而C#不支持双向认证,所以就使用IKVM在C#中跑JAVA程序实现HTTPS请求部分. 步骤如下: 一.使 ...

  10. Go 程序编译成 DLL 供 C# 调用。

    Go 程序编译成 DLL 供 C# 调用. C# 结合 Golang 开发   1. 实现方式与语法形式 基本方式:将 Go 程序编译成 DLL 供 C# 调用. 1.1 Go代码 注意:代码中 ex ...

随机推荐

  1. [转帖]MySQL 8.0 以后的版本策略变化

    https://www.modb.pro/db/1717815842220630016 产品版本变更   从2023年7月18日开始,MySQL官网出现了一个新的版本 MySQL 8.1.0,直接改变 ...

  2. [转帖]Linux nice和renice命令:改变进程优先级

    https://c.biancheng.net/view/1074.html 当 Linux 内核尝试决定哪些运行中的进程可以访问 CPU 时,其中一个需要考虑的因素就是进程优先级的值(也称为 nic ...

  3. [转帖]Kafka 核心技术与实战学习笔记(六)kafka线上集群部署方案

    一.操作系统-Linux Kafka是JVM系的大数据框架 kafka由Scala语言和Java语言编写而成,编译之后的源代码就是普通的".class"文件 使用Linux kaf ...

  4. [转帖]LVS入门篇(三)之LVS的工作模式和调度算法

    LVS入门篇(三)之LVS的工作模式和调度算法 https://www.cnblogs.com/linuxk/p/9358512.html 1.NAT模型 (1)原理图: ①.客户端(200.10.1 ...

  5. [转帖]SYSTEMD 配置文件

    https://www.cnblogs.com/xiexun/p/13643952.html [Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系 ...

  6. pytest-xdist分布式

    使用pytest框架运行每条case的时候,都是上一条运行结束才会运行下一条,要是有成千上百条case 且每条运行2s那就是2*总条数,会浪费大量的时间和人力.为了节约时间和人力成本,pytest提供 ...

  7. 如何计算一个uint64类型的二进制值的尾部有多少个0

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu 公众号:一本正经的瞎扯 正文 这实在是一个很简单的问题,用代码可以表示如下: func Coun ...

  8. 基于spring security创建基本项目框架

    SpringBoot建项目步骤 建表 新建项目 (package name可以自定义,整个项目只能在该包下) 选择可能有到的依赖 (别忘了勾选SQL中的Mybatis Framework,创建项目 如 ...

  9. 关于git的几点疑问

    git rename后查看之前的记录 对于某个文件进行rename之后,使用show log命令查看之前的修改记录都会丢失,通过命令行方式进行mv之后,在tortoisegit中查看记录还是丢失的 g ...

  10. c++基础之表达式

    这次接着更新<c++ primer> 这本书的读书笔记,上一篇博文更新到了书中的第三章,本次将记录书中的第四章--表达式 左值与右值 在理解表达式之前需要先理解c++中左值和右值的概念. ...