我正在开发将以 .exe 文件形式分发的专有软件。为了使用它,用户必须使用他们的白名单凭据(用户名 + 密码)进行身份验证。
我遇到的问题是,在我销售的行业中,有很多“黑客”会尝试反编译您的可执行文件,获取源代码并将其免费分发给其他人。
为了对抗这些逆向工程尝试,我尝试混淆我的代码并使用各种编译器,但到目前为止都没有成功。
我尝试过的:
py2exe编译器:“黑客”设法在一小时内反编译了可执行文件。pyinstaller编译器:与py2exe.pyminifier混淆代码:“黑客”成功地反混淆代码。Oxyry Python Obfuscator:与使用相同pyminifier。那些设法对我的程序进行反编译和反混淆的人解释说,上述 4 个工具的开源性质意味着它们的算法是众所周知的,并且有一些解决方案可以对使用这些开源编译器的程序进行逆向工程和混淆器。
我还没有尝试的:
Pyarmor混淆我的代码。我听说它很好,但要 50 美元,所以我想在购买许可证之前确定它是最好的混淆工具。Cython库为我的程序创建一个 C 包装器,使其用 C 而不是 Python 编译。由于 C 二进制文件更难阅读,这将使程序更难反编译。但是,我从来没有用 C 编程,我想知道是否有更好的方法来编译我的源 Python 代码,而无需学习 C。我不会尝试的:
还请注意,如果“黑客”能够在不访问源代码的情况下禁用白名单系统,他将能够不受限制地将其分发给其他用户。因此,我正在寻找一种方法,它不仅会使反编译程序变得极其困难,而且几乎不可能干预二进制文件并关闭程序代码的某些部分。
我正在寻找最省时的方法来计算 Python 的大列表(大约 100,000 个项目)中非唯一项目的数量。
我到目前为止的方法:
original_list = [1, 4, 6, 2, 2, 1, 5, 3, 2]
duplicates_list = []
for item in original_list:
if original_list.count(item) > 1:
duplicates_list.append(item)
duplicates_count = len(duplicates_list)
print(duplicates_count)
# Should give the following answer:
5
Run Code Online (Sandbox Code Playgroud)
目前,大约 70-80K 项的大列表需要 1-2 分钟来执行计算。我想知道我们是否可以尽可能减少计算所需的时间(可能减少到 3-10 秒)。
我真的很感谢所有的帮助!