将 ShellCode 转成 exe 一种比较好的方法

将 ShellCode 转成 exe 一种比较好的方法

1 前述

最近在研究 ShellCode,发现一个将 ShellCode 转成 exe 比较好的方法,此方法需要用到两个工具,分别为 Yasm 和 GoLink。

2 Yasm

在计算机领域中,Yasm 是英特尔 x86 架构下的一个汇编器和反汇编器。它可以用来编写 16 位、32 位 (IA-32) 和 64 位 (x86-64) 的程序。Yasm 是一个完全重写的 Netwide 汇编器 (NASM)。Yasm 通常可以与 NASM 互换使用,并支持 x86 和 x86-64 架构。其许可协议为修订过的 BSD 许可证。截至 2011 年它由 Peter Johnson 和 Michael Urman 开发。

官网:The Yasm Modular Assembler Project (tortall.net)

2.1 与 NASM 比较

优点:

  • 它可以汇编英特尔和 AT&T 的汇编语法;
  • 对编译器开发者提供库和接口;

缺点:

  • 和活跃开发的 NASM 相比,文档仍然不够完善;
  • Yasm 缺乏对可重定位目标模块格式 (OMF) 对象的支持;

3 GoLink

GoLink 是 GoAsm、GoRC 和 GoBug 工具套件的一部分,它们相互之间进行了微调。它们一起使用汇编程序创建 Win32 程序变得非常简单,特点简单、速度快,独立。

官网:Go Tools for Windows (assembler, resource compiler, linker, debugger and information) (godevtool.com)

4 如何转换

将 yasm.exe 和 GoLink.exe 放在同一目录下,然后创建一个 asm 文件,向其中写入以下代码:

Global Start
SECTION 'foo' write, execute,read
Start:
incbin "ShellCode.bin"

目录如下所示:

图片[1]-将 ShellCode 转成 exe 一种比较好的方法-零度非安全
将以上文件放在同一目录下

4.1 编译

编译命令:

.\yasm.exe -f win32 -o ShellCode.obj .\ShellCode.asm

编译之后会生成 ShellCode.obj 文件,有了 obj 文件后,接下来就是链接了。

4.2 链接

命令:

.\GoLink.exe /ni /entry Start .\ShellCode.obj

命令中的 /ni 表示 no information message/entry 表示指定入口,生成的 ShellCode.exe 就可以直接调试了,如下所示:

图片[2]-将 ShellCode 转成 exe 一种比较好的方法-零度非安全
对生成的 ShellCode.exe 进行调试

5 结语

当然你也可以自己写个 ShellCode 加载器 (非常 easy),或者用 ShellCode 模拟器,比如 scdbg (https://github.com/dzzie/SCDBG),方法有很多,不管怎样,自己方便调试就行。

© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享
评论 抢沙发

请登录后发表评论