FLARE团队的开源工具,用于识别可执行文件中的功能。

flare-capa的Python项目详细描述


capa

CI statusNumber of rulesLicense

capa检测可执行文件中的功能。 你用一个PE文件或外壳代码运行它,它告诉你它认为这个程序可以做什么。 例如,它可能暗示该文件是后门,能够安装服务,或者依赖HTTP进行通信。在

{a4}第一次查看。在

$ capa.exe suspicious.exe

+------------------------+--------------------------------------------------------------------------------+
| ATT&CK Tactic          | ATT&CK Technique                                                               |
|------------------------+--------------------------------------------------------------------------------|
| DEFENSE EVASION        | Obfuscated Files or Information [T1027]                                        |
| DISCOVERY              | Query Registry [T1012]                                                         |
|                        | System Information Discovery [T1082]                                           |
| EXECUTION              | Command and Scripting Interpreter::Windows Command Shell [T1059.003]           |
|                        | Shared Modules [T1129]                                                         |
| EXFILTRATION           | Exfiltration Over C2 Channel [T1041]                                           |
| PERSISTENCE            | Create or Modify System Process::Windows Service [T1543.003]                   |
+------------------------+--------------------------------------------------------------------------------+

+-------------------------------------------------------+-------------------------------------------------+
| CAPABILITY                                            | NAMESPACE                                       |
|-------------------------------------------------------+-------------------------------------------------|
| check for OutputDebugString error                     | anti-analysis/anti-debugging/debugger-detection |
| read and send data from client to server              | c2/file-transfer                                |
| execute shell command and capture output              | c2/shell                                        |
| receive data (2 matches)                              | communication                                   |
| send data (6 matches)                                 | communication                                   |
| connect to HTTP server (3 matches)                    | communication/http/client                       |
| send HTTP request (3 matches)                         | communication/http/client                       |
| create pipe                                           | communication/named-pipe/create                 |
| get socket status (2 matches)                         | communication/socket                            |
| receive data on socket (2 matches)                    | communication/socket/receive                    |
| send data on socket (3 matches)                       | communication/socket/send                       |
| connect TCP socket                                    | communication/socket/tcp                        |
| encode data using Base64                              | data-manipulation/encoding/base64               |
| encode data using XOR (6 matches)                     | data-manipulation/encoding/xor                  |
| run as a service                                      | executable/pe                                   |
| get common file path (3 matches)                      | host-interaction/file-system                    |
| read file                                             | host-interaction/file-system/read               |
| write file (2 matches)                                | host-interaction/file-system/write              |
| print debug messages (2 matches)                      | host-interaction/log/debug/write-event          |
| resolve DNS                                           | host-interaction/network/dns/resolve            |
| get hostname                                          | host-interaction/os/hostname                    |
| create a process with modified I/O handles and window | host-interaction/process/create                 |
| create process                                        | host-interaction/process/create                 |
| create registry key                                   | host-interaction/registry/create                |
| create service                                        | host-interaction/service/create                 |
| create thread                                         | host-interaction/thread/create                  |
| persist via Windows service                           | persistence/service                             |
+-------------------------------------------------------+-------------------------------------------------+

下载和使用

下载独立的capa二进制文件的稳定版本here。您可以在不安装的情况下运行独立的二进制文件。capa是一个命令行工具,应该从终端运行。在

要将capa用作库或与其他工具集成,请参见doc/installation.md以获取进一步的设置说明。在

有关如何使用capa的详细信息,请参见doc/usage.md。在

示例

在上面的示例输出中,我们对一个未知的二进制文件(suspicious.exe)运行capa, 该工具报告程序可以发送HTTP请求,通过XOR和Base64解码数据, 安装服务,并生成新进程。 总之,这让我们认为suspicious.exe可能是一个持久的后门。 因此,我们的下一个分析步骤可能是在沙盒中运行suspicious.exe,并尝试恢复命令和控制服务器。在

通过传递-vv标志(非常详细),capa准确地报告了它在哪里发现了这些功能的证据。 这至少有两个原因是有用的:

  • 它有助于解释为什么我们应该相信结果,并使我们能够验证结论,以及
  • 它显示了一个有经验的分析员可以在二进制代码中使用idapro进行研究的地方
^{pr2}$

capa使用一组规则来识别程序中的功能。 这些规则很容易编写,即使对于那些新的逆向工程人员也是如此。 通过编写规则,您可以扩展capa识别的功能。 在某些方面,capa规则是OpenIOC、Yara和YAML格式的混合体。在

以下是capa使用的规则示例:

rule:meta:name:hash data with CRC32namespace:data-manipulation/checksum/crc32author:moritz.raabe@fireeye.comscope:functionexamples:-2D3EDC218A90F03089CC01715A9F047F:0x403CBD-7D28CB106CB54876B2A5C111724A07CD:0x402350# RtlComputeCrc32features:-or:-and:-mnemonic:shr-number:0xEDB88320-number:8-characteristic:nzxor-api:RtlComputeCrc32

github.com/fireeye/capa-rules存储库包含数百个与capa一起分发的标准库规则。 请学习编写规则和贡献新的条目,因为你发现有趣的技术在恶意软件。在

如果您使用IDA-Pro,那么您可以使用可以使用capa explorer IDA plugin。 capaexplorer允许您快速识别和导航到程序的有趣区域,并在 程序集级别。在

capa + IDA Pro integration

更多信息

卡帕

capa规则

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中