547回答

19收藏

【APP逆向-入门级】记一款直播APP逆向过程

信息分享 信息分享 121219 人阅读 | 547 人回复 | 2020-05-03


前些天看到有一篇公众号推送,也是这种类型的逆向,之前没大留意看,不知道是否是同款的




重点:先向审核客服声明一下:本文仅仅是用于技术交流,而非传播不当的东西,文章提到的截图已经全部打码、也没有提及是什么APP,希望审核人员可以通过本文章,谢谢。




首次发帖,由于本次逆向极为简单,仅仅靠手机就能进行的逆向,甚至可以都算不上APP逆向,请小声逼逼,哈哈(文末有福利)




这是一篇入门级的APP逆向教程,如有写着不对的地方,烦请大佬们指出,互相学习,谢谢啦


前言


本文起源于:前两天,我的一位朋友跟我说,他在QQ群里面,一位群友,发了一些黑色/灰色地带的产业链信息,他就仅仅是好奇,去下载了那款APP

原来发现,QQ群友的分享,是为那款APP做引流,一个有效的分享可以获得多少金币(砖石)这种(是指引导别人来注册,才算有效分享,才能获取金币)

打开之后,发现很惊人,这直播!!!

而这直播APP里面区分:免费和付费的房间,当你想要看付费的房间,那你只能看前面几十秒钟的时间,过了这个时间就会弹窗出来,让你付费,才能继续看

我朋友就让我帮忙看看,跟我说有什么能难倒程序员的??而且刚好最近我在学APP逆向,心里想着,这种APP又不能大力宣传,估计反逆向不会做很好吧?然后就开始尝试搞搞,看看能不能逆了它
0x00、预估一下本次的逆向步骤
  • 第一步、抓包分析
  • 第二步、反编译
  • 第三步、根据第一步的抓包关键词来搜索
  • 第三步、根据抓包信息、收费弹窗,来分析这个收费的逻辑
  • 第四步、得出这个逻辑之后,对smali代码进行篡改,保存
  • 第五步、回编译APP,重新打包签名
本次用到的工具:魅族手机(Flyme6)已经root的、HttpCanary抓包工具、MT管理器、xxApp(这个不公开说了)


0x01、首要就是抓包分析
由于本次使用的手机是root的,而且抓包工具的证书已经被我安装到系统证书的目录下,而非直接安装到用户个人证书(所以对于本次APP是否有检验抓包工具检测这一块,直接忽略掉)

打开HttpCanary抓包工具,然后找到【设置】









然后选择【目标应用】,这里为了过滤无用的包,减少干扰,利于快速分析

















返回去之后,点击开始【抓包】,然后转向去打开目标APP,然后打开一些room,免费的、收费的都开一下,目的就是为了抓包,看看APP发起了哪些请求、收到哪些响应












再切换回来之后,发现已经存在一堆抓包信息了












一个一个查看包响应,看看有什么收获

没想到,竟然发现如此大的突破口















看下面的两张截图前,再次向广大博友们声明:本次教程仅仅是用于技术交流,而非传播不当信息,谢谢。

下面来看两张收费的room的就截图:一个用户点进去看了几十秒(应该是30s,具体是多少没有数),然后就弹窗出来说得需要付费才能继续,这不诱惑人进行付费吗?




[ttreply]













0x02、反编译APP

  • 鄙人一开始是,使用 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=0,调用 forwardNormalRoom 方法,根据字面意思是:转到正常(免费)房间处理逻辑
  • type=1,调用 forwardPwdRoom 方法,根据字面意思是:转到输入房间密码处理逻辑
  • type=2 || type=3,调用 forwardPayRoom 方法,根据字面意思是:转到房间收费的处理逻辑

所以,我们只需要将,type=1/2/3里面的调用方法,改为调用type=0的方法即可绕过这个限制,话不多说,下面就是修改的步骤,Just do IT
0x03、修改 smali 代码,重新打包、签名
理清当前逻辑之后,本文使用最轻量级的、入门级的、小白级的工具——MT管理器



简单来简述一下它的功能:
  • 其他文件夹有的基础功能它也都有(复制、移动、重命名等等)
  • APP安装包编辑 ,主要有 DEX 编辑,ARSC 编辑,XML 编辑,APK 签名、APK 优化、APK 共存、去除签名校验、RES 资源混淆、RES 反资源混淆、翻译模式等
  • 可以修改文件夹权限(系统目录的话,需要 root 权限才能修改)
  • 自带强大的文本编辑器,可以流畅编辑大文本文件,支持设置是否显示行号、开关自动换行、双指缩放字体大小、自动识别编码、代码语法高亮、自动缩进、正则搜索替换

