恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 399|回复: 6

中山手机加密方式如何破解

[复制链接]
发表于 2020-7-30 12:56 | 显示全部楼层 |阅读模式
提取到接口ttp://app.zsbtv.com.cn/apiv3.6//m3u8.php?token=eH0xNTk2VDgzODU3JmM9SDNRY2xhViZhPWp1c2hpbGl2ZSZ2PWUxYWQ3
后面通过base64解密为(x}1596T83857&c=H3QclaV&a=jushilive&v=e1ad7)


http://app.zsbtv.com.cn/apiv3.6/ ... 2hpbGl2ZSZ2PTdmZDAz
后面通过base64解密为x}1596T83862&c=qTl38me&a=jushilive&v=7fd03。

目前分析就是时间戳,电视台节目,及V 这个加密, v这个参数不知道怎么计算的




我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-7-30 14:39 来自手机 | 显示全部楼层
有静态的非要折腾这些有啥意思

点评

静态一天一变。不过,也不看。  详情 回复 发表于 2020-7-30 14:41
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2020-7-30 14:41 | 显示全部楼层
我还是孤独浪子 发表于 2020-7-30 14:39
有静态的非要折腾这些有啥意思

静态一天一变。不过,也不看。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-7-30 15:14 | 显示全部楼层
参考SZCUTV 直接调用接口返回ID一样的换域名地址就可以了
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-7-30 15:41 | 显示全部楼层
  1. package tide.juyun.com.utils;

  2. import java.io.UnsupportedEncodingException;
  3. import java.security.MessageDigest;
  4. import java.util.ArrayList;
  5. import java.util.Iterator;
  6. import java.util.regex.Pattern;
  7. import org.apache.commons.codec.binary.Base64;

  8. public class getLiveUrl {
  9.     private static MessageDigest md5;

  10.     static {
  11.         md5 = null;
  12.         try {
  13.             md5 = MessageDigest.getInstance("MD5");
  14.         } catch (Exception e) {
  15.             System.out.println(e.getMessage());
  16.         }
  17.     }

  18.     public static String getMd5(String str) {
  19.         byte[] bs = md5.digest(str.getBytes());
  20.         StringBuilder sb = new StringBuilder(40);
  21.         for (byte x : bs) {
  22.             if (((x & 255) >> 4) == 0) {
  23.                 sb.append("0").append(Integer.toHexString(x & 255));
  24.             } else {
  25.                 sb.append(Integer.toHexString(x & 255));
  26.             }
  27.         }
  28.         return sb.toString();
  29.     }

  30.     public static String replaceSomeWhere(String SourceStr, String str, int index) {
  31.         String strbefore;
  32.         String strafter;
  33.         if (index != 1) {
  34.             strbefore = SourceStr.substring(0, index - 1);
  35.             strafter = SourceStr.substring(index);
  36.         } else {
  37.             strbefore = "";
  38.             strafter = SourceStr.substring(index);
  39.         }
  40.         return strbefore + str + strafter;
  41.     }

  42.     public static String getLiveToken(String channelid, String appid) throws UnsupportedEncodingException {
  43.         String TimeStamp = (System.currentTimeMillis() / 1000) + "";
  44.         String STR1 = getMd5(channelid + "Tide" + appid);
  45.         String STR3 = getMd5("tide" + TimeStamp + (STR1.substring(0, 2) + STR1.substring(4, 8) + STR1.substring(14, 15) + STR1.substring(13, 14) + STR1.substring(12, 13) + STR1.substring(25, 29) + STR1.substring(30, 31) + STR1.substring(29, 30) + STR1.substring(28, 29) + STR1.substring(27, 28) + STR1.substring(26, 27)));
  46.         String STR4 = new String(Base64.encodeBase64(("t=" + TimeStamp + "&c=" + channelid + "&a=" + appid + "&v=" + (STR3.substring(4, 5) + STR3.substring(16, 17) + STR3.substring(31, 32) + STR3.substring(17, 18) + STR3.substring(8, 9))).getBytes("UTF-8"))).replace("=", "|");
  47.         String numberBefore = Pattern.compile("[^1-9]").matcher(STR4).replaceAll("").trim();
  48.         ArrayList<Integer> arr = new ArrayList<>();
  49.         for (int i = 0; i < numberBefore.length(); i++) {
  50.             String number = numberBefore.substring(i, i + 1);
  51.             if (!arr.contains(Integer.valueOf(Integer.parseInt(number)))) {
  52.                 arr.add(Integer.valueOf(Integer.parseInt(number)));
  53.             }
  54.         }
  55.         Iterator it = arr.iterator();
  56.         while (it.hasNext()) {
  57.             System.out.println(((Integer) it.next()).intValue());
  58.         }
  59.         String Result = STR4;
  60.         Iterator it2 = arr.iterator();
  61.         while (it2.hasNext()) {
  62.             int num = ((Integer) it2.next()).intValue();
  63.             if (num % 2 == 0) {
  64.                 String SourceLetter = STR4.substring(num - 1, num);
  65.                 if ("abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".indexOf(SourceLetter) != -1) {
  66.                     int destIndex = ("abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".indexOf(SourceLetter) + (num * num)) % 52;
  67.                     Result = replaceSomeWhere(Result, "abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".substring(destIndex, destIndex + 1), num);
  68.                 }
  69.             } else {
  70.                 String SourceLetter2 = STR4.substring(num - 1, num);
  71.                 if ("abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".indexOf(SourceLetter2) != -1) {
  72.                     int destIndex2 = ("abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".indexOf(SourceLetter2) + num) % 52;
  73.                     Result = replaceSomeWhere(Result, "abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".substring(destIndex2, destIndex2 + 1), num);
  74.                 }
  75.             }
  76.         }
  77.         return Result;
  78.     }
  79. }
复制代码
getLiveUrl(this.td_liveid, "jushilive"); // appid = jushilive

自己玩吧,有点南昌的意思 应该是appid部分不同目测,没仔细看,翻翻我那个掌上南昌,看看


点评

大佬牛啊,怎么弄得?安卓解包?  详情 回复 发表于 2020-7-30 16:14
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2020-7-30 16:14 | 显示全部楼层
wjxgzz 发表于 2020-7-30 15:41
getLiveUrl(this.td_liveid, "jushilive"); // appid = jushilive

自己玩吧,有点南昌的意思 应该是appi ...

大佬牛啊,怎么弄得?安卓解包?

点评

是啊,jadx  详情 回复 发表于 2020-7-30 16:27
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-7-30 16:27 | 显示全部楼层
zzq1234567890 发表于 2020-7-30 16:14
大佬牛啊,怎么弄得?安卓解包?

是啊,jadx
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2020-9-24 00:44

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表