dashingsoft / pyarmor

A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts.

Home Page:http://pyarmor.dashingsoft.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] `Error message` RuntimeError: to get api PyCell_Get in android 9 aarch64

2963663242 opened this issue · comments

复现步骤:

1.我使用pyarmor gen -r --platform android.aarch64 cleaner混淆脚本
2.将混淆后的脚本放入临时目录,使用c++ 调用 python的方式运行混淆脚本
3. 出现错误dlopen failed: cannot locate symbol "PyBytes_AsStringAndSize" referenced by "/data/app/~~iqwuydN1_t8KbC8bi6_4Sg==/host.dl.testvideodownload-4j6DpGUTb7b0mwmwcdK4IA==/base.apk!/lib/arm64-v8a/pyarmor_runtime.so".
4. 我使用lief在pyarmor_runtime.so上添加其对pyhon库依赖

实际结果

然后报错 RuntimeError: to get api PyCell_Get

预期结果

正常运行

我认为有可能是交叉引用保护使得获取api失败,但是Pymor8.5没有取消交叉引用保护的选项,所以很困惑

commented

首先确认 Python 版本在 Android 是否和加密环境一致,其次可以尝试设置目标平台为 linux.aarch64 一下,如果目标平台是 termux, 参考 issue #1674

我在自己的程序的编译选项加上了 -rdynamic,就可以使用可执行程序去调用混淆后的脚本了,不知道在pyarmor_runtime.so里是如何获取符号的,必须将符号加入到全局符号表中才能使用

首先确认 Python 版本在 Android 是否和加密环境一致,其次可以尝试设置目标平台为 linux.aarch64 一下,如果目标平台是 termux, 参考 issue #1674

后续我会在我自己的so中添加这个 -rdynamic看看能否将so库的符号加入到全局符号表中