免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: bikkuri
打印 上一主题 下一主题

[文本处理] 文件加密算法求助 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
11 [报告]
发表于 2016-01-06 22:08 |只看该作者
我的想法是对可执行的shell脚本做加密,加密以后shell脚本仍然是只含有可打印字符的纯文本文件,但是原来的脚本的内容不可见。
这一步很容易做到,可以先将原来的shell脚本用gzip压缩成二进制文件,然后对二进制文件进行xor加密,然后将加密后的二进制文件再用base64转成纯文本。
org.sh -> org.sh.gz -> org.sh.gz.xor -> org.sh.gz.xor.64
为了执行加密后的shell脚本,就必须在加密后的脚本的前面再加上一段解密程序,完成以上加密过程的逆过程。
整个程序看起来是这样的。
  1. #! /bin/sh
  2. decrypt(){
  3. ...
  4. }
  5. eval "$(decrypt)"
  6. #-----------------
  7. # base64 encrypted source code org.sh.gz.xor.64 below
  8. ....
复制代码
这样的程序只要跟踪decrypt,甚至只需要改动一行,即将eval "$(decrypt)"改成decrypt > org.sh就可以得到原来的shell脚本源文件。
因此我的想法是要想办法禁止修改前面的解密代码段,如果修改前面的解密代码段将导致解密失败。
我想到的一个办法就是用前面的解密代码段来加密shell脚本。
先将解密代码段的内容用gzip压缩成一个二进制文件decrypt.sh.gz
再将原来的shell脚本用gzip压缩成二进制文件org.sh.gz,然后用decrypt.sh.gz作为密钥文件,对org.sh.gz进行加密,得到org.sh.gz.file_xor,最后再用base64转成纯文本org.sh.gz.file_xor.64。
这样的话,如果修改了前面的解密代码段(明文的decrypt.sh),将导致解密过程中生成的decrypt.sh.gz和加密时不同,从而导致解密失败。
当然如果分析解密程序,还是有办法解密的,但是至少难度比只修改一行就可以解密的前一种方法要大一些。
不知道您有没有什么更好的办法?



回复 9# jason680


   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
12 [报告]
发表于 2016-01-07 13:55 |只看该作者
代码混淆!这个是怎么做到的啊?

回复 11# jason680


   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
