UC浏览器代理流量解密
点击上方↑↑↑蓝字[协议分析与还原]关注我们
“ 解密uc浏览器的安全代理流量,看看是不是真安全。”
作为一个从上古网络时代过来的人,一定对UC浏览器有深刻印象,它的流量透明代理功能,就是现在的云加速功能,使用UC的服务器作为访问各个页面的代理,并且对流量进行压缩,在早期网络环境下,很大程度地解决了广大人民的省流量、上网快的重要需求,和Opera有得一拼。
后来,随着互联网的发展,UC浏览器被收归阿里巴巴旗下,各大小巨头纷纷推出自己的浏览器产品,各家浏览器基本都加入了流量代理功能,虽然4G建设取得了很多成就,网速得到了极大提高,但它们都号称是在进行流量的加速,让你用得更爽,至于流量从它们的服务器过一道到底是为了加速还是减速或者其它的啥,我也不知道啊。
再后来,就有些人走路走歪了,号称流量经过他们的服务器的云加密服务,变得更安全了,在访问一些网页的时候,会有类似“已为您开启云加密服务”的提示,让人心里暖暖的,恨不得立马和它分享我心中的一切,没错,我说的是UC浏览器。不知道这个提示现在还有没有。
我一直不明白,我和相好的网站进行隐秘互动,第三者在中间横插一杠,从它那这走一趟,就会更安全,这是什么道理?
光阴似箭,岁月如梭,不知UC的这个功能还在不在,大概率在,不知道这个提示还在不在,可能不在了,毕竟这个提示一没卖点,二来扰民。
在这里,我们从流量的角度来分析这个UC浏览器的号称安全的流量代理功能的加密情况,看看是否能够解密。不过,这是很早之前分析的,可能已经过期了,大家不妨抓个最新版本的流量来比对下。
当然,这里首先告诉你,这个UC服务器加密的流量是可以解密的,是不安全的,你相好的网站如果么有加密,那么uc服务器代理过后,你仍然是在裸奔,只是多了个第三方——UC的服务器,来欣赏你裸奔的流量了。
01
—
流量
首先,我们从直观上来看下UC产生的流量,直接过滤HTTP,一眼看去,很多呀,都是和UC的服务器的交互,看样子这个浏览器并不怎么省流量呀,打开一个网页省下的那么一点点流量,都用在浏览器它自己身上了:
不要慌,这些uc相关的流量大部分是加密过的HTTP,虽然都是能解的那种。
不过,今天我们只关心HTTP流量里面经过代理服务器的流量,也就是我们在使用UC浏览器上网时被UC的服务器代理过一道的流量。
代理服务器的流量使用的域名是类似vs12.bjct.u3.ucweb.com的系列,端口为8080:
流量确实加密了吧。
都是乱码诶,看不懂诶,没关系,下面一步步来把它解出来。
至于这个域名是哪里得到的,在启动时相关的流量里,稍微加了点密,很简单,留给大家去分析。
本来准备写下具体的分析过程,但是,我不记得怎么分析的了,反正一般都是调试加hook啦,所以老规矩,直接上分析结果。
02
—
解密
UC代理流量的加密实现,印象中在libmissile.so这个库中,而不是在libsgmain.so这个库里,大家感兴趣可以去调调。
UC代理流量的加密,核心是一段异或加密,直接IDA反编译拎出来是下面这段:
signed int __fastcall sub_3F214(int a1, int a2, void *a3, signed int *a4)
{int v4; // r6@1signed int *v5; // r8@1void *v6; // r7@1signed int v7; // r2@1int v8; // r9@1signed int v9; // r5@2char v10; // r2@2char v11; // r3@4signed int result; // r0@5int v13; // [sp+4h] [bp-2Ch]@1signed int v14; // [sp+8h] [bp-28h]@1signed int *v15; // [sp+Ch] [bp-24h]@1char v16; // [sp+10h] [bp-20h]@4v13 = a2;v14 = (signed int)a3;v15 = a4;v4 = a2;v5 = a4;v6 = a3;v7 = *a4;v8 = a1;v15 = (signed int *)_stack_chk_guard;if ( a2 + 1 >= v7 ){result = -2;}else{memset(v6, 0, v7);v9 = 0;v13 = -1276528146;v14 = -1483239807;v10 = 0;while ( v9 < v4 ){v11 = *(_BYTE *)(v8 + v9);v10 ^= v11;*((_BYTE *)v6 + v9) = *(&v16 + v9 % 8 - 12) ^ v11;++v9;}result = 0;*((_BYTE *)v6 + v4) = v13 ^ v10;*((_BYTE *)v6 + v4 + 1) = v10 ^ BYTE1(v13);*v5 = v4 + 2;}if ( v15 != (signed int *)_stack_chk_guard )_stack_chk_fail(result);return result;
}
看着很烦,其实就是循环异或,异或的密钥key为8字节数组“0xee,0xb9,0xe9,0xb3,0x81,0x8e,0x97,0xa7”,想动手的朋友可以直接去实现啦,当然,还需要注意,数据体的前6字节是相对固定的数据,跟解密后的数据类型有关,不用拿来异或解密的。
不过,这一步解出来的,有些内容你能看到信息,比如一些规律的HTTP相关的ASCII字符,但这些并不是最终结果,后面的处理还是蛮麻烦的。
异或解密出的结果分成多种情况,包括deflate字典压缩,差分压缩,以及正常数据几个类别,可以根据起始字节的值来区分,当然,你得熟悉相关的编码格式。
例如,deflate压缩的数据格式,有什么明显的标记,这里给大家留个作业,有兴趣的可以去查查啦。
这里的deflate压缩是字典压缩,是有一个字典的,字典有2259字节,贴出来太暴力了,还是有需要的自己去调或者找我要吧。
正常数据和差分压缩数据,在下一节继续。
03
—
差分
正常数据和差分压缩数据的格式的区别在于异或解密后的起始字节是0xa0还是0xad,例如下面这段解密后数据,就是差分压缩的:
00h: AD 00 18 31 40 34 69 69 75 58 6F 54 36 40 56 6E ; ?.1@4iiuXoT6@Vn
10h: 47 75 7A 73 51 6C 40 31 30 33 30 D6 C3 C4 00 00 ; GuzsQl@1030置?.
20h: 01 88 06 00 3F 88 06 00 2F 07 03 32 30 31 35 2F ; .?.??./..2015/
它是有格式的,毕竟,差分压缩,你得知道每个数据是和谁差分的对不对。这些信息,就在数据格式里写好了,继续用上面的数据来说明,这里面,4iiuXoT6是一段base64,VnGuzsQl是另一段base64,这两个base64是数据id值,同时具备数据校验的作用,其中后面一个是当前数据段的数据id,前面一个是与本数据段关联的差分基础数据段的数据id。而字符串1030是本段的原始数据的长度值,再之后,紧接着的就是差分数据。
原始数据需要用这里的差分数据和关联数据id对应的原始数据进行差分获得,怎么差分?当然是用成熟的差分库实现啦,例如,c里面有xdelta3库,下载下来就可以用了。
前面的数据id,作为对原始数据校验的作用,这里描述一下,大家将就着理解:
对原始数据取MD5值(16字节hex形式),然后取前6字节,再进行base64,则得到这段base64。
例如,文件的MD5是:792A2778BE9640642B113F6D7B27B278
则取hex值 79 2A 27 78 BE 96,base64编码得到 eSoneL6W 即为id。
04
—
结束
UC代理流量加密的基本的算法,这里介绍完了,够干吧,大家还愣着干嘛,赶紧分享吧,给我点鼓励。
这个UC代理的流量,确实加密了,不过可以解密,大家上不好的网站,还是少用它啦。
别忘点“在看”、“赞”和“分享”
新的规则,及时收推文要先给公号星标
别忘了星标一下,不然就错过了
长按进行关注,时刻进行交流。
相关文章:

JAVA07 接口与继承
一 动手实验:继承条件下的构造方法调用 1)源代码 1 public class TestInherits {2 3 public static void main(String[] args) {4 // TODO Auto-generated method stub5 6 Child c new Child();7 }8 9 } 10 11 class GrandPa…

学习-现代交换原理与通信技术
帮助学习细化。。。 首先,这书真是难读,像个词典嘛似乎《现代交换原理与通信技术》卞佳丽 北邮 呵呵 呵了个呵 不过词典也有词典的好处 第三章,数字程控电话交换与通信网络 1. 控制子系统 与 话路子系统 前者在于控制,后者在于数…

03-NSPredicate谓词
NSPredicate 谓词 在查询数据的过程中,给NSFetchRequest设置一个过滤条件,不需要讲所有的托管对象加载到内存中去。这样的话就会节省内存和加快查找速度。 一 运算符 1 比较运算符 、< 、 、> 、< 、! 比如说age>80 NSPredicate *pre […

小兵别嚣张,签名算法分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们“分析unity3d游戏小兵别嚣张的签名算法。”不久前,写了个unity3d的引子,介绍了使用工具从unity3d游戏中提取出各种资源和算法:unity3d游戏IL2CPP相关算法简单分析不过内容很少,今天介…

NOIP模拟题——B
【题目描述】我们要从n种食物选m个出来,安排一个顺序吃掉它(们),每种食物有个美味值ai,然后我们有k个规则,每个规则有 xi, yi 和 ci三个数,如果吃完第xi种食物接下来马上吃第yi种食物࿰…

Maven使用常用命令
> mvn clean删除target文件夹> mvn clean test编译测试代码,默认被放到target/test-classes文件夹下面> mvn clean compile编译主代码,并放到target/classes文件夹下> mvn clean package打包代码,我们可以看到target文件下生成了…
04- CoreData轻量级版本的迁移
CoreData版本的迁移 一 轻量级的数据迁移 例如添加新的实体,新的实体属性。 轻量级版本迁移方案非常简单,大多数迁移工作都是由系统完成的,只需要告诉系统迁移方式即可。在持久化存储协调器(PSC)初始化对应的持久化存储(NSPersistentStore…

通da信TCP长连接数据算法分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 分析通da信TCP长连接内部分数据的算法。”作为一款老牌的炒股软件,通da信里面的数据是相当的丰富,免费的也很丰富,准确性也很好,例如,这种股票之间关联的信息。通da信一…

产品经理怎么样用图表传达数据信息(多图)
上文有点仓促了,结尾没有写好。补上: 对劣质成本分析的时候应该注意: 1、在进行劣质成本分析的时候,要注意区分成本和必要的浪费。要注意一个关系,对必要浪费的控制会导致其他成本的上升。例如前文说到四小时送一次货&…

'This NSPersistentStoreCoordinator has no persistent stores 报错
可能是你改变coredata的属性项之后再运行的话在模拟器中会出现这个问题。找上面说的,找到mac下的模拟器中的程序路径,然后删掉其sqlite文件再运行就好了!!!

tcp断开连接,4次握手,为什么wireshark 只能抓到3个包?
用wireshark 抓包,看看tcp 断开连接的过程. 以前书上说tcp断开连接,4次握手,可我为什么wireshark 只能抓到3个包? 百度一下,别人也有类似的疑问。 【求助】书上和网上的资料说,TCP拆除连接需要四次握手。但…

如何在python开发的GUI界面程序中恰当地使用PyExecJS
点击上方↑↑↑蓝字[协议分析与还原]关注我们“解决一闪而过的黑框的小技巧。”在使用python开发过程中,不可避免地,会开发带界面的应用,也会经常使用js来完成一些功能,比如,我使用python开发个了一个小应用࿱…

switch和case的理解
下面是复习java基础知识的时候,发现的一些点,总结下,备忘 int a345;switch (a) {case 23:System.out.println("23"); // break;case 345://条件符合,下面的case条件不会在判断,直接执行;System…

05-自己创建mapmodel自定义迁移方式
自动创建Mapping 如果模型的改变很大或者不支持轻量级数据迁移的条件,则我们需要进行自定义迁移。 使用映射模型 适用于更加复杂的数据的迁移 NSMappingModel 类似于数据模型 NSEntityMapping 告知迁移过程如何在目标数据存储中处理源实体的映射。 映射类型决…

Linux内核之内存管理(4)--缺页处理程序
本文主要解说缺页处理程序,凝视足够具体,不再解释。 //以下函数将一页内存页面映射到指定线性地址处,它返回页面的物理地址 //把一物理内存页面映射到线性地址空间指定处或者说把线性地址空间指定地址address处的页面映射到主内存区页面page上…

WebSocket协议分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 解析websocket数据格式。”好久不见,一晃一年又过去了,祝大家新年好运。今天,给大家分析一个常见的协议——WebSocket,这是一个标准协议,虽然没有HTTP历史悠久ÿ…

《postfix邮件服务下mailq、postmap、postqueue 、 postsuper等用法》
1、Mailq 功能说明:显示待寄邮件的清单。 语 法:mailq [-q] 补充说明:mailq可列出待寄邮件的清单,包括邮件ID,邮件大小,邮件保存时间,寄信人,收信人,以及邮件无法寄出…

[deviceone开发]-一个很炫的手势动画示例
一、简介 这是iOS下的效果,android下完全一致。通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手势控制图片上下动画滑动实现开合效果,还支持声音效果。 二、效果图 三、相关下…
iOS lldb调试
LLDB 初始 LLDB 是一个有着 REPL 的特性和 C ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的…

万物之中,希望至美
一觉醒来,虎年就这么来了。感谢各位朋友过去的一年与我同在。在新的一年到来之际,我首先做个检讨,过去的一年,我们这个公众号,更新不够频繁,属于三天打鱼两天晒网型公众号,没有为大家带来足够丰…

[转]VS2015编译的程序在其他机器上缺少msvcp120.dll
http://www.lai18.com/content/1159618.html 1、 今天分享一个自己在开发过程中遇到的困难。用VS2015开发了一个windows客户端(win32项目),在自己的机器上运行很流畅。当你得意的把releas版本进行打包,并进行发布后,问…

Discuz!的cookie机制
最近在做Discuz!的插件,需要用到cookie,一直觉得奇怪的一个问题,Discuz!大量使用了cookie,但是我在编写插件的时候如果不加入session_start函数cookie就无法使用,按理说Discuz!使用了这么多cookie它的核心应该有调用se…

iOS infoplist 权限设置
<dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> <key>NSBluetoothPeripheralUsageDescription</key> <string>需要使用您的蓝牙</string> <key>NSCalendarsUsageDes…

python使用socket实现协议TCP长连接框架
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 使用python实现协议中常见的TCP长连接框架。”分析多了协议就会发现,很多的应用,特别是游戏类和IM类应用,它们的协议会使用长连接的方式,来保持客户端与服务器的联系,这…

哈夫曼编码与解码
这是我的第一篇博客,希望大神们批评指正。 首先介绍以下什么是哈夫曼树(来自百度百科) 哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一…

012-python基础-数据运算
1、算数运算: 2、比较运算 3、赋值运算 4、逻辑运算 5、成员运算: 6、身份运算: 7、位运算: 8、运算符优先级: 转载于:https://www.cnblogs.com/chhphjcpy/p/6064572.html

优化XCode的编译速度
1.将Debug Information Format改为DWARF 在工程对应Target的Build Settings中,找到Debug Information Format这一项,将Debug时的DWARF with dSYM file改为DWARF。 这一项设置的是是否将调试信息加入到可执行文件中,改为DWARF后,如…

给windows装个Mac黑苹果虚拟机
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ windows下安装使用苹果Mac虚拟机。”平常的生活工作中,我大部分时候使用Windows,偶尔用用Mac。实在是用不惯Mac,但有的时候,有些工作还是需要在Mac上搞,不得不用&#x…

Ajax基础讲解 1
随着web的不断发展,Ajax的运用越来越普及,但是对很多同学来说Ajax稍微有些难懂,今天呢就简单给大家讲解一下Ajax的一些基础入门的知识,希望可以帮到刚学习Ajax的同学。 第一步:首先就是服务器的搭建,关于服…

在虚拟机linux环境下编译windows版adb fastboot
原文出自:http://blog.chinaunix.net/uid-20546441-id-1746200.html我根据虚拟机编译遇到的问题进行一些添加【前提条件】Linux Android源码完整虚拟机磁盘空间100G左右(60G用来存放代码和编译后的文件)swap 30G左右,若太小会导致…