破解
破解广告
电视上的apk跟手机上的一样,可以先安装到手机上测试。观察广告里有"开通会员按>键关闭广告",于是搜索字符串"关闭广告",定位到a("pause_ad_tip_2", "Disable Ad", "关闭广告", "關閉廣告", "広告を消す");
继续搜索"pause_ad_tip_2",找到类com.hpplay.sdk.sink.business.ads.view.PauseADView,猜测这个就是显示广告的控件。
继续搜索"new PauseADView" 定位到com.hpplay.sdk.sink.business.ads.bridge.f#f(Context context, RelativeLayout relativeLayout)方法。分析发现这个类实现了com.hpplay.sdk.sink.business.ads.h接口,如下是它实现的接口方法
home.php?mod=space&uid=1892347 // com.hpplay.sdk.sink.business.ads.h
public void a(String str, String str2, ADBean aDBean) {
SinkLog.i("AD_ProcessPauseAD", "onRequestAD");
List a = this.h.a(aDBean, this.n); // 请求广告代码
boolean z = false;
if (a != null && a.size() > 0) {
this.k = a.get(0);
ADBean.DataBean dataBean = this.k;
if (dataBean != null && !TextUtils.isEmpty(dataBean.brgb)) {
SinkLog.i("AD_ProcessPauseAD", "onRequestAD mADBean.brgb=" + this.k.brgb);
this.m = this.k.brgb;
}
z = true;
}
SinkLog.i("AD_ProcessPauseAD", "onRequestAD hasValidAD: " + z);
if (!z) {
r.a().a(this.g, "", "2", 0, 0, false);
if (this.b == null) {
return;
}
this.b.c(this, -1);
}
}
分析发现这个方法作用是请求加载广告参数。到这里就很简单了,把请求广告的代码删了就行了。反编译后修改smali代码,将原始代码
#iget-object p2, p0, Lcom/hpplay/sdk/sink/business/ads/bridge/f;->h:Lcom/hpplay/sdk/sink/business/ads/cloud/ADRequest;
#iget-object v0, p0, Lcom/hpplay/sdk/sink/business/ads/bridge/f;->n:Ljava/util/List;
#invoke-virtual {p2, p3, v0}, Lcom/hpplay/sdk/sink/business/ads/cloud/ADRequest;->a(Lcom/hpplay/sdk/sink/bean/#ADBean;Ljava/util/List;)Ljava/util/List;
#move-result-object p2
改为
const/4 p2, 0x0
回编译签名后安装,发现竟然还有证书验证。
破解证书验证
一般有签名校验的都会直接闪退,没想到这个软件直接在界面上提示”xx投屏不支持私自修改签名,\n请联系商务同学解决:xxxxxxx“。这就好像在说"I'm here, crack me!!!",太小儿科了。
停留在这个界面,adb shell dumpsys activity activities查看最上层activity,定位到com.hpplay.happyplay.aw/.WelcomeActivity,在onCreate方法里找到检测证书的方法SignCheckHelper#check。让这个函数返回true就行了。
# virtual methods
.method public check()Z
.locals 1
const/4 v1, 0x1
return v1
.end method
安装到电视
U盘找不到了,所以打算通过adb安装,首先要打开电视的开发者模式
[ol]
[/ol]