13 [报告]
发表于 2016-01-09 10:16 |只看该作者
今天又试了一下,发现您的代码只能处理纯文本文件,处理不了二进制文件。
  1. [box@adeacbce0ed7:~/test]$ date|gzip -c > a
  2. [box@adeacbce0ed7:~/test]$ date +%s|gzip -c > b
  3. [box@adeacbce0ed7:~/test]$ ls -l
  4. total 8
  5. -rw-r--r-- 1 box gpub 49 Jan  9 09:53 a
  6. -rw-r--r-- 1 box gpub 31 Jan  9 09:53 b
  7. [box@adeacbce0ed7:~/test]$ awk 'BEGIN{RS="@#*#@";for(n=1;n<=255;n++)a[sprintf("%c",n)]=n}FNR==NR{y=length-1;for(n=1;n<=y;n++)b[n]=a[substr($0,n,1)];next}{x=length;s="";for(n=1;n<=x;n++)s=s sprintf("%c",xor(a[substr($0,n,1)],b[y-n%y]));printf("%s",s)}' b a  > a.x
  8. awk: (FILENAME=a FNR=1) fatal: division by zero attempted in `%'
复制代码
回复 5# jason680


   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
14 [报告]
发表于 2016-01-10 10:22 |只看该作者
本帖最后由 bikkuri 于 2016-01-10 10:30 编辑
  1. [root@ochip:~]# mkdir test
  2. [root@ochip:~]# cd test
  3. [root@ochip:~/test]# date|gzip -c > a
  4. [root@ochip:~/test]# date +%s|gzip -c > b
  5. [root@ochip:~/test]# printf $(for file in b a; do echo $(cat $file|hexdump -ve '1/1 "%u " ') ;done|awk 'NR==1{for(i=1;i<=NF;i++)k[i]=$i}NR==2{for(j=1;j<=NF;j++){m=i-1-((j-1)%(i-1));printf "\\x%02X",xor($j, k[m])}}') > a.x
  6. [root@ochip:~/test]# printf $(for file in b a.x; do echo $(cat $file|hexdump -ve '1/1 "%u " ') ;done|awk 'NR==1{for(i=1;i<=NF;i++)k[i]=$i}NR==2{for(j=1;j<=NF;j++){m=i-1-((j-1)%(i-1));printf "\\x%02X",xor($j, k[m])}}') > a.x.x
  7. [root@ochip:~/test]# cat a|gzip -cd
  8. Sun Jan 10 10:19:33 CST 2016
  9. [root@ochip:~/test]# cat a.x.x|gzip -cd
  10. Sun Jan 10 10:19:33 CST 2016
  11. [root@ochip:~/test]# cat a|hexdump -C
  12. 00000000  1f 8b 08 00 b5 bf 91 56  02 03 0b 2e cd 53 f0 4a  |.......V.....S.J|
  13. 00000010  cc 53 30 34 00 22 2b 43  4b 2b 63 63 05 e7 e0 10  |.S04."+CK+cc....|
  14. 00000020  05 23 03 43 33 2e 00 5c  46 24 ae 1d 00 00 00     |.#.C3..\F$.....|
  15. 0000002f
  16. [root@ochip:~/test]# cat a.x|hexdump -C
  17. 00000000  1f 8b 08 0b 48 cd 2a bc  02 01 ed 1e 7b 61 c4 fc  |....H.*.....{a..|
  18. 00000010  fe 66 01 00 33 21 29 15  da 94 dc 63 0d 6c ff 10  |.f..3!)....c.l..|
  19. 00000020  05 23 08 be 41 95 ea 5c  44 c2 9e ab 32 34 b6     |.#..A..\D...24.|
  20. 0000002f
  21. [root@ochip:~/test]# cat a.x.x|hexdump -C
  22. 00000000  1f 8b 08 00 b5 bf 91 56  02 03 0b 2e cd 53 f0 4a  |.......V.....S.J|
  23. 00000010  cc 53 30 34 00 22 2b 43  4b 2b 63 63 05 e7 e0 10  |.S04."+CK+cc....|
  24. 00000020  05 23 03 43 33 2e 00 5c  46 24 ae 1d 00 00 00     |.#.C3..\F$.....|
  25. 0000002f
  26. [root@ochip:~/test]# cat b|hexdump -C
  27. 00000000  1f 8b 08 00 bf bf 91 56  02 03 33 34 31 35 32 b6  |.......V..34152.|
  28. 00000010  34 32 b6 30 e6 02 00 ea  bb 72 fd 0b 00 00 00     |42.0.....r.....|
  29. 0000001f
  30. [root@ochip:~/test]#
复制代码
这次好像成功了。

回复 13# bikkuri


   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
15 [报告]
发表于 2016-01-10 10:25 |只看该作者
jason680大神教我做代码混淆吧,谢谢!

回复 11# jason680


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
16 [报告]
发表于 2016-01-10 14:06 |只看该作者
回复 15# bikkuri

https://zh.wikipedia.org/zh-cn/%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86
代码混淆(Obfuscated code)亦称花指令,...
...
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。...
...
代码混淆并不能真正阻止反向工程,只能增大其难度。...
   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
17 [报告]
发表于 2016-01-11 12:17 |只看该作者
本帖最后由 jason680 于 2016-01-11 12:18 编辑

回复 15# bikkuri

http://www.chinaunix.net/old_jh/26/231125.html
Java混淆编译器

https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86
代碼混淆(Obfuscated code)亦稱花指令,...
...
將代碼中的各種元素,如變量,函式,類的名字覆寫成無意義的名字。...
...
被混淆的代碼難於理解,因此偵錯除錯也變得困難起來。
...
代碼混淆並不能真正阻止反向工程,只能增大其難度。...

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
18 [报告]
发表于 2016-01-11 12:21 |只看该作者
回复 15# bikkuri

代码混淆
维基百科,自由的百科全书

代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。


    将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。
    重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。
    打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。

代码混淆器也会带来一些问题。主要的问题包括:

    被混淆的代码难于理解,因此调试除错也变得困难起来。开发人员通常需要保留原始的未混淆的代码用于调试。
    对于支持反射的语言,代码混淆有可能与反射发生冲突。
    代码混淆并不能真正阻止反向工程,只能增大其难度。因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全。

   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
19 [报告]
发表于 2016-01-11 13:06 |只看该作者
那么awk/shell的代码混淆怎么做呢?
我在网上找了很久也没有找到相关资料。

回复 18# jason680


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP