Python程序中加密的标识

2024-10-02 22:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要确定python程序在执行期间是否进行了某种加密。你知道吗

我尝试过一些方法(我将按难度排序):

  1. python中程序的源代码可以包含同义词,这些同义词可以标识正在使用的某些潜在加密(https://github.com/Wind-River/crypto-detector)。这种方法的问题是,代码中的一点模糊可能会影响识别。你知道吗

    在下面定义的代码中,我们有一个变量字符串,其中包含负责某些加密的所有代码,但通过此分析,我们无法识别正在发生的加密:

    def handle (arg):
        from base64 import b64decode as printf
        string = 'ZnJvbSBDcnlwdG8uQ2lwaGVyIGltcG9ydCBBRVM7IGZyb20gQ3J5cHRvIGltcG9ydCBSYW5kb207IGtleSA9IGIn
    U2l4dGVlbiBieXRlIGtleSc7IGl2ID0gUmFuZG9tLm5ldygpLnJlYWQoQUVTLmJsb2NrX3NpemUpOyBjaXBoZXIgPSBBRVMubmV3KG
    tleSwgQUVTLk1PREVfQ0ZCLCBpdik7IG1zZyA9IGl2ICsgY2lwaGVyLmVuY3J5cHQoYidBdHRhY2sgYXQgZGF3bicpOyBwcmludCBt
    c2c = '
        eval (compile (printf (string), '<string>', 'exec'))
        return None
    

    另一个代码示例:https://gist.github.com/robertonscjr/e3f658cce0c0253e2e076e0457635d86

    此代码不包含可以与使用加密关联的字,因此此方法的效果很差。这个工具的无效性是显而易见的,因为误报可能发生在明显不加密的代码中:

    def handle (arg):
      crypto = 2
      return crypto
    
  2. 在汇编级别,任何程序的指令都可能指示加密算法的可能使用,因为这些算法通常有一种指令模式。grap工具文章是一个低级指令模式识别工具(https://eprint.iacr.org/2017/1119.pdf),它展示了AES执行步骤的低级模式。你知道吗

    在这种情况下,这种方法有一个问题:grap所做的模式匹配是通过任何程序的x86-x64反汇编来完成的,而为python执行x86-x64反汇编的过程意味着生成一个python程序的二进制文件(这是本机解释的)。你知道吗

    我使用了一个名为pyinstallerhttps://www.pyinstaller.org)的工具,从稍微模糊的python程序(https://gist.github.com/robertonscjr/e3f658cce0c0253e2e076e0457635d86)生成一个二进制文件:

    pyinstaller --onefile ~ / fake_aes.py
    

    对于grap的执行,我使用了位于grap目录上的现有AES模式,结果并不乐观,因为下面描述的命令不会导致任何模式匹配:

    grap -q ~ /grap/patterns/crypto/ ~/fake_aes.bin
    

    怀疑之一是grap工具没有成功,因为二进制转换改变了指令的行为。问题:问题应该与pyinstaller如何生成Python二进制文件以及Python代码的行为是否在生成的二进制文件中维护有关?你知道吗

    如果pyinstaller生成了正确的二进制文件并且无法工作,那么我们还有第二个问题:我们需要找到另一个模式来grep吗?这种方法的问题是,发现另一种模式可能非常耗时,而且在严重的混淆(https://youtu.be/3hSpmcoQ578?t=1999)情况下也不是很有效。


Tags: 文件工具方法代码https程序githubcom