免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9939 | 回复: 14
打印 上一主题 下一主题

perl程序加密,参考哪些书? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-23 16:10 |只看该作者 |倒序浏览
对perl程序加密参考那些书比较好啊

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
2 [报告]
发表于 2012-08-23 16:53 |只看该作者
呵呵,我也想知道...

论坛徽章:
0
3 [报告]
发表于 2012-08-24 11:35 |只看该作者
轻易南村 发表于 2012-08-23 16:10
对perl程序加密参考那些书比较好啊


perl其实不太适合搞成加密的,加密了也能破解。
考虑下c java这些,甚至PHP也能加密(zend optimizer)。

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
4 [报告]
发表于 2012-08-24 22:00 |只看该作者
回复 3# 兰花仙子


    eyedrops 可以破解么?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2012-08-24 22:20 |只看该作者
ttcn_cu 发表于 2012-08-24 22:00
回复 3# 兰花仙子


是那个 Acme::EyeDrops 吗? perl -MO=Deparse 下就出来了,这个级别也太弱了

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
6 [报告]
发表于 2012-08-25 02:09 |只看该作者
回复 5# zhlong8


     Acme::Bleach 这个能顶住perl -MO=Deparse了吧,如何破解?

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
7 [报告]
发表于 2012-08-25 20:44 |只看该作者
回复 5# zhlong8


研究了下Acme:oubleHelix  Acme::Bleach, 发现他们的算法都是固定的,只要修改模块,就可以把执行改成输出源代码了。
加密的原理是使用自己的算法,又不能让其他人看到你的算法,那么似乎只有自己用C写了,搜了下,发现下面的文章解释的很清楚了。。。不知@zhlong8 是否同意。





http://bbs.chinaunix.net/thread-805076-1-1.html

http://www.linuxforum.net/forum/ ... osts&Main=43938
   


一次用C语言写source filter的成功尝试


    目前互联网企业大量的Web开发还是用CGI来实现的,而做CGI的最佳语言首推Perl。
但是用Perl做CGI有一个问题,就是程序以源码形式保存,很容易被别人获得。尤其在
做外包的工程时,如果对代码完全不加保护,首先是使别人轻易得到你研究了很长时间
的技术,想想看,如果买家直接把你的代码卖给别人,你的感觉会如何?更严重的是当
你做外包工程的有些代码也是你自己站点正在使用的代码时,如果让别人得到代码并加
以研究,对于自己网站会造成巨大的安全威胁。


    解决这个问题的办法就是把代码隐藏起来。隐藏代码的方法有很多种,但必须保证
隐藏的代码仍是可执行的。最直接的方法是使用一个Perl编译器,把代码编译成二进制
文件。目前可以获得的Perl编译器有两种:


商业版的Perl2Exe
http://www.indigostar.com/perl2exe.htm
Perl2Exe有多种平台的版本,包括Linux平台,各种平台都有Demo版可以下载。问题是
使用Demo版的Perl2Exe编译过的Perl程序执行后要显示一段版权信息,并延迟几秒后才
退出,因此不能满足我们对程序性能的要求。


Perl标准发布(5.005以上版本)中带的Perl编译器perlcc
目前大部分的Linux发布中的Perl都是Perl 5.005,而不是最新的Perl 5.6/5.7,5.005
版中的Perl编译器还很不成熟,编译简单的程序还可以,复杂一点的程序编译就会出错,
哪怕程序的语法完全正确。而且关于perlcc的文档非常少,出了错也不容易解决。




    所以,使用Perl编译器目前还有很多实施上的困难。第二种隐藏代码方法是写
source filter(源码过滤器)。source filter的工作过程很象C语言的预编译器,它把读
到的源码加以某种处理后再送给Perl解析器。这样你就可以把源码加密,然后通过一个
source filter解密源码并执行。其实设计source filter起初的目的就是为了加密源码,
不过它还能做很多其它的事情,可以说是神通广大。


    OK,下面进入正式的议题:怎样写一个source filter?


首先,要到CPAN上下载一个叫做filter的模块,目前最新的版本是1.19版。然后
tar zxvf filter-1.19.tar.gz
cd filter-1.19
perl Makefile.PL
make
make test
make install


其中decrypt目录下是用C语言写source filter的一个例子。有两个程序:
encrypt:用Perl语言写的加密程序
decrypt.xs:用C语言(更确切地说是用Perl语言和C语言的接口----XS语言)写的
source filter。
这两个程序就是我们的起点了。


可以试试这个source filter,先随便编辑一个诸如打印“hello,world”的程序,取名叫
test.pl,然后
perl encrypt test.pl
现在再看看这个程序
vi test.pl
是不是有些不同了,它已经被加密过了!
执行这个加密过的程序
perl test.pl
是不是打印出了“hello,world”?


    如果上面一切顺利,先别急着hack源码,你还需要一些学习,先仔细看看filter带的
文档
perldoc perlfilter.pod
也可以将其转为html格式
pod2html --outfile perlfilter.html perlfilter.pod


看了这个文档,你可以知道写source filter有三种方法:
1、用C语言写source filter。
2、用独立的可执行文件做source filter。
3、用Perl语言写source filter。


    并且知道怎样用Perl语言写source filter,如果真想用Perl写source filter,还可
以看看Call目录下的Call.pm中带的文档
perldoc Call.pm


    看了Call.pm中的文档,你会知道用Perl写source filter其实是一件非常容易的事。
不过我认为最安全的还是用C语言来写source filter。想想看,当做外包的工程时,如果
用Perl写source filter,source filter本身总不能加密吧?


    不过,用C语言写source filter可就不太容易了,你至少要看过perlguts、perlxs的
文档,会用C语言写Perl extension,还要懂得source filter hooks。有一大堆的概念需
要理解。


    那么,现在该做些什么呢?可以立刻找这些文档来看,看过了再继续下面的步骤。也
可以先跟着我走,把howto里的步骤都做完,不过以后可别忘了看perlguts、perlxs、
perlXStut的文档。这些文档都可以在Perl标准发布里找到。虽然不太容易看懂,但相信我
,你所付出的汗水必将得到回报。


    如果你已经有了perlguts和perlxs的知识,现在可以返回来再看看那个用C(XS)语言写
的source filter。老实说,就算我看完了perlguts、perlxs和filter模块带的文档,我还
是不太清楚怎样完全从头用C语言写一个source filter。好在decrypt下的程序就是为了给
想用C语言写source filter的人当作一个模板来用的。我们所要做的只是把encrypt和
decrypt.xs中过于简单的加密/解密算法换成另外一个稳妥的算法。下面就是我这几天尝试
的经过:


    看看decrypt下decrypt.pm中的文档,我知道了要想最大限度确保加密过的程序不被解
密,需要做到六件事:


1、将Perl二进制文件(就是perl)中的所有符号剥掉(strip)。(好象就是用一个叫做strip
的程序)。
2、将source filter与perl静态链接,因为如果source filter为动态链接库(*.so),别人
可以将其链接到一个经过修改的perl而得到解密后的源码。但是这样你就必须自己编译
perl(可参考Perl源码中带的Install文件),而且如果使用静态链接的perl,安装新的模块
可能也会有问题,是不是每加一个新模块都要重新编译一次perl呢?
(关于编译perl使用静态链接,以及静态链接的perl怎样安装新模块,我没有什么经验,希
望各位网友指教。)
3、编译Perl源码时不要使用-DDEBUGGING编译选项,如果使用了这个编译选项,别人可以
使用-Dp命令行选项调用perl而得到解密过的程序。
4、编译Perl源码时不要使用编译器的调试选项。(比如gcc -g ...)
5、不要将source filter实现为一个子进程。也就是不要用第二种方法写source filter。
如果source filter为一单独的进程,它与perl进程间通信采用管道方式,别人可以写一个
程序偷窥(peek)管道中的信息,从而得到解密过的源码。
6、不要就这样使用这个程序,因为这个程序只是当作一个模板来用的,其中的算法太简单
了。


    知道了这些,我现在要做的就是找一个好的加密算法。我在网上找了半天,终于找到
了一个叫做IDEA算法的源码。可以从这里下载:
http://pcwinner.heha.net/source/download/algo/idea.V1.1.tar.gz


看了一本关于网络安全的书上的介绍,这个IDEA算法有以下的优点:
1、IDEA正在得到全世界的广泛接受,而且认为是比DES更好的选择。
2、加密速率很高,可以在177MB/s的芯片上实现加密。
3、算法可以公开得到,并且容易实现。它已经被注册,以作为电子商务的合适选择。
4、它可以在全世界范围内出口与使用。


作者还说:“到本文写作时(1997年)为止,还没有人能够成功地攻击IDEA。蛮力攻击也试
过了,但是由于密钥长度已经扩展到了128位,据估计即使每秒试10亿个密钥,实验10亿
年也无法找到密钥。因此,蛮力攻击对IDEA并不构成威胁。”(蛮力攻击是可以攻破DES的)


并且我还知道,目前广泛使用的加密软件----PGP中对于数据本身使用的加密算法正是IDEA。
好了,既然这么牛,那就用它吧。


    有了源码,先试试能不能用,我成功地编译了源码(将Makefile中的CC定义为gcc,然
后make),然后加密和解密了几个文件,一切都很正常。


    现在我们先要做一个加密程序,这个很容易,把idea.c和idea_cmd.c合二为一,稍加
改动,加密程序就写好了。


    然后再写一个source filter。这可以通过把加密程序(加密程序就是解密程序,只是
选项不同而已)的源码拷到decrypt.xs中然后换掉decrypt.xs中的算法来实现,不过必须解
决两个问题:
1、由于原来的加密程序的输入/输出都是对文件操作,而source filter的输入/输出都是
缓冲区,并且建立临时文件也不安全。所以加密程序的源码加入decrypt.xs前先要改成输
入/输出都是对缓冲区操作。
2、原来decrypt.xs中的算法由于解密的数据和原数据等长,所以它每次从原数据中读一块
数据,解密后输出,然后再读下一块数据。而IDEA是不等长加密算法,所以必须一次把要
解密的数据全部读到,作为整体解密后一次输出。这样做可能速度较快,但是需要建立很
大的缓冲区,以便能够容纳加密过的Perl程序的所有数据。(加密过的Perl程序会比加密前
长很多)


    经过一番努力,我成功地解决了以上两个问题。只对decrypt.xs的源码做了最低限度
的修改(因为很多代码我还没有完全看懂),实现了我所想要的source filter。


    用新的decrypt.xs换掉filter模块中的decrypt.xs,然后重新安装filter模块,以使
新的source filter生效。


    我写好的加密程序和source filter的源码帖在另一个帖子里。


用法:./encrypt infile outfile
例如:./encrypt test.pl testnew.pl
如果source filter已经安装好,执行加密过的程序
perl testnew.pl


    如果一切顺利,那你就放心用吧,IDEA是足够坚固的。你所需要做的只是修改源程序中
的加密选项和密钥,建议采用128位(16字节)的密钥。算法及其选项的含义请看idea源码
带的文档idea_cmd.txt。


that's all


欢迎各位网友指教
请发至我的邮箱:unruly_wind@163.net


祝各位工作愉快!

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
8 [报告]
发表于 2012-08-25 21:54 |只看该作者
ttcn_cu 发表于 2012-08-25 20:44
回复 5# zhlong8


source filter 本身只不过是读取代码时加了一层,解释器还是要看到最终源代码的,所以作者试图堵住所有执行自己的 XS 扩展的机会,这方面我懂的不多不知道他堵全了没,但只要知道当前解释器的地址或者函数的地址即使用纯 Perl(用 unpack)也可以 deparse 出来

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
9 [报告]
发表于 2012-08-25 22:48 |只看该作者
回复 8# zhlong8


    大体了解了。。。结合你的解释,我有这么一个思路


核心算法用C实现,写成XS
perl控制些流程,预处理文本
最后 staticperl + filter 加密的perl脚本 + XS link在一块。

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
10 [报告]
发表于 2012-08-25 23:19 |只看该作者
防止perl源码泄露,不知道有哪些招数?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP