安卓逆向中常见校验与加密算法特征总结

1.so库加密算法分析步骤

绝大部分情况下,so下面的加密算法,都是调用openssl里面的加密函数
区分算法的步骤
1.先区分是哪种类型的算法
2.再识别出是哪种加密算法

2.算法的类别

取数据摘要的算法(MD5、SHA)
对称加密的算法(AES、DES)(核心算法就是各种复杂的位异或)
非对称加密算法(RSA)(私钥、公钥)

3.算法调用的两种方式

1.调用动态库的方式调用----比较容易处理
2.将openssl静态库编译进so里面----比较麻烦

4.两种调用方式的分析

如果是第一种方式(动态库调用),那么这些常见的校验与加密算法与java层的类似,都是有明文关键字出现的(MD5,SHA*,AES,DES,RSA)
如果是第二种方式(静态库调用),需要了解各种算法的数据特征来判断
SHA224的算法是SHA256的一个分支一样的存在,只是常量有区别,采用的是SHA256的算法
SHA384的算法是调用的SHA512的算法方法

5.各种加密算法的特征

取数据摘要的算法(MD5,SHA*)算法的数据特征:
由三个放组成:1.初始化 2.运算 3.取结果
常见的表现形式如下:
安卓逆向中常见校验与加密算法特征总结_第1张图片

进入第一个块(初始化方法),可以看到各种算法的固定常量:
MD5有四个固定常量。SHA1算法又5个固定常量。SHA256算法有8个固定常量。
常见表现形式如下:
安卓逆向中常见校验与加密算法特征总结_第2张图片

RC4算法的特征:

有两个256次循环

AES算法特征:

一般AES的密钥长度是128bit 或 256bit,加密出来的数据是128或256的整倍数。
一般情况下密钥都是16字节。
AES的密钥不需要进行初始化,都是直接传明文密钥进来。
方法内有很多复杂的位异或xor。
验证方法:用 hook取得明文传入的密钥,然后经过算法验证是否为AES算法。
如果是CBC算法的,还会拥有一个16字节的IV

DES算法特征:

密钥长度固定8字节。
密钥需要单独初始化,需要运行一个密钥初始化函数。
会每8字节分段加密。
CBC方式会自带8字节分段加密,ebc方式需要在外面手动分段。

RSA算法特征:

非对称加密算法
密钥需要单独初始化
密钥长度一般很长,存储格式一般为base64文本

ECC算法:

密钥需要单独初始化
密钥的首字节一般为0x04 或者 0x03 ,并且长度是类似这种17或31 这种没有4字节对齐的数据

转载自https://www.52pojie.cn/thread-937282-1-1.html

你可能感兴趣的:(安卓)