[原创]base64简单逆向分析(下)
前言
上周大概介绍了一下base64的实现原理并且写了个简单的C语言来实现它,结尾举了个不恰当的例子,说将编码的table颠倒一下位置再加密网页就不能解密了,感谢@junkboy 老哥分享的:[解码工具](https://gchq.github.io/CyberChef/),该工具功能非常丰富,涵盖了当前主流算法的加解密,还可以选择base64的编码table进行解密。今天呢对base64的魔改进行一个逆向分析。
首先是站在有算法的角度
这个角度包括有源码或有程序可逆向,应用场景的话比如动态加密资源。或是ctf?(我不确定我瞎说的大佬轻喷) 用户输入一个字符串,然后加密判断是否和指定字符串加密得到的字符串相同。
首先对上个帖子编译出来的exe文件进行一个简单的逆向分析(传送门:https://bbs.pediy.com/thread-251117.htm)。将编译出的exe拖入到IDA中并查看字符串:

可以很直接的看到编码的table为
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
然后查看main函数:

逻辑非常清楚:先调用base64_encode进行加密,然后调用base64_decode进行解密。
查看加解密函数:

这里逻辑和上篇帖子加密的逻辑一模一样,就不在重复。
x32dbg调试
使用x32dbg加载程序并在解密函数出下断点:

F7跟进到函数:

这里可以看到该函数传递进来的加密字符串是:R3V5,用于解密的编码table就是我们定义的table并且内存地址在404080,我们在下面的内存窗口中ctrl + g跳转到该地址:

这里就是用于解密的编码table了。
选中该段内容,右键->二进制编辑->

我们这里随便修改一下这个table的ASCII并保存:

可以看到内存窗口中已经完成了修改:

继续运行程序,得到输出结果:

可以看到这里通过修改编码table已经影响了解密结果。
ps:做完这个操作之后发现好像没有什么用,只是说明一下base64加解密中我们可以操作编码table,然鹅实际中根本用不着。
小结
根据对base64加密算法的浅析,我们已经知道base64算法中,我们可控制的地方为编码table,所以大多数(也有可能是本人比较菜,见识不多)的base64魔改都可以通过修改编码table使其等同于加密时的编码table来还原,魔改base64一般有两种情况。
1. 直接定义新编码table 2. 动态生成新编码table
先来说说第一种,这种方法实现起来比较简单,只需要修改数组就可以。不过弊端是IDA字符串就可能直接暴露。
第二种实现起来稍微麻烦一点,破译难度也略高。接下来详细介绍第二种。
动态生成编码table
关于动态生成的话,我自己试验了两个比较简单的想法。
1. 将原始的编码table打乱并拆解为多个table,比如以六个字母为一组,将原始的编码table替换为十个小的table。 2. 使用代码对原始编码table进行处理,加密时使用新的编码table。
打乱并拆解原始table
将原始table拆分成六组并预定义六个变量

注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
