写了个 Python 源码加密的工具,把源码混淆得它妈都不认识

2014-10-28 19:01:51 +08:00
 love
Python目前没有一个好用的混淆工具,所以我写了一个。
另外要说的是编译成pyc是一点用处也没有的,用打包工具打成exe也是容易从exe里提取出来的。

http://pyob.oxyry.com/

新鲜出炉,欢迎提交BUG :)

原理就是重命名程序中的变量名,除了
模块公开名字 (__all__里面列出的名字,没有定义__all__的话就是所有下划线开头的名字)
类公开名字 (除双下划线之外的名字)
关键字参数
之外的所有变量都可以被重命名。
34600 次点击
所在节点    Python
66 条回复
binux
2014-10-28 22:11:54 +08:00
@love 汇编咱不谈,看个js混淆不要太简单。改个名字算什么。。
wuxqing
2014-10-28 22:16:58 +08:00
用cython把py编译成.so就没法看了,还能提供性能,是不是更好?
love
2014-10-28 22:18:52 +08:00
@GtDzx @binux
这个工具的目的不是保护算法秘密,而且哪天你用python写了个软件卖钱时,不被别人直接在你的源码的基础上开发当作自已的软件,所以只要加密强度大于重写的难度就可以了。
icedx
2014-10-28 22:21:10 +08:00
楼主别骗自己了...
就混淆 我遇到过比你这个丧心病狂的
binux
2014-10-28 22:21:54 +08:00
@love 我可以不改你的代码,只调用你的方法啊。外观什么随便找个人再写一遍,把核心调用一下就完了。看不懂就看不懂咯
raincious
2014-10-28 22:23:29 +08:00
@love 我不知道你这代码基于什么理论,看样子是用两个“很难”分辨的字母扰乱视线达到“混淆”的目的。

……这根本就不是代码混淆啊

代码混淆按原内容替换只是一个步骤,还需要分析与法树,优化部分代码,将整个代码格式更改成其他形式。

而你这个跟字符串替换没区别吧?用正则表达式和一个字典表(做排斥)就能实现(猜测你连与法树都没分析,只是看到一个变量就去改了而已,而且估计还是正则)。

并且,想要改回去也太容易了。

试问你为什么非要用0和O?而不用A-Za-z0-9这段随机选取?因为如果你真的着么干了,这混淆就一点效果都没有了(因为已经可以分辨了)。
love
2014-10-28 22:36:40 +08:00
@raincious
用a-z的效果其实差不多,用0O00这样只是看着更酷而已,事实是你还是不知道这个变量代表什么意思。
另外你把这个程序想得太简单了,你用正则搞定试试?
raincious
2014-10-28 22:46:00 +08:00
@love 不知道你有没有写过正则表达式引擎,但是正则表达式引擎比你这个分析器要复杂和强大,所以用正则表达式来做没任何问题。

是的,我知道Python的dir把这个问题变得更简单。

但是这不是要讨论的,而是你这个方法本身就行不通,不能朝着错误的方向努力啊。

http://coolshell.cn/articles/4758.html
binux
2014-10-28 22:59:21 +08:00
@raincious 如果是python,其实用ast就好。。
qingfeng
2014-10-28 23:07:04 +08:00
这根本就不叫代码混淆,这叫字符串替换。楼主你先Google下代码混淆的概念。
est
2014-10-28 23:12:53 +08:00
不是eval()差评。
imn1
2014-10-28 23:28:19 +08:00
应该用 I l 1,这样屏幕不怎么占地,肉眼比o0更难认
love
2014-10-28 23:29:58 +08:00
@raincious 算了没法理解你要表达什么。另外你不知道python的变量有很多作用域规则吗?你能无视作用域规则来个无差别替换?这个必需要分析AST树。事实上这个程序用到了python的ast模块,就不需要自已分析了,只是用这些现成的工具还远远不够。这个加密算法目前就有4000行python代码了。


@est 以前看到过eval版 :) http://pyobf.herokuapp.com/ 可惜无意义。
br00k
2014-10-29 09:06:45 +08:00
这个不叫加密吧。。。
pythoner
2014-10-29 09:30:24 +08:00
已经有现成的工具了:pyobfuscate
https://github.com/astrand/pyobfuscate
love
2014-10-29 09:35:15 +08:00
@pythoner 那个10年不更新了,且有大量BUG。而且不能支持最新的python。
Shazoo
2014-10-29 10:14:34 +08:00
这思路和很早前一个加密perl cgi的程序很像。

功能足够了……

赞一个。
zkd8907
2014-10-29 10:24:24 +08:00
替换变量的话,是不是意味着再替换回来就可以了呢 = =|||
undeflife
2014-10-29 11:04:06 +08:00
网站做得挺漂亮的
geew
2014-10-29 11:27:49 +08:00
@zkd8907 怎么替换回来? 你知道原来的变量名么qaq

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/142171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX