首页
社区
课程
招聘
[原创]base64算法初探即逆向分析
发表于: 2019-5-1 01:08 21653

[原创]base64算法初探即逆向分析

2019-5-1 01:08
21653

虽说base64严格意义上来说并不能算是加密算法,但的确应用方面来说还算是比较广,在CTF的算法逆向中Base系列算是也比较常见的,萌新刚开始学算法,就以base64为例,对该算法进行一个简单的分析。

简单来说,base64算法就是根据一个base64表,将原始字符的值一一替换。替换规则如下:
图片描述

定义为字符串数组如下:

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

如果需要编码的字节不能被三整除,则会多出1个或2个字节,处理方式是加上"="号,也就是平时我们看到的base64编码最后的"="或者"=="

根据前面的算法分析,已经知道了base64具体的算法实现,接下来使用c语言实现它。
首先需要定义一个base64的字符串数组,用于替换。

接下来定义一个base64加密函数,命名为myEncode,参数有3个,1. 需要编码的字节 2.用于存放编码完成后的字符串 3. 需要编码字节的长度,函数原型如下:

还是回到这张图
图片描述
首先我们需要将第一个字母G的二进制位从8位截取到6位,我能想到的最直接的方法就是直接移位,将G>>2,前面自动补0则会得到00010001,也就是索引17,对应base64的表格得到字母R,第一个字母就替换完成了。


很明显编码的第二个值是由G的最后两个二进制位和u的前面四个二进制位拼接起来的,也就是说接下来应该将这两部分组合起来。
如何得到第一个字母的最后两个字节呢,也是采用移位的方式:
首先将第一个字母左移4位得到01110000,我们这里需要取第一位的最后两位,也就是这里的第三四位。所以将01110000与0x30(十进制48,二进制00110000)得到:

图片描述
接下来将第二个字节的前四个二进制位拼接过来即可。

同样的,先将第二个字节右移四位以此得到需要拼接的部分。然后以类似的思路处理第三个字节。处理完毕将会得到新的四个字符。
图片描述

完整流程大致如下:
图片描述

完整代码如下:

同理,解密函数需要四个字节一次性处理,逻辑一样。
我使用了原生的c语言实现,代码如下:

在main函数中调用:

结果如下:
图片描述

将结果拿到base64网页解密:
图片描述

通过分析过程,我们可以得知base64加解密中我们可控制也最方便控制的是base64的加密表。我们修改base64的加密表即可以实现base64的变异加密,实现起来非常很简单。
将之前的base_table修改为如下:
before:

after:

然后运行程序即可得到:
图片描述
然后到网络上使用base64解密工具进行解密将解密失败。

明天再把逆向分析的模块贴上来~

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 9
支持
分享
最新回复 (7)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
......
最后于 2020-4-7 20:42 被junkboy编辑 ,原因: ......
2019-5-1 12:37
1
雪    币: 175
活跃值: (2531)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
期待逆向分析的模块。
2019-5-6 21:48
0
雪    币: 968
活跃值: (6818)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
4
xingbing 期待逆向分析的模块。
啊哈哈,谢谢支持,之前五一出去玩了。回来忙了一段时间才有空把逆向的模块补上,欢迎讨论~:https://bbs.pediy.com/thread-251248.htm
2019-5-8 18:23
0
雪    币: 175
活跃值: (2531)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
写的很不错,学习了。
2019-5-17 16:05
0
雪    币: 1203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对于我这样的初学者.这样的入门教程真不很不错.很容易理解.谢谢.
2019-6-10 23:10
0
雪    币: 10845
活跃值: (1054)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
7
精化好文
建议读者可以参考readyu的base64工具
2019-7-5 22:38
0
雪    币: 1027
活跃值: (256)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
感谢分享,一看就明白了。
2019-12-25 11:05
0
游客
登录 | 注册 方可回帖
返回
//