跟着小生学逆向之文件检测

今天小生分享一下刚get到的新技能,文件检测,让我们可以一起在逆向这条路越走越远!工资越来越高!

1、CRC循环冗余校验的原理

1)、文件检测和CRC的关系

差错校验码:(特征)信息字段和校验字段的长度可以任意选定。

2)、循环冗余校验(CRC)的基本原理

根据(N.K)码,生成多项式G(x),进而生成K位信息的校验码。

在k位信息码后在拼接R位的校验码,整个编码长度为N位,因此这种编码又叫(N,K)码,对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-R=K的多项式G(x)根据(G)x可以生成K位信息的校验码。

校验码的具体生成过程为:假设发送信息用信息多项式C(x)表示,将C(x)左移R位,则可表示成C(x)*2的R次方。这样C(x)的右边就会空出R位,这就是校验码的原理。
通过C(x)*2的R次方除以生成多项式G(x)得到的余数就是校验码。

3)、CRC码的生成步骤

跟着小生学逆向之文件检测
首先,将x的最高次幂为R的生成多项式G(x)转换成对应的R+1位二进制数,将信息码左移R位,相当于对应的信息多项式C(x)*2的R次方,用生成多项式即二进制数对信息码做除,得到R位的余数,将余数拼到信息码左移后空出的位置,得到完整的CRC码。

2、分析代码-CRC校验在apk保护中的作用。

对含有CRC循环冗余检测的代码进行分析。

CRC校验中有两个关键点,一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串或多项式,二是把原始帧与上面选定的除进行二进制除法运算,计算出FCS即帧校验序列。
CRC校验在apk保护中的作用

我们对含有CRC循环冗余校验的代码进行分析。
首先我们去看一下Oncreate,这里会直接调用checkCRC方法,判断返回值是否为真,不然程序直接finish

跟着小生学逆向之文件检测
接着我们去这个CRC定义的地方,首先使用zipfile类定义一个对象,获取zip文件路径,然后使用getentry,指定两个文件得到,zipfile,对象ze和ze2。使用getCRc方法,返回未压缩条目数据的CRC-32校验和,将CRC校验返回的值和自定义的值进行一个比较,相等则返回true,否则false。

跟着小生学逆向之文件检测
好了咱们今天给大家讲解了,CRC的原理实现和CRC校验在APK保护中的具体逻辑代码实现。不知道朋友们是不是听明白了呢?
跟着小生学逆向之文件检测