前言

逆向这两个APP仅供于自己学习使用,并无恶意,当时随便从手机里面提取的。

反正没活了,整点活玩玩。

这里就抽“联通沃视频”作为例子。

仅供学习,如有冒犯,评论区联系我。


工具

  1. MT管理器
  2. DITOR
  3. Frida
  4. Android Studio
  5. JEB PRO

自己也尝试过用手机刷定制room来逆向该app,但是由于没有多余手机最后放弃了。


步骤

通过MT管理器得知,该APP的加密方式是梆梆加固企业版,所以我们需要套用第三方工具。

须知此加密方式会将so层和dex都进行加密和混淆。

我使用了DITOR简单化将dex层给脱壳出来,虽然还是拥有部分混淆代码,可依旧能拿出来代码了。

代码编译为java后,开始逐渐分析代码。


解析一段关于沃视频免流的源代码

private String a(String str, boolean z, String str2, String str3) {
    String l = com.unicom.common.e.p().l();
    if (TextUtils.isEmpty(l)) {
        l = "192.168.1.1";
    }
    StringBuilder sb = new StringBuilder();
    if (w.equals(str) || "tstv".equals(str)) {
        if (w.equals(str)) {
            this.h = "live";
        } else {
            this.h = "tstv";
        }
        sb.append("fifa/live/pltv");
        sb.append(this.l);
    } else if (!z) {
        this.h = "vod";
        sb.append("fifa");
        sb.append(this.l);
    } else {
        if ("tvod".equals(str)) {
            this.h = "tvod";
        } else {
            this.h = "vod";
        }
        sb.append("fifa/video/pltv");
        sb.append(this.l);
    }
    sb.append("videoid=");
    sb.append(this.m);
    sb.append("&PlayType=");
    sb.append(this.h);
    sb.append("&apptype=");
    sb.append("app");
    sb.append("&spid=");
    sb.append(str2);
    sb.append("&pid=");
    sb.append(EncryptParams.getKDPID());
    sb.append("&preview=");
    sb.append(this.g);
    sb.append("&portalid=");
    sb.append(EncryptParams.getKDPortalID());
    sb.append("&videoname=");
    sb.append(this.i);
    sb.append("&userid=");
    sb.append(TextUtils.isEmpty(com.unicom.common.e.p().j().getUserPhone()) ? com.unicom.common.e.p().j().e() : com.unicom.common.e.p().j().getUserPhone());
    sb.append("&userip=");
    sb.append(l);
    sb.append("&spip=");
    sb.append(this.j);
    sb.append("&spport=");
    sb.append(this.k);
    sb.append("&freetag=");
    sb.append(str3);
    return sb.toString();
}

从这里,我们注意到以下函数。

  1. com.unicom.common.e.p().l()
  2. URLEncoder.encode(d.c(product.getProductId(), "wotv2233"), "UTF-8");
  3. URLEncoder.encode(d.c(e.p().j().getUid(), "wotv2233"), "UTF-8");
  4. EncryptParams.getKDPID()
  5. EncryptParams.getKDPortalID()
  6. TextUtils.isEmpty(com.unicom.common.e.p().j().getUserPhone()) ? com.unicom.common.e.p().j().e() : com.unicom.common.e.p().j().getUserPhone()

部分函数代码被放进了so层,我已经解密出来了,但是不好公布,而上面的java代码,是个人都能脱出来。

这一段代码的作用是获取一个请求接口的身份信息内容,而那个接口则是对接了联通免流服务器的功能。


他有一部分加密的功能代码是:

public static String c(String str, String str2) throws Exception {
Cipher cipher = Cipher.getInstance(EncryptParams.getKDEncryptMode());
cipher.init(1, a(str2));
return a.j(cipher.doFinal(str.getBytes("UTF-8")));
}

草,发现没什么好说的,有意思的基本都放不出来,害怕被别人举报,目前就这样吧。

逆向爱加密,梆梆加固之类的企业版可以傻瓜式用DITOR进行脱壳,解密,不过so层还是颇有难度的。

想要降低难度可以使用定制化的room,这样可以在系统层面反编译出源代码。

说点有意思的:

“联通视频彩铃”,“联通沃视频”这几个APP的加密请求基本上都很容易进行反编译,感觉像是故意的,而且像是外包,其中有些参数甚至是固定的,特别简单。

我就做了一套完整的,能够请求短信,登录,注册,获取免流服务器,获取推荐视频列表,获取视频内容信息。


付费获取联系方式,用于解释梆梆加固企业版逆向思路,不退款,加上后需要网页支付成功后的显示内容。

价格: 68.00 元
VIP会员价格:68.00元终身会员免费
已有2人购买并解决该问题。
温馨提示:登录付款后可永久阅读隐藏内容。 付费可读
最后修改:2023 年 11 月 28 日
如果觉得我的文章对你有用,请随意赞赏