某视频去广告
吾爱破解看到的帖子,运用自己学的知识来看看
干掉更新
一打开APP就提示需要更新,还没个X给我点
用MT管理器监控一下Activity
发现最先开始的版本判断从com.pencil.yereen.MainActivity
开始,找一下代码
很好,找到了高度可疑的更新信息,一路跟踪过去,可以知道是获取com.pencil.saibeans.SaiUpgradeInfo
的属性来判断
先hook一下,看看返回了些啥frida -U -l hook.js -f "com.violetele.zdvod" --no-pause
setImmediate(function() {
Java.perform(function() {
var targetClass='com.pencil.saibeans.SaiSysConfigBean';
var methodName=decodeURIComponent('getUpgrade_info');
var gclass = Java.use(targetClass);
gclass[methodName].overload().implementation = function() {
console.warn('\n[Hook getUpgrade_info()]'+'');
var i=this[methodName]();
console.log('\treturn: '+i);
console.log('Version Code: '+i.getVersion_code())
console.log('Is Same: '+i.getIs_same())
console.log('Is Force: '+i.getIs_force())
console.log('Url: '+i.getUrl())
console.log('Intro: '+i.getIntro())
return i;
}
})
})
现在获得了返回值,可以看到主要影响的应该是前3个值,尝试将这3个值修改
样本的版本代码是15100
,其次将is_same
的值改为1
,is_force
的值改为0
,先hook看看能不能去除更新弹窗
此时发现弹窗确实消失了,说明这样操作确实可行,先将这段位置记录下来
干掉广告
从启动类中可以找到广告加载的方法
很明显只需要将这个方法的内容直接清空即可,在smali中找到对应的函数直接return-void
接下来随便点进一个视频,就能看到需要看广告才可以观影,这怎么行???这里可以看到Activity还是启动类com.pencil.yereen.saivideodetail.SaiDetailActivity
看一下广告,跳转的Activity是com.sigmob.sdk.base.common.AdActivity
到个人页面看一下,发现vip可以免广告,那只需要让自己变成vip就行了
全局搜索免广告,可以定位到com.pencil.yereen.saimine.SaiMineViewModel
类下的O
方法
可以看到进一步调用
直接hook这些函数,返回一些值试试
setImmediate(function() {
Java.perform(function() {
var targetClass1='com.pencil.saibeans.SaiUpgradeInfo';
var targetClass2='com.pencil.saibeans.SaiUserInfo';
var gclass1 = Java.use(targetClass1);
var gclass2 = Java.use(targetClass2);
gclass1['getIs_same'].overload().implementation = function() {
console.warn('\n[Hook getIs_same()]'+'');
var i=this['getIs_same']();
return 1;
}
gclass1['getIs_force'].overload().implementation = function() {
console.warn('\n[Hook getIs_force()]'+'');
var i=this['getIs_force']();
return 0;
}
gclass1['getVersion_code'].overload().implementation = function() {
console.warn('\n[Hook getVersion_code()]'+'');
var i=this['getVersion_code']();
return 15100;
}
gclass2['getFree_time'].overload().implementation = function() {
console.warn('\n[Hook getFree_time()]'+'');
var i=this['getFree_time']();
return 4102329600;
}
})
})
此时发现就没有广告了,可以说用hook的方式完全是可行的!
破解
既然hook可行,那么就要进行下一步了,需要持久化地破解,必须去更改它的代码才行
用MT管理器分析该APK文件,从Jadx中可以知道要修改的类是从classes2.dex
中加载的
反编译这个dex文件,找到com.pencil.saibeans.SaiUpgradeInfo
转为smali代码进行查看
想办法修改返回值,需要getIs_force
返回0
,getIs_same
返回1
,getVersion_code
返回15100
,类型都为整型
接下来修改getFree_time
的返回值,我想让他免费到2099-12-31 00:00:00
,则时间戳为4102329600
,转为16进制为F4849500
保存修改后让MT管理器自动签名
然后重新签名后,应用始终无法打开(不显示任何页面),也就是说它有签名验证!
过签名
可以先用MT管理器自带的去除签名验证功能试一下(需要会员,我没有就不试了)
重新分析吧,一般签名验证先从入口开始看,一下就看到了
显然,if里的条件直接改为true
就可以绕过这里的验证,原代码如下
只需要将v0赋值为1
,保存退出,重新签名
再次安装,这次是会短暂出现页面,并出现权限申请,但依然闪退
这说明其他地方还有验证,那么可以根据之前的特征字符串===========>>> app kill app_cudgel
搜索,可以发现其实一共有3处校验,进入看逻辑其实都是一样的,改判断条件即可
完成这两处修改后,重新安装app,可以正常进入了
但是观看视频时却出现无网络异常,网络当然没问题,那说明肯定还有校验没去
考虑到之前的校验给出了日志打印,搜索它日志的特征试试,找到可疑的代码
跟踪后可以发现许多调用
最后是去加载了so
好死,超级无敌大混淆,那我是不可能去分析它的了
幸运的是,正己老师说了可以用MT一键去签。不过MT要钱,但好在NP不要钱,所以NP去签试试
尝试了几次,都是失败,要么就是莫名出现了更新弹窗,后来我又尝试去破解和这个软件套了同一个壳的影视APP,采用同样的方式可以破解成功。
要点
去签时有两种选择
- 先去签后修改
- 先修改,但不要自动签名,修改完成进行去签
可以使用Frida来hook要修改的点,从而判断修改是否可行
成果展示
声明
本文仅供学习交流,本人不会提供任何成品。