其他更加强大功能,待你们去发掘,相信用过了之后,你们会觉得这是用来修改APP包/破解APP限制的一个好工具。

本次主要是使用它的第二个功能——APP安装包编辑功能




1.使用MT管理器【查看】目标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 文件就变相等于可执行的源码,那我们可以通过修改这个源码来达到逆向的目的(说法如有说错,烦请大佬们纠正,谢谢啦)。
  • 先打开第一个dex文件,MT管理器会提示我们,要用哪个打开,选择 【Dex编辑器++】即可


  • 选择【搜索】 ,然后输入刚刚那些关键词【type_msg





  • 点击右上角,再次进行搜索:【type_msg

  • 此处,你得需要一些smali语法,但是本文我只介绍本文使用的语法:
  • if-eqz : 意思就是 是否等于0(if equal zero)
  • if-eq:意思就是 是否相等 (if equal)
  • const/4 p2,0x1:意思就是将0x1,即0x01赋值到 p2 ,即 p2=1

所以,
  1. if-eqz p1,:cond_4b
复制代码
就是:如果 p1=0,那么调用方法 cond_4b;
  1. if-eq p1,p2,:cond_45
复制代码
如果 p1=p2(p1=1),那么调用方法 cond_45

这也印证了我们前面反编译APP的源码逻辑。 那肯定会有小伙伴会问,那个 cond_4b 是什么方法?很好,我这里回答一下,因为通过我们前面反编译的分析,我们已经知道,如果type=0的时候就是调用 forwardNormalRoom 方法,所以,可以肯定的告诉你们,这个cond_4b就是指向这个 forwardNormalRoom 方法。

6.将type=1/2/3的情况,调用的方法改为调用 cond_4b 即可,然后点击右上角的保存












7.保存之后,返回上一层第一层搜索的时候,点击右上角,选择【编译












8.编译之后进行返回,返回的时候会提示你,点击【退出】即可。此时会再次提示你,dex文件已经修改,问你是否更新到压缩包中 ,我们选择【确定












然后你会看到压缩在更新









9.然后返回之后,你会看到一个刚刚被修改过的apk文件,显示绿色名字的,然后点击它,第一步选择【功能】、第二步选择【APK签名】


















选择【确定】即可















然后就任君选择啦
0x04、最后重新签名之后,你可以卸载原来的APP,然后你就....,哈哈哈...
本文入门级的APP逆向教程已经编写完毕
最后: 真感谢每一位小伙伴,竟然看完了我的文章,谢谢你们啦,有帮助的话,点个赞呀
希望小伙伴们都别用于非法的手段,本文只是技术交流

还有一个注意的地方,修改 smali 源码的时候,如果有注释的话,注释是不能带有中文字符的,或者你转换为 Unicode 形式

谢谢大家

相关文献参考:● CSDN: https://blog.csdn.net/weixin_41173374

● Gitee博客: https://qqizai.gitee.io/

● Github: https://github.com/qqizai

[/ttreply]


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分享到:
回复

使用道具 举报

回答|共 547 个

七仔

发表于 2020-5-3 11:39:37 | 显示全部楼层

小标题的编号有点问题,啊哈哈哈,但文章内容顺序是对的
回复

使用道具 举报

FFFFF

发表于 2020-5-3 11:53:03 | 显示全部楼层

让我康康
回复

使用道具 举报

Nanda

发表于 2020-5-3 13:05:26 | 显示全部楼层

关键时候竟然让评论
回复

使用道具 举报

Nanda

发表于 2020-5-3 13:11:02 | 显示全部楼层

已看完,感谢分享。长见识了,逆向还有这种用途。。
回复

使用道具 举报

daisixuan

发表于 2020-5-3 13:51:36 | 显示全部楼层

666
回复

使用道具 举报

小飞刀

发表于 2020-5-3 14:50:36 | 显示全部楼层

666
回复

使用道具 举报

jianan

发表于 2020-5-3 21:10:58 | 显示全部楼层

看看    学习学习
回复

使用道具 举报

masicro

发表于 2020-5-3 21:27:31 | 显示全部楼层

66666
回复

使用道具 举报

jiulaikk

发表于 2020-5-4 01:05:01 | 显示全部楼层

给个样本看看
回复

使用道具 举报