zer0daysec 发表于 2024-6-28 17:52:49

使用 SCLauncher 对 ShellCode 分析

本帖最后由 zer0daysec 于 2024-6-28 17:52 编辑

工具地址:https://github.com/jstrosch/sclauncher
在恶意软件分析、漏洞利用程序开发和逆向工程时,分析和调试 ShellCode 是个基本活。SCLauncher 是用 C 编写的工具,用来辅助分析 ShellCode,工具会将 ShellCode 转变成 PE 文件,目的在于方便调试及减轻分析压力,在本篇文章中,会介绍此工具的使用方法。

可在 https://github.com/jstrosch/sclauncher 处下载 SCLauncher,SCLauncher 也被整合进了 Flare-VM,也可以从这个视频学习:https://youtu.be/93EeH7GI3iE

一、寻找一些 ShellCode
开始时我们需要 ShellCode,有许多地方可获取 ShellCode,本文使用的 ShellCode 来自 Exploit-DB (https://www.exploit-db.com/exploits/49819),作用仅简单的打开计算器程序



Exploit-DB 提供了很多 ShellCode 示例,如果要使用上图给出的 ShellCode,需要将十六进制数组中的字节值转换为二进制值,CyberChef 能够完成此工作,将十六进制数组中的值应用 From Hex 操作转成二进制值



完成上述操作后可将输出保存为文件,这将与 SCLauncher 一起使用。

二、使用 SCLauncher
SCLauncher 非常容易上手,可通过-h 参数来查看帮助信息



三、将 ShellCode 转成 PE 文件
转成 PE 文件本质上是将 ShellCode 放到 PE 文件中的 .text 部分中去,SCLauncher 还会调整该部分以及文件本身的任何必要大小。条目的地址要么定义为节的开头,要么定义为参数值定义的偏移量。最后,由于 shellcode 通常需要写入其所在的同一内存,因此 .text 部分的权限将是读取、写入和执行。

转成 PE 文件的目的是使用另一个程序来分析 ShellCode。例如使用 IDA Pro 免费版本、Ghidra 或调试器来处理 ShellCode,就像处理常规 PE 文件一样。这不仅可以帮助简化分析,还可以使用其它分析工具。

要转成 PE 文件,唯一需要的参数是 -pe 和 -f。 pe 参数告诉 SCLauncher 从位于通过 -f 参数提供的路径中的文件转成一个 PE 文件。-64 指定 64 位,而 -ep 将入口点调整为此值提供的字节数。



由于此演示的 ShellCode 是 64 位,因此将使用 -64 参数。这将创建一个名为 sc_output_x64.exe 的文件,现在可以分析甚至直接执行该文件,以下显示了使用 IDA Pro free 对其进行反汇编的结果。



四、使用 SCLauncher 进行调试
SCLauncher 的另一个主要功能可辅助调试,因此,还有更多选项可供选择。


参数作用
-bp在入口点位置插入软件断点 (0xCC)
-ep将入口点偏移调度 N 个字节
-pause在 ShellCode 执行之前暂停实用程序的执行 (以附加调试器)

-bp 将在 ShellCode 的入口点插入一个断点,通过实用程序执行此操作可以防止在连接调试器后设置断点,如果只想运行 ShellCode,则需要避免添加任何断点,因为这会导致中断,并且在没有附加调试器的情况下,程序将崩溃。

-ep 调整入口点,表示要调整入口点的字节数。这个调整是基于 ShellCode 的。如果将 -bp 与 -ep 结合使用,ShellCode 将进行调整以在入口点添加断点字节,从而将 shellcode 大小增加 1 个字节。

-pause 在执行 ShellCode 之前暂停 SCLauncher 的执行,这是一种常见模式,因为它允许附加调试器的时间。如果不使用此参数,则需要直接从调试器启动 SCLauncher,而不是从命令行和附加到进程的调试器启动。

五、附加到调试器
要从命令行使用 SCLauncher 并附加调试器,请使用 -pause 选项。如果入口点不是 ShellCode 的开头,也可以使用 -ep,-bp 将在指定处设置断点。请注意,SClauncher 有两个版本:32 位和 64 位。要调试 ShellCode,必须使用与 ShellCode 架构相匹配的版本,SCLauncher 的 64 位版本称为 SCLauncher64。



SClauncher 将提供要附加的进程 ID (PID),附加到调试器后,在调试器中恢复执行,然后返回到此窗口并按 Enter 键。



如果设置了断点,一旦 SCLauncher 的执行恢复,它将被调试器捕获。

六、直接通过调试器进行调试
直接通过调试器进行调试意味着 SCLauncher 和任何必要的参数必须在调试器本身中设置。



请注意,如果你使用 FLARE-VM,则需要指定 SCLauncher 的直接路径,而不是 shim。可能还需要提供 ShellCode 的完整路径。一旦定义了必要的参数,调试就可以开始。



七、结论
SCLauncher 是一个帮助你进行 ShellCode 分析的实用程序,可以在 Github (https://github.com/jstrosch/sclauncher) 以及 FLARE-VM (工具集成进去了) 中找到它。

页: [1]
查看完整版本: 使用 SCLauncher 对 ShellCode 分析