原文章逆向思路
重点:先向CSDN审核客服声明一下:本文仅仅是用于技术交流,而非传播sexy相关的东西,文章提到的截图已经全部打码、也没有提及是什么APP,希望审核人员可以通过本文章,谢谢。
这是一篇入门级的APP逆向教程,如有写着不对的地方,烦请大佬们指出,互相学习,谢谢啦
本文起源于:前两天,我的一位朋友跟我说,他在QQ群里面,一位群友,发了一些黑色/灰色地带的产业链信息,他就仅仅是好奇,去下载了那款APP
原来发现,QQ群友的分享,是为那款APP做引流,一个有效的分享可以获得多少金币(砖石)这种(是指引导别人来注册,才算有效分享,才能获取金币)
打开之后,发现很惊人,这搞的带颜色的直播啊!!!
而这直播APP里面区分:免费和付费的房间,当你想要看付费的房间,那你只能看前面几十秒钟的时间,过了这个时间就会弹窗出来,让你付费,才能继续看
我朋友就让我帮忙看看,跟我说有什么能难倒程序员的??而且刚好最近我在学APP逆向,心里想着,这种灰产的APP又不能大力宣传,估计反逆向不会做很好吧?然后就开始尝试搞搞,看看能不能逆了它
本次用到的工具:魅族手机(Flyme6)已经root的、HttpCanary抓包工具、MT管理器、xxApp(这个不公开说了)
由于本次使用的手机是root的,而且抓包工具的证书已经被我安装到系统证书的目录下,而非直接安装到用户个人证书(所以对于本次APP是否有检验抓包工具检测这一块,直接忽略掉)
打开HttpCanary抓包工具,然后找到【设置】
然后选择【目标应用】,这里为了过滤无用的包,减少干扰,利于快速分析
返回去之后,点击开始【抓包】,然后转向去打开目标APP,然后打开一些room,免费的、收费的都开一下,目的就是为了抓包,看看APP发起了哪些请求、收到哪些响应
再切换回来之后,发现已经存在一堆抓包信息了
一个一个查看包响应,看看有什么收获
没想到,竟然发现如此大的突破口
看下面的两张截图前,再次向广大博友们声明:本次教程仅仅是用于技术交流,而非传播sexy相关的,谢谢。
下面来看两张收费的room的就截图:一个用户点进去看了几十秒(应该是30s,具体是多少没有数),然后就弹窗出来说得需要付费才能继续,这不诱惑人进行付费吗?
更多详情请看这里的原文,必看
鄙人一开始是,使用 jadx-gui 来反编译APP,发现没有壳、没有很强的混淆,可以直接反编译
反编译之后,进行相关的关键字来搜索,前面抓包中,有个很有用的关键词:
"type": "2",
"type_val": "38",
"type_msg": "本房间为收费房间,需支付38钻石"
再来简单分析一下:这三个字段中,如果你直接搜索 type 的话,根据经验,这肯定会出现很多搜索结果,排除它;而 type_val 、type_msg 这两个字段出现的概率不会很大,那么分析完了,就开始搜索呗!!!
首次我搜索的是 type_val ,但是出来的结果还是不够精准,有6/7条结果;
然后转而去搜索 type_msg,发现出来的结果只有两处,这不就是很精准了吗,噢耶!!
你们可以思考一下为什么是选第二个呢?(我个人纯粹是靠大胆的猜测,因为第二个有关键词 LiveRoom,就是直播房间嘛)
发现抓包中的三个参数,都在这里取出来了,而且发现是对那个 type 字段进行判断是否收费的,多次抓包分析得出返回的数据中:免费房间的 type=0,收费的房间 type=2,至于代码中还有一个 type=1 的判断,看到代码中调用的方法名,可以猜测:
所以,我们只需要将,type=1/2/3里面的调用方法,改为调用type=0的方法即可绕过这个限制,话不多说,下面就是修改的步骤,Just do IT
理清当前逻辑之后,本文使用最轻量级的、入门级的、小白级的工具——MT管理器
简单来简述一下它的功能:
其他更加强大功能,待你们去发掘,相信用过了之后,你们会觉得这是用来修改APP包/破解APP限制的一个好工具。
本次主要是使用它的第二个功能——APP安装包编辑功能
图中我圈了红色的三个文件是我们待会需要进行操作的
其中,第一个 META-INF 目录中,包含了一些签名文件等,我们将里面的三个文件删除掉:CERT.RSA、CERT.SF、MANIFEST.MF(其中CERT.RSA、CERT.SF这两个命名,不同APP可能会名字不一样,只要找到后缀格式一样的即可)。
Tips:鄙人在这里踩了一个坑,这个好像得需要删掉这三个文件打包才不会被检测到。不然重新打包签名之后,一联网打开APP就会出现闪退的情况,估计是被检测检验了。
文件 classes.dex、classes2.dex 就是APP编译之后,Class转成成.dex文件,dex是Android平台上(Dalvik虚拟机)的可执行文件, 相当于Windows平台中的exe文件, 每个Apk安装包中都有dex文件, 里面包含了该app的所有源码, 通过反编译工具可以获取到相应的java源码。
一些工程很大的话就会产生多个.dex文件,到现在有了前面的介绍,我们可以简单的知道:dex 文件就变相等于可执行的源码,那我们可以通过修改这个源码来达到逆向的目的(说法如有说错,烦请大佬们纠正,谢谢啦)。
3.选择【搜索】 ,然后输入刚刚那些关键词【type_msg】
所以,if-eqz p1,:cond_4b
就是:如果 p1=0,那么调用方法 cond_4b;
if-eq p1,p2,:cond_45
如果 p1=p2(p1=1),那么调用方法 cond_45 ;
这也印证了我们前面反编译APP的源码逻辑。
那肯定会有小伙伴会问,那个 cond_4b 是什么方法?很好,我这里回答一下,因为通过我们前面反编译的分析,我们已经知道,如果type=0的时候就是调用 forwardNormalRoom 方法,所以,可以肯定的告诉你们,这个cond_4b就是指向这个 forwardNormalRoom 方法。
编译之后进行返回,返回的时候会提示你,点击【退出】即可。此时会再次提示你,dex文件已经修改,问你是否更新到压缩包中 ,我们选择【确定】
然后你会看到压缩在更新
然后返回之后,你会看到一个刚刚被修改过的apk文件,显示绿色名字的,然后点击它,第一步选择【功能】、第二步选择【APK签名】
选择【确定】即可
然后你就可以【猥琐欲为】啦
本文入门级的APP逆向教程已经编写完毕,妈呀,花了几个小时来重新演示逆向过程,以及编写本篇文章
题外话:希望小伙伴们都别用于非法的手段,本文只是技术交流
谢谢大家
相关文献参考:
【APP逆向-入门级】记一款直播APP逆向过程
META-INF目录是干啥用的?