宅男福利?某不可描述APP的逆向破解

  • A+
所属分类:逆向工程


宅男福利某不可描述APP的逆向破解










宅男福利?某不可描述APP的逆向破解


宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解


0x01 前言

在电报群里偶然发现了一个违背社会主义价值观的APP

宅男福利?某不可描述APP的逆向破解

必须码上。

宅男福利?某不可描述APP的逆向破解

0x02 搞起

随便翻一翻,发现还有次数限制,果然短视频火了以后,什么行业都能说自己是短视频。


花钱是不可能花钱的,白嫖才是王道,话不多少,搞它。


0x03 初探

apk丢进查壳工具里,发现没有壳?!很好,很有精神。


宅男福利?某不可描述APP的逆向破解


使用jeb反编译。


直接搜索VIPisIs_vip进入视野,我重新进入软件界面发现并没有啥VIP内容,这里先忽略。


宅男福利?某不可描述APP的逆向破解


我想先看看长短视频的观看次数是如何定义的。


于是Resources=> values => strings.xml查找。宅男福利?某不可描述APP的逆向破解


找到txt_play_number字段后进行全局查找,全局查找我倾向使用jadx,感觉比jeb好用些。


宅男福利?某不可描述APP的逆向破解


找到了这里,貌似没啥比较明显的发现。但是在这个方法往上翻时,我看到了这里。


宅男福利?某不可描述APP的逆向破解


这段代码意思很明显了,变量b代表短视频可以看多少次,b2是长视频,然后b3是可以看的次数减去已经看的,就是长视频还可以看多少次,b4是短视频还可以看多少次。


切到this.f1350a.b这个函数内部实现看看。


宅男福利?某不可描述APP的逆向破解

初步猜测,这里是根据传入的字符串不同,传出的数字也不同,类似于map[key,value]的数据结构,传入key,得到相应的储存值。


这里没有继续对getInt深入,因为我只想改变它的返回值,在外层加入判断修改逻辑即可,把b函数改成类似于这样即可。


宅男福利?某不可描述APP的逆向破解

0x04 破解观看次

使用frida初步检测破解点

使用fridab函数进行hook测试。


贴出脚本。


宅男福利?某不可描述APP的逆向破解

这里简单说明一下,以下命令行各个参数的意义,因为貌似面试题出现这个问题的次数还挺多的~


frida-U -f com.mitao.app3 -l view_count.js --no-pause


-U检测USB设备,真机或者模拟器,都算上。


-f fridaSpawned这个应用,在这个时候启动脚本,会在app执行onCreate之前提前完成脚本的启动。


-l  指定脚本


--no-pause程序正常运行,不因hook到函数而暂停。


如果想了解详细的同学,可以点这里:https://zhuanlan.zhihu.com/p/157604388


执行完之后,如图:


宅男福利?某不可描述APP的逆向破解


初步进行战术性观看长视频12次,短视频40次,发现次数仍然没有变化可以继续观看,理论上来说,这时候应该禁止我们继续看的,可见hook此处是成功破解了视频观看次数。


但是我们需要将其进行打包破解,因为不可能一直挂着frida观看。所以需要进一步修改smali代码来完成逻辑上的破解。


修改smali逻辑

使用apktoolapk进行解压至mitao


宅男福利?某不可描述APP的逆向破解


修改逻辑我想到了三种办法:

1)、硬刚汇编

硬刚汇编,我的想法是将b函数修改成和我js脚本一致的逻辑,也就是说前面加上几个判断。但是有几个问题我不得不考虑,从这里看到在汇编层面,里边的line1,出现在了多个函数中,也就是说,如果按照java层代码编写习惯和汇编的是不一致的,还有寄存器的分配,对我来说显然是比较困难的。


宅男福利?某不可描述APP的逆向破解

2)、控制执行函数

还有一种办法,借鉴0x指纹大佬针对青青草视频的方法(详情),新建一个类,然后用java将逻辑写出来,编译成smali代码,最终生成新的类加入到app中,然后将所有调用b函数的地方,都将替换成我们修改过的函数,这样也能达到修改的目的。


宅男福利?某不可描述APP的逆向破解

3、控制执行逻辑

这个方法是最简单的,在最上层的逻辑上进行修改,找到所有调用b函数的地方,并将它们的逻辑全部变成相反的。比如这里,把b3= b2 - this改成b3= b2 + thisb4也是一样。


宅男福利?某不可描述APP的逆向破解

我们找到汇编代码处,将sub-int改成add-int即可。


宅男福利?某不可描述APP的逆向破解


当然了,需要修改的地方不止这一处,想练手的同学可以自己找找,按照同样的方法进行修改。


再次使用apktool将其打包后,我们看到逻辑已经被修改。


宅男福利?某不可描述APP的逆向破解

看一次剩余次数少一次,变成看一次剩余次数增加一次。

再次签名重新安装后,观看次数已经破解成功。


宅男福利?某不可描述APP的逆向破解


0x05 去广告

在使用的过程中,会出现一些广告,"x秒跳过广告"的字样,必须得看一会广告,再次出现跳过广告,才可以继续。

找到对应的广告代码,判断i2是否大于5,如果大于5就进入跳过广告。


宅男福利?某不可描述APP的逆向破解


点击跳过广告,可以直接进入正题。


同样的操作,如果我把i2> 5修改成i2> 0,这样等式永远成立,是不是就可以直接进行跳过广告了?


宅男福利?某不可描述APP的逆向破解

0x5修改为0x0,重新打包,效果图。

宅男福利?某不可描述APP的逆向破解

直接进入主题,去广告成功。


附件

APP破解版和未破解版,以及脚本

只能“关注公众号”,然后加群,然后找帅气的miniboom要了宅男福利?某不可描述APP的逆向破解

宅男福利?某不可描述APP的逆向破解



宅男福利?某不可描述APP的逆向破解

END


宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解
宅男福利?某不可描述APP的逆向破解

扫码关注我们




本文始发于微信公众号(WhITECat安全团队):宅男福利?某不可描述APP的逆向破解

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: