春节要来了,可是电视家却走了,没有春晚看了

春节马上就要到来,可是随着时代越来越进步,年味也越来越淡了,尤其在海外,更没有国内的气氛浓郁,所以只有每年看春晚才会让我感觉到今天又是新的一年了。

   而且长大后会发现更有年味的不是新年,而是新年前夕,家家户户都在忙着办年货,各种亲子活动,塞满汽车的街道,还有拥挤的地铁,与准备返乡的游子们,无处不在弥漫着迎新气氛。

   然而电视家却走了(其实和电视家没什么关系,只是剧情需要),少了个可以看春晚的应用,所以就在网上找了其他取代品。然后搜索到了一款名为“hdp直播”的应用,本以为可以好好观看,就将它安装上了,结果提示此版本已停用,并且提示更新,并命名为“黑白直播”。行,那就跟着提示操作一顿吧。

   安装完后,心想应该没问题了,结果当我打开软件的时候,出现了以下的画面

 什么鬼哦,还要微信扫码登录,一定没什么好康,我就不扫。那就逆它吧。

      温馨提示; 本教学不面向0基础,如果需要0基础教学,请翻看我往期的文章,因为人总要进步,不能总从0开始去解说。

      从接触到认知 到熟悉 再到累积,每个人在任何人事物上必定会经历的事情,逆向亦如此,当你累积到一定程度,基本上就会忽略掉很多没必要的繁杂步骤。就像各种一键工具,也是经过前人的累积制造出来便于简化后人使用的工具。

     所以在操作上也一样,并非每一次都得从0开始去部署到完成。

    那么从扫码界面,如果面对一位有经验者,自然直接就会想到,它的作用是限制未登录者使用,所以自然就会有个身份检测判断,检测用户信息之类的代码,这样就可以直接缩小范围定位到用户相关的范围,比如check user,login,userid 等等之类的关键词来精准定位到关键点。有了这初步信息,就可以进行反编译了。

    下图中可以看到代码虽然经过了混淆,但部分关键信息还是暴露了。

  进入到checkusertype方法内,可以看到有一段检测用户信息的代码,但是在标记处,有一条Boolean判断,当boolean结果位true的时候,就会直接返回return-void,不再继续往下方代码执行。

那么就试试让它返回true,看看是不是就绕过了登录检测,修改代码如下

 修改完毕后重新安装,会发现登录弹窗不见了,说明修改正确,但同时又遇到了新的问题,直播源不工作了。。。。

 同时在设置菜单里发现了一段扫码捐赠的字眼,所以不排除扫码登录后也许还要捐赠才能正常使用(毕竟现在很多开发者都喜欢用捐赠的方式变相收费,要钱也不敢坦荡荡)。

由于此处是教学,为了验证直播源不工作是另一个问题,下图提供一张在对原包不做任何改动下仅更换签名的结果。

并且从上面第一张图里也可以看出,在未登录的情况下,直播是可以正常播放,只是多了一幕遮拦窗口。


       至此可以百分百确定,软件有自校验,防止他人二次修改/破解。这里先说明一下,java层是有签名验证,主要作用是让直播源无法正常播放,关于java层的签名保护,一般使用各类一键过签都能解决。这里就不做说明了。

      教学主要讲解直播源不工作的校验,那么从经验上来说,这年头 搞开发的一般做保护基本都不会着重于java层了,大部分都会在so层做手脚。所以先排除java层吧,先看看lib里都有哪些文件吧?


      图中可以看到一共有14个so文件,但是大部分都认识,所以可以排除,如果真的不认识也可以借用libchecker这软件来查询,基本大众的so库都会有收录。

  不知道大家是否还记得在文章开头介绍过这软件的名称为“黑白直播”,可是在直播源不工作界面,又有了另一个名称“橙色直播”,英文“orange live”。那么刚好so里也有一个名为orange开头的so文件“liborange_params.so”,文件体积也不大,只有72.23k。

       所有巧合必有故事,所以不可能刚好也以orange命名,那么可以先从java层看看,到底调用了orange_params哪些函数吧。

        图中可以看到只有三个函数被调用,然而这三个函数返回的都是字符串类型,那么定位一下调用的位置,看看具体这些函数代表什么吧。

   下图中可以看到,ok和os分别是AccessKeyId和AccessKeySecret,其实这两个作用是用来连接阿里云OSSService的key和密钥。

 接着再看看pt,它作用是用来播放pcdn直播源的token,所以这三个值都必须有,才能能播放指定的直播源。

