文档章节

关于Base⑥4编码换行回车引发的blood事件

kingsOSZT
 kingsOSZT
发布于 2016/05/17 12:49
字数 733
阅读 76
收藏 0

分析某个sdk的通讯协议,万变不离其宗,基本都是对称加密或者非对称加密后圌进行通讯完整性以及内容可靠性的反复校验。

周三稍微逆向差不多看了实现,偷懒没继续,周四下午任务交接发现以为不需要去分析的一个二次加密在某个不起眼的小参数中决定性的使用了多重加密。

自己python模拟发包时,发现服务器总是返回失败,即使数据完全相同,因为本地只有rsa的公钥,而rsa生成结果又非唯一,逆向过程进入瓶颈。

最后日志打印加hex对比后,发现在base⑥4的两个字符串中存在0x0a换行操作符。

但是当时并未意识到是base⑥4产生的问题,因为在问题初始,自己对比md5算法的向量表,对比了base⑥4的响亮表,查看了rsa和des的padding方式,验证了rsa和des的加密算法,全部没找到问题。

最后以为发现的问题是在一个list转字符串的操作中,日志打印发现list转换完毕后会有回车产生,查找list的迭代器,并没结果,盲目的相信了应该是list产生的问题,大概主要还是对于jАVa的不熟练吧,毕竟始终是用的是map。

上线test发现问题依旧存在,最后只能是log大 氵 去,各种输入输出全部打印,黑盒test,最后的最后抱着试试看的态度打印base⑥4的结果后才豁然开朗。

虽然base⑥4用了这么多年,竟然没有看过标准,也真是汗颜。

 

根据RFC 822规定,每76个字符,还需要加上一个回车换行。

大多数来说我们使用的各种base⑥4,都是没有遵循这个原始标准的。或者,算法内部使用这一标准,然而输出结果会替换掉回车换行,我想encode 或者 decode使用这么多年,或许还是有大部分人并不知道这一标准,或许对于开发同学来说, 问题定位想对容易,然而我使用的却是两个工作日整加一个通宵的三十多个小时,真是累吐了!!!!!!!!! 

最后,adroid自身框架provide的base⑥4中的算法,可以通过参数来控制是否添加换行符号。

Base⑥4.encodeToString(plain.getBytes(), Base⑥4.DEFAULT);

https://zh.wik1pedia.org/wik1/Base⑥4   百科-Base⑥4

https://developer.android.com/reference/android/util/Base⑥4.html  android developer-base⑥4

 

--------------

 

此博文格式化后跟狗屎一样,为什么呢?功劳属于oschina关键词过滤功能的开发人猿,是的,人袁?人缘?人猿?!!!敏感成了公务袁??????

© 著作权归作者所有

共有 人打赏支持
kingsOSZT
粉丝 2
博文 26
码字总数 8456
作品 0
松江
使用VIM将一行X509证书分解为多行的方式

引: 数字证书有多种格式,对于经过base64编码的证书而言,如果你将所有内容合并成一行,微软操作系统还是能正确解析的,然而如果你使用OpenSSL的x509命令解析,就会报错,可见,微软的兼容行...

晨曦之光
2012/04/10
1K
0
字符集与编码(八)——ASCII和ISO-8859-1

在前面其实也谈到了ASCII了,但并没有很具体,作为一个完整系列的一部分,还是有必要谈一下,也作为后面讨论的一些基础。 ASCII 它的全称是American Standard Code for Information Intercha...

国栋
2014/12/03
0
1
【详解】回车 换行 0x0D 0x0A CR LF \r \n的来龙去脉

1、【回车和换行的历史】 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行,需要回车换行,此过程,要用...

阿信sxq
2014/02/12
0
0
也谈文本文件与二进制文件

网上关于文本文件与二进制文件的文章很多,但遗憾的是,这些文章讲得都比较 散。下面我将结合所查到的资料,从多个角度谈谈文本文件与二进制文件。 一、文本文件与二进制文件的定义 大家都知...

长平狐
2012/09/03
163
0
流之过滤器流(PrintStream)

PrintStream类是大多数程序员都会遇到的第一个过滤器输出流,因为System.out就是一个PrintStream。不过,还可以使用下面两个构造函数将其他输出流串链到打印流: public PrintStream(OutputS...

柳哥
2014/10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
11
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
4
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部