Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
BrokenFlow — 一个简单的PoC,通过使用隐藏调用来调用加密的shellcode。 | Kitploit
工具/GitHubGitHub/enkomio/brokenflow
加密/解密工具漏洞利用IDS/IPS规避ShellcodeShellcode 生成Payload 开发二进制利用
GitHubenkomio/brokenflow

BrokenFlow

一个简单的PoC,通过使用隐藏调用来调用加密的shellcode。

查看仓库
115213年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

BrokenFlow

使用隐藏调用来调用加密shellcode的简单PoC。

介绍

此代码使用一个简单技巧隐藏实际跳转到我们shellcode的指令。这应当使静态分析或模拟更具挑战性。

与往常一样,如果这个概念已在其他论文中解释过,请给我发消息,我会很乐意将其添加到参考文献中。

详情

使用此技术的内存布局是标准的,如图1所述。

root@kitploit:~
    ┌───────────────────────────────┐
    │                               │
    │                               │
    │                               │
    │                               │
    │   encrypted shellcode         │
    │                               │
    │                               │
    │                               │
    │                               │
    │                               │
    │                               │
    ├───────────────────────────────┤
    │                               │
    │                               │
    │  decryption loop              │
    │                               │
    │                               │
    └───────────────────────────────┘

图1. 内存布局

解密循环将解密shellcode并跳转到它。所有"魔法"都在解密循环内部,因为在完成解密shellcode后,解密循环将开始解密自己的代码。第一条指令的解密将导致跳转到我们的shellcode,并在下一次循环迭代时执行:)

以下是相关部分:

root@kitploit:~
@decryption:
xor word ptr [eax], 06799h ; <jmp esi 字节> XOR <此指令的前两个字节>
add eax, sizeof word
dec ecx
loop @decryption

如你所见,解密循环不包含任何跳转到已解密shellcode的指令。汇编代码以以下二进制格式汇编:

root@kitploit:~
66:8130 9967             | xor word ptr ds:[eax],6799                                 
83C0 02                  | add eax,2                                                    
49                       | dec ecx                                                      
E2 F5                    | loop 450006

在这种情况下,解密密钥必须是06799h,因为8166h(解密循环第一条指令的前两个字节)与6799h(XOR密钥)之间的XOR运算是e6ffh,它被汇编为jmp esi。换句话说:

root@kitploit:~
0x8166 (xor word ptr ds:[eax],...) XOR 0x6799 (解密密钥) == 0x6eff (jmp esi)

通过将ESI寄存器设置为我们shellcode的起始地址,我们可以实现执行:)

下面是一个调试示例。最初,加密的shellcode被复制,接着是用于解密和调用shellcode的代码。可以注意到,在解密循环第三次执行后,指令xor word ptr ds:[eax],6799变为jmp esi。

BrokenFlow execution

使用方法

使用此技术的步骤如下:

  • 使用XOR密钥0x6799加密你的shellcode。加密循环迭代必须使用WORD大小步长(2字节);
  • 创建如图1所示的内存布局。加密的shellcode大小必须是2的倍数;
  • 将寄存器ECX设置为已分配内存的大小;
  • 将寄存器ESI设置为已分配内存的起始地址(该地址包含要执行的shellcode);
  • 调用shellcode解密代码

可能的改进

为了使解密代码更不易被识别,可以使用替代方法来调用shellcode。为了拥有更多自由度,我们可以考虑增加每次迭代加密的块大小。在我的PoC中,我使用了2字节,因为jmp esi需要两个字节,但我们可以使用4字节或8字节的块大小,使操作者拥有更多适合4或8字节块的替代方案。根据选择的调用shellcode的方式,加密常量也将改变。

下载工具