Description
最近尝试破解某app的网页版和安卓版vip。该app每日能看长/短视频数量有限,看几个视频就会让你充vip。破解之后可以无限观看。
一、网页版破解。
采用了三种方式,其中2,3种方式效果都很好,操作也很简单。
1.类似浏览器插件的做法,控制台注入脚本,循环执行:从页面中找到video标签,将video标签的pause方法替换为空方法。隐藏弹出的注册框,播放被暂停的视频。给video标签添加onPause事件,重复执行。
2.chrome浏览器使用Local Overrides使用本地脚本替换远程脚本。搜索源码发现有个isVip的方法。将app.js存入本地,修改isVip方法,让它返回true。然后使用本地js。
3.观察AJAX请求,找到用户相关的请求。分析哪一个可能是代表vip的字段,然后抓包软件的rewrite功能正则替换一下这个接口返回的内容。
二、安卓app破解。
网页版的体验并不是很好,比app版本差很多,还是决定破解一下安卓app。
首先想到的还是抓包AJAX请求,替换对应的用户相关的接口。然而一抓包发现所有的接口都是经过加密的,看到的并不是明文,也就无从修改。暂时先放弃这条路。
还是老老实实地进行逆向反编译,除了上一次解压少儿流利说app研究他们的笔画教学功能实现之外,这是第一次正式对安卓app进行反编译。遇到了很多的问题,最终还是实现了预期,记录一下过程:
1.使用apktool反编译。得到解压后的文件夹hgsp。
apktool d hgsp.apk.
2.使用jdax查看apk文件,发现并不能看到真正的Java代码。查看AndroidManifest.xml,找到入口文件是com.security.shell.AppStub1。看起来不像是正常的入口,google搜索这个入口,得知这是顶象加固。
3.在手机上安装App,然后使用xposed和fdex2输出真正的dex。一共输出了九个,将这些文件移到电脑里面。使用jdax查看这些dex文件,可以看到正常的Java代码,第一步算是成功了。然后逐步分析Java代码,猜测哪个地方是判断是不是VIP,搜到一个setVipFlag方法,但是出现的地方太多,一一修改的话工作量太大。猜测所有的setVipFlag方法会有一个相对唯一数据来源。找到一个userInfoBean.java的文件,里面定义的字段跟网页版用户接口拿到的字段一样,根据对网页版的分析猜测,修改其中某字段的setter, getter方法可以实现我们的目的。我们不能直接修改java代码。需要修改对应smali文件。
4.将dex文件转化为smali文件夹,放到hgsp文件夹中,多个dex文件夹命名smali smali_classes2 smali_classes3这样,smali文件夹里的内容跟java的文件是一一对应的。dex转smali的方法看下面这个文章。
https://blog.csdn.net/weixin_34319817/article/details/88005176
https://bitbucket.org/JesusFreke/smali/downloads/
5.找到userInfoBean.java对应的smali文件。不懂smali语法没有关系, 给android studio安装java2smali插件,将修改后的java文件转成smali,替换掉对应smali文件里的我们修改的内容。
6.然后要进行的就是脱壳后对加固的修复,加固之后的app的应用入口,替换成了加固的壳的入口,我们需要找到原来的真正的入口。 查询了一下顶象加固的真正入口的地方应该是写在AndroidManifest.xml,有一个APPLICATION_CLASS_NAME的地方说明,但并没有找到,可能升级了,于是进入加固后的入口,发现入口类前面一个配置说明,看起来像是应用入口。复制进AndroidManifest.xml。
@Config(app = "com.XX.XX.MyApplication", appFactory = "android.support.v4.app.CoreComponentFactory", versionStr = "XXX")
public class AppStub1 extends Application {
7.修改之后的App进行打包。apktool b ./hgsp
打包过程中遇到很多错误,可能也是加固的壳对原包的一些干扰性修改。主要是一些xml资源的格式问题。
将类似
<layout name="APKTOOL_DUMMY_1ec"></layout>
这种改成
<item type="layout" name="APKTOOL_DUMMY_1ec" />
打包之后在 hgsp/dist下面有一个hgsp.apk。
这个还不能直接安装,需要进行签名。
8.生成证书并签名。
生成证书,命令行输入:
keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
用证书给apk签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar hgsp_sign.apk hgsp.apk my_alias
生成了签名后的apk hgsp_sign.apk。
9.验证。怀着忐忑的心情,把App安装到手机上打开App 。个人中心的播放次数还是没有变。但是播放长视频和短视频,可以无限观看并且没有广告。成功!
看起来挺顺利,其实中间还是费了不少功夫。解决了不少问题。
本文仅作技术交流之用。