微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用importlib导入pyarmor混淆代码

如何解决使用importlib导入pyarmor混淆代码

假设我有2个模块-一个被PyArmor混淆了。另一个导入混淆模块并使用它:

# obfuscated.py
def run_task(conn):
    conn.send_msg("Here you go")
    print(conn.some_val + 55)
    return 0
# Non obfuscated (user) code
import importlib.util


class conn:
    some_val = 5
    
    def send_msg(msg):
        print(msg)

def main():
    # import obfuscated # This works...but I need to dynamically load it:

    # This does not:
    spec = importlib.util.spec_from_file_location("module.name",r'c:\Users\me\obfuscated.py')
    obfuscated = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(swdl)
    ret = obfuscated.run_task(conn)
    print("from main: ",ret)

if __name__ == "__main__":
    main()

如果我使用import导入模糊文件,那就很好。但是我需要使用importlib动态导入混淆的文件。 importlib不起作用-我得到:

AttributeError: module 'module.name' has no attribute 'obfuscated'

这个想法是,用户可以使用obfuscated.py中可用的API编写脚本,但是需要从其系统上的任何位置加载模块。

反正有实现这一目标的方法吗?

解决方法

我认为我有一种基于此处的内容的方法:https://pyarmor.readthedocs.io/en/latest/mode.html#restrict-mode

我在用户代码和混淆代码之间使用代理。

  • 用户代码可能会混淆也可能不会
  • 混淆的代码显然被混淆了!
  • 不得混淆代理服务器(为简单起见,我混淆了所有内容,然后将原始proxy.py复制到了混淆的对象上)

因此,现在用户代码使用proxy.py而不是importlib来导入obfuscated.py

并且代理仅导入obfuscated.py

# proxy.py
import obfuscated

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。