XCTF-easyapk

基础知识

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3x8 = 4x6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

Base64规则

关于这个编码的规则:

①.把3个字节变成4个字节。

②每76个字符加一个换行符。

③.最后的结束符也要处理。

base64码表

索引 对应字符 索引 对应字符 索引 对应字符 索引 对应字符
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y

编码举例

3x8=4x6

内存1个字节占8位

转前: s 1 3

先转成ascii:对应 115 49 51

2进制: 01110011 00110001 00110011

6个一组(4组) 011100110011000100110011

然后才有后面的 011100 110011 000100 110011

然后计算机一个字节占8位,不够就自动补两个高位0了

所以有了高位补0

科学计算器输入 00011100 00110011 00000100 00110011

得到 28 51 4 51

查对下照表 c z E z

解题步骤

先把文件放到jeb中,有MainActivity、Base64New、BuildConfig、R四个类

对文件进行反编译,查看MainActivity

可以看到对输入字符串进行base64编码并与5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=比较是否相等,但是对该密文解密会乱码

观察代码发现Base64进行加密,因此去查看Base64New类,发现码表与标准码表有些区别

对新的Base64重新进行编码解码,代码参考

对5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=进行解码,得到flag{05397c42f9b6da593a3644162d36eb01}

posted @ 2021-11-16 10:05  JICEY  阅读(137)  评论(0编辑  收藏  举报