是否有任何受支持的 Fermi 反汇编器?

逆向工程 拆卸 视窗 linux 英伟达
2021-06-27 01:46:38

我最近开始探索基于 GPU 的恶意软件的世界。学术界在这里没有大量论文,但有一些强大的论文。我正在尝试根据 NVIDIA 的 fermi ISA 来改进社区工具(因为 AMD 发布了他们的工具!)

迄今为止,我还没有找到任何 fermi 反汇编器,而是一个 ONE fermi 汇编器:

阿斯费米

他们是否有该社区知道的任何插件/反汇编程序,我的谷歌搜索显然已经出现了 zilch?NVIDIA 提供的工具不适用于使用 vs2010 编译的二进制文件。

============[更新上下文]===================

看来,在一定程度上,我的假设是错误的。NVIDIA 的反汇编工具(nvobjdump、nvdisasm)仅设计用于其 *.cubin(可能是 *.ptx)中间程序集。从恶意软件分析的角度来看,这很糟糕。

在广泛搜索后,我发现了一个名为decuda的死项目(我说死了是因为它已经多年没有提交了。)而且它似乎无法处理最新版本 5.5 和 6.0 中的 *.cubin 二进制文件的反汇编。

1个回答

好吧,在 NVIDIA 的文档中花费大量时间以及最近更新到 6.0 之后,他们为他们的程序添加了cuobjdump从任何给定目标可执行文件中提取 *.cubin 文件的功能。所以你可以像这样从 PE 或 ELF 文件中提取 *.cubin 文件:

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.0\Bin\win32\Debug>cuobjdump -xelf all simpleAtomicIntrinsics.exe

然后nvdisasm在您的目标 *.cubin 文件上使用:

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.0\Bin\win32\Debug>nvdisasm NVIDIA-CUDA-simpleAtomicIntrinsics.sm_50.cubin

哦,顺便说一句,nvdisasm确实使用了控制流反汇编。 cuobjdump使用线性。

通过使用提供的工具,您可以提取操作码,但不幸的是S2R,根据 NVIDIA 的文档,有一些蛇形指令是这样做的:

S2R Special Register to Register

我还没有看到关于特殊寄存器在这个架构上是什么的文档。迄今为止最好的文档在这里