由于这三个函数都在java层,也就没必要去分析orange_params的内容了,只要把这三个值取出来就好。所以可以直接hook获取。


      先来看看假设对不对,可以先hook改过的包,看看返回值都有哪些。然而从图中可以看到结果为三个值都返回null,说明触发了校验。

 那么接下来再看看原版的返回值,可以看到是有返回值的,并且经过测试,返回值是固定的。

  至此orange_params.so已经没有用处了,可以在修改版上把它删去。直接在java层实现返回值即可。修改结果如下。

修改前:

修改后:

完成后再次安装测试,发现还是出现了同样的界面,直播源依然不工作。说明还有其他地方有校验。由于从上面的分析过程得出,校验大概率在so层,同时文件体积基本不会很大。所以符合小体积,又陌生的文件得出结果有4个。这是初步锁定。

接着通过试试抓包抓一下直播源看看,直播源都是以zip压缩打包,运行程序的时候都会把直播源都下载到本地,但是直播源都是经过加密的。所以第二步猜测直播源是不是没有正常解密。

 最后再来定位到错误界面的位置。错误界面是一张图,所以只要找出了资源ID,就可以再java层定位。如下图可以看见触发条件有两个,当advertDetailModel类为null或geturl为空则触发错误。

所以总结得出结果最大可能就是stream_decode.so这个文件有问题,就如字面上的意思,流媒体解码。和orange_params同样的操作手法,先看看java层调用了哪些函数?

    下图中可以看见只有一条函数被java层调用。

 同样的hook一下修改版的这条函数看,可以看见输出和输入结果一模一样。说明直播源根本没有解密,真是吃啥拉啥(dcc是传入加密的数据,dc是返回解密后的数据)。所以才导致了直播源不工作。

 那么是不是说明我们得使用ida来反编译so分析算法了?答案是否定的,像我这样懒的人能不用电脑就不用电脑。这个时候该怎么做呢?

      答案就是先hook原版看看,如下图所示,原版的的dc输出结果是有完成解密的。但是同时也告诉了我们不需要去分析so里的算法了,直接肉眼就可以解密。

 我们来看看一条比较短的加密前和解密后的数据。可以看见加密的前两位v1和解密后的最后两位pc做了对调,然后其余数据照常,至于{y变成了://,然后就这样简单的完成解密了(难道这就是传说中的看图破解?)。

 所以得出结论就是除了头尾二个字符对调,并且以"{"开头的两个字符会和so里的对照表进行转换之外,其余字符都照旧。所以只要我们多抓几条直播源的加解密结果,就能得到了"{"完整的对照表。这里就不一一演示了,直接给出修改结果。同样的stream_decode.so也可以删掉了,直接在java层修改。

修改前:

修改后:

最后来看看最终结果,你学会了吗?

my-tv-v1.4.5.exe 成品下载地址,解压之后自行安装icon-default.png?t=N7T8https://www.alipan.com/s/wp8F5MS76cK 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试突击】生产环境面试实战

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复…

Linux版本下载Centos操作

目录 一、Centos7 二、下载Centos7镜像 三、下载Centos7 买了个硬件安装裸机(一堆硬件) 把安装盘放到虚拟机里面,给机器加电 配置设置 ​编辑 网络配置 开启网络功能 四、安装linux客户端 Xshell是什么 Xshell使用(连接…

如何使用Docker本地部署Jupyter Notebook并结合内网穿透实现远程访问

📑前言 本文主要是Linux下通过使用Docker本地部署Jupyter Notebook并结合内网穿透实现远程访问的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:…

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

目录 一、技术原理 二、实现步骤 三、代码示例 总结 在当今数字化时代,视频内容越来越丰富,而下载和管理这些视频的需求也随之增长。为了满足这一需求,本文将向你展示如何使用Python来打造一个批量下载视频并能可视化下载进度的炫酷下载器…

RabbitMQ系列之交换机的使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《RabbitMQ系列之交换机的使用》。🎯&…

《WebKit 技术内幕》学习之五(1): HTML解释器和DOM 模型

第五章 HTML 解释器和 DOM 模型 1.DOM 模型 1.1 DOM标准 DOM (Document Object Model)的全称是文档对象模型,它可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。这里的文档可以是 HTML 文档、XML 文档或者 XHTML 文档。D…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-5 select

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>select</title> </head><body> <!--单选下拉菜单可设置默认选中项--> 所在城市&#xff08;单选&#xff09;:<br> <select>…

【设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构】

文章目录 一、什么是LRU&#xff1f;二、LinkedHashMap 实现LRU缓存三、手写LRU 一、什么是LRU&#xff1f; LRU是Least Recently Used的缩写&#xff0c;意为最近最少使用。它是一种缓存淘汰策略&#xff0c;用于在缓存满时确定要被替换的数据块。LRU算法认为&#xff0c;最近…

【机器学习】模型的综合评判,备选模型和幸运模型

一、介绍 在快速发展的机器学习&#xff08;ML&#xff09;领域&#xff0c;模型的持续开发和部署对于技术进步和实际应用至关重要。这个生命周期的两个关键阶段是“候选模型”和“祝福模型”。对于任何参与机器学习的人来说&#xff0c;从数据科学家和工程师到依赖这些技术的企…

vue3 中组合键 command+Enter / shift+Enter / alt + Enter 实现换行,详细实现

vue3 中组合键实现换行 需求背景 有一个聊天室功能&#xff0c;采用输入框的形式&#xff0c;输入完毕使用Enter&#xff0c;可以直接进行发送。使用一些组合键 比如 commandEnter / shiftEnter / alt Enter … 可以实现换行操作。但现实的情况是&#xff0c;原生 Enter 天然…

C++ 之LeetCode刷题记录(十六)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 100. 相同的树 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在…

MySQL InnoDB 底层数据存储

InnoDB 页记录Page Directory记录迁移 页 是内存与磁盘交互的基本单位&#xff0c;16kb。 比如&#xff0c;查询的时候&#xff0c;并不是只从磁盘读取某条记录&#xff0c;而是记录所在的页 记录 记录的物理插入是随机的&#xff0c;就是在磁盘上的位置是无序的。但是在页中…

K8S的图形化工具——rancher

rancher是一个开源的企业级多集群的K8S管理平台 hub.docker.com rancher和K8S区别&#xff1a; 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能够调度&#xff0c;还能管理K8S集群&#xff0c;自带监控&#xff08;普罗米修斯&#xff09; 即使不知道K8S是什么…

Vue-35、Vue中使用ref属性

1、ref属性 2、代码 <template><div id"app"> <!-- <img alt"Vue logo" src"./assets/logo.png">--><h1 v-text"msg" ref"title"></h1><button click"showDOM" ref&…

Dify学习笔记-基础介绍(一)

1、简介 Dify AI是一款强大的LLMOps&#xff08;Language Model Operations&#xff09;平台&#xff0c;专为用户提供便捷的人工智能应用程序开发体验。 该平台支持GPT系列模型和其他模型&#xff0c;适用于各种团队&#xff0c;无论是用于内部还是外部的AI应用程序开发。 它…

RKE快速搭建离线k8s集群并用rancher管理界面

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 本文记录使用RKE快速搭建一套k8s集群过程&#xff0c;使用的rancher老版本2.5.7&#xff08;当前最新版为2.7&#xff09;。适用…

5分钟做自己的微信红包封面

文章目录 怎么制作自己的红包封面&#xff1f;开通红包封面的要求如下&#xff1a;收费情况制作具体网站&#xff1a;https://chatapi.onechat.fun/register?affYoU6 提交审核logo封面、挂件、气泡证明材料 发放红包封面其他 怎么制作自己的红包封面&#xff1f; 开通红包封面…

【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / 时间复杂度的分析 / c++代码 )

目录 关于堆的一些知识的回顾 数据结构&#xff1a;堆的特点 "down" 和 "up"&#xff1a;维护堆的性质 down up 数据结构&#xff1a;堆的主要操作 acwing-838堆排序 代码如下 时间复杂度分析 确实是在写的过程中频繁回顾了很多关于树的知识&…

【开源】基于JAVA+Vue+SpringBoot的教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…

一文读懂量化交易中的算法交易使用!

高频交易策略利用计算机&#xff0c;在人类交易者能够处理他们观察到的信息之前&#xff0c;根据以电子方式接收到的信息做出精心的决定来启动订单。 为通过挂单被动成交来追求更好的交易均价&#xff0c;随着人工智能&#xff0c;机器学习等技术的引入&#xff0c;逐渐演变为…