尬闻天下-第8期-让我们讨论一下Python语言的源代码加密问题

轻巧可爱便于书写和阅读的Python语言,正因为如上的优点使它在最近几年火了起来。其擅长的领域在于人工智能、大数据分析、爬虫等等。
尽管在“开源精神”的影响力之下,越来越多的各种各样的项目选择了开放源代码,但是显然这并不意味着所有人都愿意这样做。
举个栗子,比如Adobe公司,他们的Adobe PhotoShop、Adobe Premiere、Adobe Flash等程序或软件在全世界范围内影响力很大,几乎所有接触过电脑或者了解过的都知道这样的一个传奇公司以及他们创造出的传奇软件。尽管有一部分软件是通过收购其他的软件公司合并进来的,但这并不妨碍Adobe公司大展拳脚。
请试想一下,假如有一天,Adobe开源了他们所有的软件。顷刻,网络上凝结了多少人心血的破解软件瞬间失去了他们原有的“光辉”。
——咳咳,扯远了。实际上我敢肯定,直到地球爆炸的那一刻Adobe公司也不会开源自己的软件。如果他们真的做了,那么我们真的应该举国欢庆,放BGM“今天是个好日子”,顺便让联合国好好褒奖褒奖Adobe公司为人类文明做出的巨大贡献。 :-)滑稽:-)

好,回到Python的问题上。众所周知,Python是一个解释型的语言,它并不像C、C++那种编译型的语言。对于C、C++来说,发布程序只需要编译成exe文件,再加上一些依赖文件或者库文件然后打包发布就好了。尤其是C语言,是直接编译成机器码的,逆向工程难度较大。(我仅仅是稍稍接触了C和C++,如果说得不对希望谅解,不过大概过程就是这样的)。但是对于Python来说,发布程序在通常情况下就意味着公开全部的源代码,即直接发布“.py”的源代码文件——显然这在有些情况下很不妥,比如一些商业公司的核心业务代码,他们可不希望自己的核心实现方法被别人窃取。因此他们可能会使用面向对象的“封装”,只提供get、set方法供他人调用。
于是——我们想出了一种方法。现将.py文件“编译”成.pyc文件。pyc相当于是对py文件的优化,并将其转换成了字节码,使用 python *.pyc 的方式来运行的效率比直接使用 python *.py 的方式高(但是你觉得你感觉得出来吗)?
但是这并不是万事大吉了,Python有官方自带的模块就可以直接解密pyc文件,那也就是说——这个方法就当他是放屁吧。(当然你也可以修改Python解释器中的opcode来实现你自己的pyc“编译”,这样一来只有你自己修改过opcode的Python才能运行自己生成的pyc文件,放到别人的未修改过opcode的Python的电脑上是无法运行你的pyc文件的,因此这样也很不方便)
接着又想到了可以直接将Python文件打包成exe来运行,这样不也是可以达到隐藏源代码的目的吗?目前主流的打包工具有pyinstaller和py2exe两个,但是pyinstaller较后者来说更为强大,比如说生成exe时将所有的东西都全部打包到一个文件里,而py2exe生成时还附带有一大堆依赖文件,在不同主机之间转移或者传输有时候比较麻烦。但是两者都有一个共同的缺点——打包成exe后还是可以解包的,也就是说还是可以通过手段看到源代码,况且需要加密的东西也有可能并不需要被打包成exe,比如一个模块文件。
然后又有什么办法呢?接下来我想向大家推荐一个在线加密的网站,我自己试过后效果还是不错的,但不知道站长会不会“扣留”用户上传的文件,安全性有待考究。接下来放一组测试图片。
网站网址: https://pyprotect.angelic47.com

py文件源代码

这是源代码

上传时的填写

上传的时候我是这样填写的

使用Python自带的功能转换成的pyc文件内容

这是利用Python自带的功能转换成的pyc文件内容”

在该网站加密后的pyc文件内容

这是在网站上加密后的pyc文件内容,并且我们可以看到我之前在网站上填写的“自定义注释”

接下来我们来试试对“自定义注释”的内容进行修改


这是我复制的一个新文件,内容和原来通过网站加密过的pyc文件一模一样


修改后的注释


果不其然,运行失败了


最后这个网站美中不足的是,只支持Python2。尽管我的源代码是可以无报错地在Python3上运行的,但是经过网站加密后就只能使用Python2运行了,如果使用Python3运行会报错。

最后我还想到一种方法:可以先混淆源代码,然后打包成exe格式,然后用exe的加密程序对其进行加密。比如加壳加花指令,以增强逆向工程的难度。但是在对exe加密后可能造成exe文件不可挽回的损坏以至于无法正常运行或者严重报错,这些情况我无法预测,请各位自行测试吧,祝各位好运!

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