欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

基于xor加密的英文文章的解密思路方法

程序员文章站 2022-04-07 09:57:49
xor是经常用到的简单高效的加密方法。  最近研究文本信息的xor加密的解密方法。(仅限于加密过程xor不会变化)  说说思路。希望大家给予补充。  这里...
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是我们的解密对象。

基于xor加密的英文文章的解密思路方法


图片2是这个图片的字节分析。(各种字节的数量多少)

基于xor加密的英文文章的解密思路方法

 我们发现,这里相等2个字符分别是7AH和7DH
 所以我们对他xor运算,XOR 70H
 接下来 就是图3和图4了
基于xor加密的英文文章的解密思路方法

基于xor加密的英文文章的解密思路方法

这时候0AH和0DH已经相等,可是我们发现字符串并不是我们想要的字符串。仔细看会发现20出现概率很低,27出现概率很高。所以我们把他再xor7 就得到了明文。这时候就是图五和图六
基于xor加密的英文文章的解密思路方法
基于xor加密的英文文章的解密思路方法
解密成功。
 为什么xor7? 因为0D XOR OA=7