APK逆向分析-以某车机哄娃app为例

admin 2024年2月28日00:51:39评论20 views字数 3541阅读11分48秒阅读模式

文章正文

快过年了,提前祝大家过年好,开车的小伙伴回家带孩子过年肯定需要个哄娃的车机app。我就在车机应用市场下了个给小孩哥讲故事的app。

准备

  • • app安装后打开首先遇到的就是启动广告界面。然后很多故事需要VIP。目前的任务是去掉开屏广告和解锁试用一些VIP功能,好用的话就会正常开通VIP的。尊重版权!
    APK逆向分析-以某车机哄娃app为例
  • • 试图用NP管理器打开,发现提示没有加固。直接用Jadx加载源代码。
    APK逆向分析-以某车机哄娃app为例

源代码分析

启动广告

  • • 使用NP管理器提取app,复制到电脑用Jadx打开。
  • • 首先查看AndroidManifest.xml文件,查看启动Activity。这个应该就是启动广告了。
    APK逆向分析-以某车机哄娃app为例
  • • 进入SplashActivity看一下具体的逻辑,这里主要是看一下如何单纯修改启动Activity会不会影响app,有的应用会在SplashActivity做一些app的初始化工作。
  • • 经过分析,发现SplashActivity只有广告和隐私协议相关的内容,将SplashActivity的Intent过滤器给MainActivity。
