前言
逆向这两个APP仅供于自己学习使用,并无恶意,当时随便从手机里面提取的。
反正没活了,整点活玩玩。
这里就抽“联通沃视频”作为例子。
仅供学习,如有冒犯,评论区联系我。
工具
- MT管理器
- DITOR
- Frida
- Android Studio
- 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();
}
从这里,我们注意到以下函数。
- com.unicom.common.e.p().l()
- URLEncoder.encode(d.c(product.getProductId(), "wotv2233"), "UTF-8");
- URLEncoder.encode(d.c(e.p().j().getUid(), "wotv2233"), "UTF-8");
- EncryptParams.getKDPID()
- EncryptParams.getKDPortalID()
- 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的加密请求基本上都很容易进行反编译,感觉像是故意的,而且像是外包,其中有些参数甚至是固定的,特别简单。
我就做了一套完整的,能够请求短信,登录,注册,获取免流服务器,获取推荐视频列表,获取视频内容信息。
付费获取联系方式,用于解释梆梆加固企业版逆向思路,不退款,加上后需要网页支付成功后的显示内容。
8 条评论
可以交流一下爱加密和邦邦的脱壳技巧么。关于类抽取有什么好方法?
测试评论邮箱一下
希望可以交流一下邦邦和爱加密的脱壳,我用frida-dexdump 无法获取类抽取部分
这个不可能修复,仅能通过抽取代码完成需要的内容,frida无法获取是正常的,需要用到其他脚本和工具。
测试邮件,嘿嘿
666,大佬
我是个菜狗
测试评论邮箱一下