近日,发现了一款视频APP,里面的内容极其不堪入目,且需要收费才能观看,否则每天(不确定,也可能是几小时)只有1次免费观看机会
于是对其进行了暴力破解(不知道怎么回事,自从破了之后就没怎么打开过这玩意儿了...)
大概前两天的时候,这个APP的大版本号升级到了5.0,幸运的是,破解方法照样有效,趁此机会记录一下Android逆向小白的心路历程
在打开APP的时候就会根据手机特征码帮你自动注册一个账号,名字和头像都是随机的,好像也没法退出和切换账号?感觉换台设备你充的钱就没了
该APP中有2种视频,一种是可以使用免费观看次数观看的免费视频,一种是收费的,收费视频意味着不仅要开通VIP,还得额外交钱才能看
名字下面有个免费观看次数,随便点开一个免费视频后就从1变成0了,不知道过了多久,它又会变成1,若免费观看次数为0,则点开视频会提示次数用尽无法播放
对APP进行测试,发现使用免费观看次数观看过的视频可以重复观看,关闭应用再重启也能观看,但是清除数据后再次打开APP,虽然账号还是那个账号,免费观看次数依旧为0,但刚刚的视频却不能观看了,由此推断某些数据应该是存在本地的,并且有代码对该部分进行检验,从而决定能否播放视频
第一时间想到的是看看能不能直接用MT管理器修改一下dex绕过这个判断,结果一看,某加固,不好搞,先另辟蹊径试试
首先在没有观看视频的情况下打开/data/data/com.tencent.mm.oneff/shared_prefs目录,可以看到一个SharedPreferencesData_tbr.xml文件
然后随便点开一个视频,再查看该文件的内容
可以看到LOCAL_VD_HI_KEY中保存了刚才点开的视频的信息,推测401979是视频的ID
将401979:{......}改成401979:{},保存后重新打开APP,发现仍然可以观看该视频,将整个map项删掉,则不能观看了,再次恢复map的内容,又能观看了,由此推断内部写法应该是if(xxx.containsKey(ID))这种形式
当时的想法是,给它把0到999999全部填上去,应该就可以了吧?实验证明,填的项目数量超过8万后APP会崩,只填8万个再去测试发现确实可以观看少部分视频,但毕竟区间覆盖不广,这种办法pass
看来只能正面进攻了,上frida!