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 程序变得非常简单,特点简单、速度快,独立。
4 如何转换
将 yasm.exe 和 GoLink.exe 放在同一目录下,然后创建一个 asm 文件,向其中写入以下代码:
Global Start
SECTION 'foo' write, execute,read
Start:
incbin "ShellCode.bin"
目录如下所示:
![图片[1]-将 ShellCode 转成 exe 一种比较好的方法-零度非安全](https://res.zeronohacker.com/2021/12/44c58af51b02977a949b35ab671b9c33.png)
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 一种比较好的方法-零度非安全](https://res.zeronohacker.com/2021/12/01c88bb00c7acd34aac18ec4cd83e36c.png)
5 结语
当然你也可以自己写个 ShellCode 加载器 (非常 easy),或者用 ShellCode 模拟器,比如 scdbg (https://github.com/dzzie/SCDBG),方法有很多,不管怎样,自己方便调试就行。
请登录后发表评论
注册
社交帐号登录