假设我有 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'
这个想法是,用户可以使用内部可用的 API 编写脚本,obfuscated.py
但需要从系统上的任何位置加载模块。
有没有办法实现这一目标?
我想我有一个基于我在这里读到的内容的方法:https : //pyarmor.readthedocs.io/en/latest/mode.html#restrict-mode
我在用户代码和混淆代码之间使用代理。
proxy.py
到混淆后的文件上)因此,现在用户代码导入proxy.py
usingimportlib
而不是obfuscated.py
.
代理仅导入obfuscated.py
:
# proxy.py
import obfuscated
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句