Python程序代码混淆、编译、打包、运行(桌面程序防破解向)

Python程序代码混淆、编译、打包、运行(桌面程序防破解向),第1张

像Python这种解释性的语言,要想私有拦孙仔化部署的同时又保护好源码,就像是对于鱼和熊掌的追求。

虽然做不到尽善尽美,但是对代码进行混淆,增加一点破解的难度,或许能规避一些泄露的风险。

本次演示环境:linux

确保要发布的包根目录("demo")中有__main__.py文件,这个是程序执行入口。

编译

批量改名.pyc文件

移动.pyc文件

清理.py文件

清理__pycache__文件夹

打包成zip

运行时只要将zip文件作为参数即可

最终整合脚本

调用方式

对于在变量和函数名上的混淆有点小儿科,而对于跨文件的类名的混淆又太容易实现。

所以对于混淆程度的取舍,要视工程的规模而定。

2.1 混淆工具pyminifier

在原来的工具 pyminifier上修复了几个bug。

安装:

python3 安装

或者clone下来,自行安装

使用例子

2.2 源码变更

不同的配置对于源码的要求不同,以下是笔者踩过的坑。

其他混淆想法

结合混淆、编译和打包,尝试出以下发布脚本

主要的思路 :创建一个工作目录tmp,然后在此目录下混淆、编译python代码,完成后把内容打包成pyc文件,再将pyc文件和其他配置文件移凯冲动到dist,发布dist即可。

混淆的目的是最大程度保护源码,在发布到客户端后不被轻易破解简汪。

无法防止反编译,但可以混虚档手淆,让你即使反编译了,也看不懂语法

下面一段源码

sd=1

def seed(s):

global sd

sd=s

def randn(n):

global sd

sd=(sd*1103515245 + 12345) & 0x7fffffff

return sd%n

def main():

seed(11)

for i 蠢搏in xrange(4) :

print randn(313)

if __name__=='__main__':

main()

混淆后

oo000 = 1

if 9 - 9: 差嫌Ii . o0o00Oo0O - iI11I1II1I1I

def oooo ( s ) :

 global oo000

 oo000 = s

 if 11 - 11: ii1I - ooO0OO000o

def ii11i ( n ) :

 global oo000

 oo000 = ( oo000 * 1103515245 + 12345 ) & 0x7fffffff

 return oo000 % n

 if 66 - 66: iIiI * iIiiiI1IiI1I1 * o0OoOoOO00

def I11i ( ) :

 oooo ( 11 )

 for O0O in xrange ( 4 ) :

  print ii11i ( 313 )

  if 78 - 78: i11ii11iIi11i . oOoO0oo0OOOo + IiiI / Iii1ii1II11i

if __name__ == '__main__' :

 I11i ( ) # dd678faae9ac167bc83abf78e5cb2f3f0688d3a3


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12274969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存