Skip to content

逆向破解某视频网站app版本和网页版本vip #44

Open
@liusaint

Description

@liusaint

最近尝试破解某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 。个人中心的播放次数还是没有变。但是播放长视频和短视频,可以无限观看并且没有广告。成功!

看起来挺顺利,其实中间还是费了不少功夫。解决了不少问题。

本文仅作技术交流之用。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions