CRC原理及其逆向破解方法

本文详细介绍了CRC(Cyclic Redundancy Check,循环冗余校验)的计算原理,包括如何选择除数(poly)、位串处理方式以及CRC码的计算过程。还探讨了基于位运算的高效算法设计,包括直接表算法和反射直接表算法,并提供了CRC-32和CRC-16的标准参数。此外,文章提到了CRC的逆向分析,引导读者深入理解CRC的内部工作机制。
摘要由CSDN通过智能技术生成
介绍:

    这篇短文包含CRC原理介绍和其逆向分析方法,很多程序员和破解者不是很清楚了解CRC的工作原理,而且几乎没人知道如何逆向分析它的方法,事实上它是非常有用的.首先,这篇教程教你一般如何计算CRC,你可以将它用在数据代码保护中.第二,主要是介绍如何逆向分析CRC-32,你可以以此来分析程序中的CRC保护(象反病毒编码).当然有很多有效的工具用来对付CRC,但我怀疑它是否会说明原理.

    我要告诉你,这篇短文里中应用了很多数学知识,这不会影响一些人,而且会被一般的
程序员与逆向分析者很好理解.为什么?那么如果你不知道数学是如何被应用在CRC中,
我建议你可以停止继续学习了.所以我假定你们(读者)都是具备二进制算术知识的.

第一部分:CRC   介绍,CRC是什么和计算CRC的方法.    


循环冗余码   CRC

    我们都知道CRC.甚至你没有印象,但当你想到那些来自诸如RAR,ZIP等压缩软件发给你
由于错误连接和其他一些意外原因导致的文件错误的恼人的消息时,你就会知道.CRC是块
数据的计算值,比如对每一个文件进行压缩.在一个解压缩过程中,程序会从新计算解压文件
的CRC值,并且将之与从文件中读取的CRC值进行比对,如果值相同,那么正确.在CRC-32中,
会有1/2^32的可能性发生对确认数据更改的校验错误.        

    很多人认为CRC就是循环冗余校验,假如CRC真的就是循环冗余校验,那么很多人都错用了
这个术语.你不能说 "这个程序的CRC是12345678 ".人们也常说某一个程序有CRC校验,而不
说是   "循环冗余校验 "   校验.结论:CRC   代表循环冗余码,而不是循环冗余校验.    

    计算是如何完成的呢?好,主要的想法就是将一个文件看成一个被一些数字分割的很长的
位字串,这里会有一个余数---CRC!你总会有一个余数(可以是0),它至多比除数小一.

(9/3=3   余数=0   ;   (9+2)/3=3   余数=2)
(或者它本身就包含一个除数在其中).  

    在这里CRC计算方法与除法有一点点区别,除法就是将被减数重复的减去除数X次,然后留下
余数.如果你希望得到原值,那么你就要把除数乘上X次,然后加上余数.

    CRC计算使用特殊的减法与加法完成的.也就是一种新的 "算法 ".计算中每一位计算的进位值
被 "遗忘 "了.    

看如下两个例子,1是普通减法,2和3是特殊的.
          -+
(1)   1101     (2)   1010     1010     (3)   0+0=0     0-0=0
        1010-           1111+   1111-           0+1=1   *0-1=1
        ----             ----     ----             1+0=1     1-0=1
        0011             0101     0101           *1+1=0     1-1=0

    在(1)中,右数第二列可以看成是0-1=-1,因此要从高位借1,就变成(10+0)-1=1.(这就象普通
的 'by-paper '十进制减法).特例(2,3)中,1+1会有正常的结果10, '1 '是计算后的进位.这个值
被忽略了.特殊情况0-1应该有正常结果 '-1 '就要退到下一位.这个值也被忽略了.假如你对编程
有一定了解,这就象,XOR   操作或者更好.

    现在来看一个除法的例子:

在普通算法中:
1001/1111000\1101   13                         9/120\13
          1001         -                                         09     -|
          ----                                                   --       |
            1100                                                   30     |
            1001         -                                         27     -
            ----                                                   --
              0110                                                   3   ->   余数
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值