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