首页
社区
课程
招聘
[原创]基于xor加密的英文文章的解密思路方法
发表于: 2013-9-1 18:35 12854

[原创]基于xor加密的英文文章的解密思路方法

2013-9-1 18:35
12854

xor是经常用到的简单高效的加密方法。
最近研究文本信息的xor加密的解密方法。(仅限于加密过程xor不会变化)
说说思路。希望大家给予补充。
这里 主要针对如下密文:
1原文是英文文章,并且大于100H字节。(长度越长,越容易解密)
2加密是简单的xor单字节运算。xor值可以是00-FF的任意数值
我的思路是这样:
怎么判断一段字符串,是英文文章,并且是没有加密的呢?
我的方法如下
1 绝大部分字符在20H-80H之间
2 少部分字符在00H-1FH之间,不会超过5个
比如换行符是0D0A,TAB是09
3 0A和0D的数量是相等的,(因为正常文章只有换行符拥有ODOA)
4 其他方法。比如常用单词,比如字母出现率(e出现概率很高)  
如何判断一篇文章,是用相同的XOR进行单字节加密的呢?我的方法如下
1 Hex_sum(00-FF出现的字符数量)的多少,如果这个数量太大了,那么基本不是xor加密。
因为对于xor加密前后,这个数量是不会变的。 这里 我设为70H.
2(非常重要) 定位换行符的位置,就是0D 0A的位置。  
因为 1 这2个字符是相等的,并且出现概率不会很低的。在大量字符的文章中,出现相等的字符概率是很低的。
        2 这2个字符位置相近,经过xor加密后,位置也会控制在1-7之间
        3 这2个字符附近的字符大部分为空。具体可以这样计算,所在起始位置AND 0E0H  后的20H中,有数据的字符不会超过5个
       4 正常文件都会有换行符的。
   
我们的方法就是在密文中找到他们两个,然后xor到0D 0A为止。(如果不知道xor多少,可以先xor自己,再xor 0A)
那么 这就结束了吗?非也。如果原来0D是现在的0A 原来0A是现在的0D那么就不行了,属于解密不彻底。
怎么解决呢?方法很多,前面提到是否字符串判断的第四种方法就可以。
我这里采用一个简单但是不通用的,就是对比20H和27H
正常文章20H的数量是绝对大于27H的数量的 (20H是空格)
如果20H小于27H,那么再xor7就可以了

文笔比较差,我们通过一个实例来分析

datahack.exe是我写了一个程序,具有针对这样加密字符串的解密功能。
图片1是我们的解密对象。 图片2是这个图片的字节分析。(各种字节的数量多少)
我们发现,这里相等2个字符分别是7AH和7DH
所以我们对他xor运算,XOR 70H
接下来 就是图3和图4了 这时候0AH和0DH已经相等,可是我们发现字符串并不是我们想要的字符串。仔细看会发现20出现概率很低,27出现概率很高。所以我们把他再xor7 就得到了明文。这时候就是图五和图六,解密成功。
为什么xor7? 因为0D XOR OA=7


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (5)
雪    币: 1392
活跃值: (5172)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
其实 以前用来破译过,就是按概率来计算。

也常常用于检验文章是否出自某个人
2013-9-1 20:49
0
雪    币: 441
活跃值: (149)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
记得很早看的加密入门文章就
2013-9-1 23:21
0
雪    币: 441
活跃值: (149)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
就讲统计学破这种xor,现在应该没有什么意义了吧?不可能把整篇的文章和一个固定值进行xor
2013-9-1 23:22
0
雪    币: 340
活跃值: (922)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
5
windows下的文本的换行符才是\x0d\x0a,unix的是\x0a,mac的是\x0d。
LZ的方法不靠谱。

其实,写个统计频率,结合字典验证的程序,固定的XOR是秒破的。
2013-9-2 07:33
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这应该是最简单的情况,依据英文字母自然频率,严格讲算不上加密。
2013-9-5 10:33
0
游客
登录 | 注册 方可回帖
返回
//