首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有专注于外壳代码分析的工具?

是否有专注于外壳代码分析的工具?
EN

Security用户
提问于 2012-08-21 05:49:39
回答 3查看 4.5K关注 0票数 4

Shellcode对反汇编提出了某些挑战。它通常会自我修改,跳转到堆栈(可能会放置self代码的地方),并且依赖于标准反汇编工具不关注的某些不寻常的技巧。

考虑到这一点,有哪些工具可用于分解和分析外壳代码?

EN

回答 3

Security用户

回答已采纳

发布于 2012-08-21 06:03:54

利贝母。是免费的。对于Linux,但能够分析win32外壳代码。

痉挛。用Python实现,看起来非常有趣。

票数 2
EN

Security用户

发布于 2012-08-21 07:45:10

因为外壳代码只是一个原始的指令块,所以这些工具并不适合。

瓦特?可执行文件也只是原始的指令块!不是真的。好吧,也许里面有一些用于PE/ELF头之类的数据,或者只是普通的程序数据,但是数据和指令是相同的二进制。更重要的是,可执行文件的部分被标记为(文本、数据),这样操作系统就知道应该把什么当作什么来处理。

对于演示程序,可以使用任意一组汇编程序并键入:

代码语言:javascript
复制
nasm -f bin <asmfile.asm>

这绝对不需要额外的工作条,将汇编程序指令转换为操作码,并将其写入二进制文件中。这就是编写引导加载程序之类的方法。

现在,如果您想分析一些外壳代码,有多种方法可以做到这一点。首先,您可以使用一个线束:

代码语言:javascript
复制
#include <stdio.h>

char shellcode[] = { ... };

int main()
{
    int (*function)() = shellcode;
    function();
}

瞧,你已经离开了--只要让gdb或者类似的东西一步一步就行了。当然,如果您想静态地分析特定的shell代码,那么也有一种方法:

代码语言:javascript
复制
#include <stdio.h>

char shellcode[] = { ... };

int main()
{
    FILE* f = fopen('test.bin', 'wb');
    fwrite(shellcode, sizeof(shellcode), f);
    fclose(f);
}

现在您可以使用二进制blob了。实际上,为了将代码加载到测试工具(也就是逃避它)中,您可能不得不做相反的操作。

如果你在找工具,我建议你使用x86上网本。基本上,它可以归结为选择一个或多个你负担得起的,并有一个游戏。

除非外壳代码包含反调试措施(请记住,它受空间限制),否则运行时调试器与测试工具将工作得很好。

票数 3
EN

Security用户

发布于 2012-11-22 12:20:14

您可以在原始二进制外壳代码文件中使用scdbg来获取它使用的所有api的运行时日志。执行是在libemu仿真环境中完成的。如果-d选项检测到任何内存修改(自解码),它将在内存完成后创建一个转储。该工具还支持定位外壳代码的起始偏移量(在ROP前缀的情况下),以及一个集成的(基本的)调试外壳。有一个youtube视频可以看到它的行动。

http://sandsprite.com/blogs/index.php?uid=7&pid=152

http://www.youtube.com/watch?v=jFkegwFasIw

您可以将转储内存打开到IDA反汇编程序,后者可以将其作为原始的32位代码。您还可以设置基址(通常不是必要的),如果必须使用内置的脚本功能,则可以修改代码。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/18958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档