分析android so的时候,总会遇到一些算法,掌握算法的识别特征对逆向工作效率提升很大,小伙伴给我发来一道android题,涉及几个算法,记录一下做题过程。
DDCTF2020 Android reverse01
re1:以此提示为准!!!
最后一次MD5前的输入为:
0x6b,0x93,0x9c,0xfa,0xeb,0x68,0x4b,0x25,0x85,0x54,0xf9,0x1a,0x30,0x84,0xbc,0x7b,0x2c,0xce,0xf3,0x92,0xfe,0x63,0xae,0x67,0xf3,0xe7,0xfb,0x18,0xa2,0xb3,0x32,0x93
1、aes
2、xxtea
3、md5
aes一种常见的分组加密算法,加密过程涉及4个操作
(1)字节替换
(2)行移动
(3)列混淆
(4)轮密钥加
tea一种常见的分组加密算法,密钥为128比特位,明文为64比特位,主要做了32轮变换,每轮变换中都涉及移位和变换。
md5是一种密码散列函数,可以产生一个128位(16字节)的散列值。
无混淆,逐一对几个方法的入参和结果进行动态调试
输入 1234567890
参数1 1234567890123456
参数2 0x10
参数3 1234567890
参数4 0xFFD08C20 加密串存放地址
参数5 0x20
0xFFD08C20 执行的内存发生了变化
参数1 0xFFD08C20 加密串存放地址
参数2 0x8
参数3 固定值 02 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
0xFFD08C20 指向的内存又发生了一次改变
参数1 0xFFD08BA8
sub_8FF8方法中0xFFD08C20指向的内存复制到了0xFFD08BC0
0xFFD08C00是最后的加密结果 和 0xE1D78988 进行比较
使用插件看看用了哪些算法
根据交叉引用提示sub_8FF8 使用了tea算法
根据参数情况可能使用了 xxtea
对称加密 可以在调试的时候使用提示的bytes进行替换得到加密前的bytes
修改0x8 为负0x8
修改内存
解密结果
C5 36 28 3D 5A 2C 84 87 90 D7 53 DC 46 87 CD 5E
E2 7C 5D 8F 33 BA 88 6D 86 A7 44 64 D8 90 E3 E1
往上推看sub_8DDC函数
有key 有256 s盒,可能使用了aes
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课