[原创]暴力破解某直播平台收费房 您所在的位置:网站首页 套路直播社交app里的主播 [原创]暴力破解某直播平台收费房

[原创]暴力破解某直播平台收费房

2023-08-20 10:04| 来源: 网络整理| 查看: 265

作为一个逆向的爱好者,往往通过暴力破解,感觉没啥意思,最终还是要破解协议,协议才是一个app的灵魂所在, 直接安排上。 说到协议,我们脑子第一个想到的就是抓包,(charles + postern) 安排上,后面 发现开了vpn后,app直接起不来了,然后又试了先让app起来后,然后在开vpn,依然消息发不出去,看来app肯定对vpn做了检测啥的; 既然不能抓包(此路不通换条路呗),那就从代码入手呗,直接回到我们的第一张图的 关键点1,直接hook (AppHttpUtil) 那个类,看调用栈;发现下面的关键函数,则直接安排上 然后我们在看调用 requestIndex方法 的上层,发现这个是请求的源头; 既然找到关键点了,那我们去构造这个请求来一次主动调用,看看效果

这里我只写了两个消息的主动调用 (房间列表,房间详情)其他接口都类似,就不举例了

Java.perform(function() { Java.openClassFile("/data/local/tmp/gson.dex").load(); var gson = Java.use("com.google.gson.Gson").$new(); var CommonInterface = Java.use("com.xxx.live.common.CommonInterface"); var AppRequestCallback = Java.use("com.xxx.xxx.http.AppRequestCallback"); var LiveTabHotView4 = Java.use("com.xxx.live.appview.main.LiveTabHotView$4"); var Json = Java.use("com.alibaba.fastjson.JSON"); var Index_indexActModel = Java.use("com.xxx.live.model.Index_indexActModel"); var LiveRoomModel = Java.use("com.xxx.live.model.LiveRoomModel"); var a = 1; //对于 new class 的构造 有点困惑 //CommonInterface.requestIndex(1, this.mSex, 0, this.mCity, new AppRequestCallback() { //TODO :方法1 : CommonInterface.requestIndex(1, 0, 0, "热门", AppRequestCallback$new()); // 大厅房间列表获取 Java.choose("com.xxx.live.appview.main.LiveTabHotView$4", { onMatch: function (instance) { if(a == 1){ console.log("LiveTabHotView$4 .....", instance); CommonInterface.requestIndex(1, 0, 0, "热门", instance); a = 2; } }, onComplete: function () { } }) LiveTabHotView4.onSuccess.implementation = function(a){ var result = a.getDecryptedResult(); var resultModel = Json.parseObject(result, Index_indexActModel.class); var roomList = Java.cast(resultModel, Index_indexActModel).getList(); console.log("size : ", roomList.size(), roomList.get(0)) for(var i = 0; i < roomList.size(); i++){ var LiveRoomModelInfo = Java.cast(roomList.get(i), LiveRoomModel); console.log("roominfo: ", i, " ", gson.toJson(LiveRoomModelInfo)); } return this.onSuccess(a); } var b = 1; var LiveBusiness2 = Java.use("com.xxx.live.business.LiveBusiness$2"); // 下面的消息接口 也是大同小异 // 指定房间信息获取 (可以拿到 直播的 url) Java.choose("com.xxx.live.business.LiveBusiness$2", { onMatch: function (instance) { if(b == 1){ console.log("LiveBusiness$2 .....", instance); CommonInterface.requestRoomInfo(房间id, 0, "", instance); b = 2; } }, onComplete: function () { } }) var App_get_videoActModel = Java.use("com.xxx.live.model.App_get_videoActModel") LiveBusiness2.onSuccess.implementation = function(a){ var result = a.getDecryptedResult(); var resultModel = Json.parseObject(result, App_get_videoActModel.class); var roomDetail = Java.cast(resultModel, App_get_videoActModel); //这里只打印了 直播地址 (无用数据太多了) 拿到直播地址后 可以直接用 VLC 播放器打开 播放 // play_url 免费房 是用这个字段 // getPreview_play_url 收费房用这个字段 console.log("roomDetail: play_url: ", roomDetail.getPlay_url(), " getPreview_play_url: ", roomDetail.getPreview_play_url()); //console.log("roomDetail: ", gson.toJson(roomDetail)); return this.onSuccess(a); }

附上结果图

接下来就要找加密算法了,然后实现脱机,这个过程中有遇到个小插曲,就是发现该app域名指向的地址是竟然本地的地址 ,很奇怪,记得当时我还问 r0ysue 大佬呢,后来我发现了app中的秘密;

就是该app 竟然用了阿里的游戏盾

既然用了sdk的话,所以就想到去官网下载sdk 玩下,后来发现貌似没有sdk,demo下载;而且大部分逻辑处理都在so层,功力不够,后面就放弃没去搞了,后来在 r0ysue 的星球里看到有人在问,用adb 端口转发,这个给了我启发,后来百度了下adb端口转发

既然这样的话,那我们是不是可以搞成,半脱机呢 (后来证明是可以的,) 安排上

这里面涉及一些加密算法,都是用了标准的算法(aes/md5),所以数据构造起来就很简单了 打开app查找本地端口,执行端口转发 然后用python 脚本 安排上 跑起来 ,效果还可以 这里只写了一个接口,其他类似,就不重复了,到此 一个半脱机的脚步算写完了。 吃个压压惊, 写文章好累啊,写了快一天了;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有