APK逆向分析-以某车机哄娃app为例
* 保存、打包、签名、安装、测试。从下面的gif可以看出,直接跳过了广告和开始的同意协议步骤,直接进入了主界面。![](http://82.157.65.239:53401/eakfjheafhlejekalgjlaegae/images//mds/private/APK逆向分析-以某车机哄娃app为例-hjsz/images/6L4sIpETiMdlqNAW.gif)

应用内弹窗

  • • 当进入主界面,会有个开通会员的弹窗提示,这里去掉吧,车机app尽可能少多余的操作,毕竟有时候要开车时操作。
  • • 进入MainActivity查看具体的代码逻辑。大致看了看一下并没有非常明显的Dialog提示,那就从显示的元素下手。
  • • 使用开发助手app中的布局查看功能查看弹窗的具体id。得到如下图的结果。从布局结果来看,这并不是一个自定义的Dialog,而是一张Img,并且其id为: R.id.mAdCoverImg ,我说刚才代码中为什么没有Dialog的逻辑代码。
    APK逆向分析-以某车机哄娃app为例
  • • 在Jadx上找这个id的关键词。找到了关键的Fragment:PullADFragment,看名字应该就知道和广告界面有关。
APK逆向分析-以某车机哄娃app为例
* 分析PullADFragment,发现了另外一个关键的元素:即关闭广告的Img,在上一步布局查看中,由于此Img太小,期初并没有注意。在分析PullADFragment才发现这一Img控件。  
APK逆向分析-以某车机哄娃app为例
* 继续分析关闭广告的Img的Click逻辑。((ImageView) view.findViewById(R$id.mAdCloseImg)).setOnClickListener(new a(1, this));在代码中,new a(1, this)表示创建了一个名为a的匿名内部类的实例,并将其作为点击事件的监听器传递给setOnClickListener方法。函数a的具体代码如下:
    
            public static final class a implements View.OnClickListener {
      public final /* synthetic */ int a;
      public final /* synthetic */ Object b;
    
      public a(int i, Object obj) {
          this.a = i;
          this.b = obj;
      }
    
      @Override // android.view.View.OnClickListener
      public final void onClick(View view) {
          int i = this.a;
          if (i != 0) {
              if (i == 1) {
                  ((PullADFragment) this.b).dismiss();
                  return;
              }
              throw null;
          }
          PullADFragment.a((PullADFragment) this.b);
          IAppService a = PullADRepo.b.a();
          if (a != null) {
              FragmentActivity requireActivity = ((PullADFragment) this.b).requireActivity();
              h.a((Object) requireActivity, "requireActivity()");
              c.a.b.g.a.b.a aVar = ((PullADFragment) this.b).f1308c;
              if (aVar != null) {
                  String d = aVar.d();
                  if (d == null) {
                      d = "";
                  }
                  a.a(requireActivity, d, null);
              } else {
                  h.b("vo");
                  throw null;
              }
          }
          ((PullADFragment) this.b).dismiss();
      }
    }
    

* 之前分析了这么多,到试图修改的时候才发现逻辑有问题,上面的分析到了Click的地方,而我们的需求是让这个fragment直接不显示,何来Click之说。
* 然后想其他办法,这里是不是可以在fragment的Create函数中直接return-void,不进行下面的Image或者fragment初始化操作。在下面函数中的smali代码中直接加入return-void。

APK逆向分析-以某车机哄娃app为例
APK逆向分析-以某车机哄娃app为例
* 进行上面的修改,找到该fragment的smali代码。  
APK逆向分析-以某车机哄娃app为例
APK逆向分析-以某车机哄娃app为例
* 保存、打包、签名、安装、测试。发现fragment直接不显示,也就达成了我们的目的。

会员资源解锁

  • • 首先需要登录,那就抓包看一下登录的请求。抓到下面一系列的包,简单分析一下。
    APK逆向分析-以某车机哄娃app为例
  • • 其中比较重要的是下面这个请求 /inner/user/member 与响应。从响应来看这是针对用户登录后的信息,而且没有加密。
    APK逆向分析-以某车机哄娃app为例
  • • 方法一是针对/inner/user/member这一请求进行静态注入,将关于vip的返回信息都改为true。
    APK逆向分析-以某车机哄娃app为例
  • • 静态注入后重新登录,发现小黄鸟提示注入成功,点开app个人中心看到,显示是vip,但是到期时间由于格式不请求就没修改,所以是null。
    APK逆向分析-以某车机哄娃app为例
    APK逆向分析-以某车机哄娃app为例
  • • 方法二:修改原始代码逻辑。抓包的环境不可能都有,车上更难配置相关环境了,所以改原始的代码逻辑才是一步到位的。
  • • 根据之前的分析,可以知道 user/member ,这个网络请求的关键词,在Jadx搜索这个关键词。一共有三处用到了,都是作为请求响应的Result。
APK逆向分析-以某车机哄娃app为例
* 简单分析一下上面三个Result,其中比较重要的应该是MemberInfoResult,这是关于用户登录后信息的Result。里面有关于用户状态的set和boolean函数。  
APK逆向分析-以某车机哄娃app为例
* 其中只有一个关于是否是会员的函数,即上面截图中的is_vip()函数,且返回值是boolean。一个修改的方法是将返回值固定改为0x1。  
APK逆向分析-以某车机哄娃app为例
* 保存、打包、签名、安装、测试。发现和之前抓包静态注入一样,都显示会员,而且可以收听需要vip的故事。  
APK逆向分析-以某车机哄娃app为例
APK逆向分析-以某车机哄娃app为例
  • • 还遇到了一个问题,就是有的知识故事vip也不能听,要购买,怎么让孩子听个故事这么难。
    APK逆向分析-以某车机哄娃app为例
  • • 由于涉及到更多网络请求的逻辑和自己有限的能力,关于购买的这部分就没分析成功,希望有师傅指点一二。而且这个工程混淆的让代码难以理解,比如这种c.e.a.a.a.a("goods_id=")。
  • • 以上分析仅供学习参考,切记遵纪守法,尊重版权。
  • 文章来源:https://xz.aliyun.com/t/13508

    技术交流

    学习圈子

    一个引导大家一起成长,系统化学习的圈子。

    如果看到这里的师傅是基础不够扎实/技术不够全面/入行安全不久/有充足时间的初学者...其中之一,那么欢迎加入我们的圈子,圈子提供以下内容:

    1、每周发布学习任务,由浅入深,循序渐进,从常见的Web漏洞原理与利用、业务逻辑漏洞与挖掘,到WAF绕过、代码审计、钓鱼与免杀,再到Linux/Windows内网、提权、权限维持、隧道代理、域渗透,层层递进。会发布相应的参考资料及建议,成员自行学习实践,并会根据每周任务选取1-3位完成优秀的成员,返还入圈费用。
    2、日常分享优质学习资源与攻防渗透技巧,包括但不限于渗透tips、教程、手册、学习路线等。
    3、一个学习氛围浓厚的社区,遇到问题可以快速提问、交流讨论,共同学习。
    • 目前已经规划了几个月的内容:

    APK逆向分析-以某车机哄娃app为例

    欢迎加入我们,一起学习!

    APK逆向分析-以某车机哄娃app为例

    交流群

    关注公众号回复“加群”,添加Z2OBot好友,自动拉你加入Z2O安全攻防交流群(微信群)分享更多好东西。

    APK逆向分析-以某车机哄娃app为例

    关注我们

    关注福利:

    回复“app" 获取 app渗透和app抓包教程

    回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。

    回复“漏洞库" 获取 最新漏洞POC库(1.2W+)

    回复“资料" 获取 网络安全、渗透测试相关资料文档

    点个【 在看 】,你最好看

    原文始发于微信公众号(Z2O安全攻防):APK逆向分析-以某车机哄娃app为例

    • 左青龙
    • 微信扫一扫
    • weinxin
    • 右白虎
    • 微信扫一扫
    • weinxin
    admin
    • 本文由 发表于 2024年2月28日00:51:39
    • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                     APK逆向分析-以某车机哄娃app为例http://cn-sec.com/archives/2531791.html

    发表评论

    匿名网友 填写信息