0x00 说明

刷android ctf题,感觉涉及的点不错,分享一下做题过程。

题目:

2015 RCTF / 攻防世界高手区 where

描述(提示):

Where is the flag.(The flag should include RCTF{})

hint:where is body

hint2: the KEY is visible strings, -k -nosalt

涉及的漏洞点:

1、炸弹引爆

2、dex修复

0x01 漏洞简析

1、炸弹引爆

“炸弹引爆”,先将恶意代码作为炸弹,隐藏在手机设备之中,然后再使用引爆器来点燃隐藏炸弹。

这道题的隐藏点是/META-INFO文件夹中,关于隐藏点看如下图

企业微信20200305031636.png (167.34 KB, 下载次数: 1)

2020-3-5 17:44 上传

详细介绍参考:https://www.blackhat.com/ldn-15/summit.html#what-can-you-do-to-an-apk-without-its-private-key-except-repacking

2、dex修复

dex修复首先要了解dex格式

企业微信20200305032243.png (77.41 KB, 下载次数: 0)

2020-3-5 17:44 上传

header : DEX 文件头,记录了一些当前文件的信息以及其他数据结构在文件中的偏移量

string_ids : 字符串的偏移量

type_ids : 类型信息的偏移量

proto_ids : 方法声明的偏移量

field_ids : 字段信息的偏移量

method_ids : 方法信息(所在类,方法声明以及方法名)的偏移量

class_def : 类信息的偏移量

data : : 数据区

link_data : 静态链接数据区

这道题重点是 header、string_ids、type_ids

dex修复我的理解就是格式对应清楚就可以进行修复,具体的结构可以查看android源码

0x02 逻辑分析

1、查看apk

企业微信20200305034106.png (486.86 KB, 下载次数: 0)

2020-3-5 17:44 上传

java层没有flag,但是指向了assets和META-INF文件夹

(1)assets/abc

企业微信20200305040947.png (667.16 KB, 下载次数: 0)

2020-3-5 17:44 上传

这是dex header 大小是112,dex总大小是1395184,dex body大小是 1395072 = 1395184-112

基本上这道题的思路就出来了,按漏洞点的思路找到隐藏的dex

(2)META-INF/CERT.RSA

企业微信20200305042516.png (25.81 KB, 下载次数: 0)

2020-3-5 17:44 上传

CERT.RSA的大小是很有问题的,这里应该是隐藏了代码,看大小应是dex body

按照漏洞点隐藏代码应该是追加在CERT.RSA尾部

CERT.RSA大小是1396394-1395072 = 1322(0x52A)

在0x52A附近可以找到如下线索

企业微信20200305044629.png (102.49 KB, 下载次数: 0)

2020-3-5 17:44 上传

尾部发现:

企业微信20200305043925.png (86.96 KB, 下载次数: 1)

2020-3-5 17:44 上传

KEY=Misc@inf0#fjhx11

DEX=

aes-128-cbc

根据题目的提示,DEX=之后的信息应该是dex body,需要是openssl进行解密获得真正的body

openssl enc -d -aes-128-cbc -in body -out decrypted -k 'Misc@inf0#fjhx11' -nosalt

解密前:encode_body

解密后:decode_body

(3)META-INF/y

暂时看不出用处 大小是 0x93

企业微信20200305045837.png (165.52 KB, 下载次数: 0)

2020-3-5 17:43 上传

2、dex修复还原

(1)dex header+body

将abc和decode_body拼接之后,发现文件无法进行反编译,原因是dex header中string_ids、type_ids值是0

修复前

企业微信20200305050704.png (474.14 KB, 下载次数: 0)

2020-3-5 17:43 上传

修复后

企业微信20200305050745.png (464.61 KB, 下载次数: 0)

2020-3-5 17:43 上传

(2)dex2jar

企业微信20200305050918.png (194.68 KB, 下载次数: 0)

2020-3-5 17:43 上传

m3ll0t_yetFLag 不是正确的flag

/* access modifiers changed from: protected */

public void onCreate(Bundle bundle) {

throw new VerifyError("bad dex opcode");

}

说明onCreate方法有问题

CODE:00097390                     # Source file: MainActivity.java

CODE:00097390                     protected void com.example.hello.MainActivity.onCreate(

CODE:00097390                           android.os.Bundle savedInstanceState)

CODE:00097390                     this = v6

CODE:00097390                     savedInstanceState = v7

CODE:00097390 0000                                nop

CODE:00097392                                     .prologue_end

CODE:00097392                                     .line 15

CODE:00097392 0000                                nop

CODE:00097394 0000                                nop

CODE:00097396 0000                                nop

CODE:00097398                                     .line 16

CODE:00097398 0000                                nop

CODE:0009739A 0000                                nop

CODE:0009739C 0000                                nop

CODE:0009739E 0000                                nop

CODE:000973A0 0000                                nop

CODE:000973A2 0000                                nop

CODE:000973A4                                     .line 17

CODE:000973A4 0000                                nop

CODE:000973A6 0000                                nop

CODE:000973A8 0000                                nop

CODE:000973AA 0000                                nop

CODE:000973AC 0000                                nop

CODE:000973AE 0000                                nop

CODE:000973B0 0000                                nop

CODE:000973B2                     .local name:'strb' type:'Ljava/lang/StringBuilder;'

CODE:000973B2                     strb = v1

CODE:000973B2                                     .line 18

CODE:000973B2 0000                                nop

CODE:000973B4 0000                                nop

CODE:000973B6 0000                                nop

CODE:000973B8 0000                                nop

CODE:000973BA 0000                                nop

CODE:000973BC 0000                                nop

CODE:000973BE                                     .line 19

CODE:000973BE 0000                                nop

CODE:000973C0 0000                                nop

CODE:000973C2 0000                                nop

CODE:000973C4 0000                                nop

CODE:000973C6 0000                                nop

CODE:000973C8 0000                                nop

CODE:000973CA 0000                                nop

CODE:000973CC                                     .line 20

CODE:000973CC 0000                                nop

CODE:000973CE 0000                                nop

CODE:000973D0 0000                                nop

CODE:000973D2 0000                                nop

CODE:000973D4 0000                                nop

CODE:000973D6 0000                                nop

CODE:000973D8 0000                                nop

CODE:000973DA 0000                                nop

CODE:000973DC 0000                                nop

CODE:000973DE                                     .line 21

CODE:000973DE 0000                                nop

CODE:000973E0 0000                                nop

CODE:000973E2 0000                                nop

CODE:000973E4 0000                                nop

CODE:000973E6 0000                                nop

CODE:000973E8 0000                                nop

CODE:000973EA 0000                                nop

CODE:000973EC 0000                                nop

CODE:000973EE                                     .line 22

CODE:000973EE 0000                                nop

CODE:000973F0 0000                                nop

CODE:000973F2 0000                                nop

CODE:000973F4 0000                                nop

CODE:000973F6                     .local name:'flag' type:'Ljava/lang/String;'

CODE:000973F6                     flag = v0

CODE:000973F6                                     .line 23

CODE:000973F6 0000                                nop

CODE:000973F8 0000                                nop

CODE:000973FA 0000                                nop

CODE:000973FC 0000                                nop

CODE:000973FE 0000                                nop

CODE:00097400 0000                                nop

CODE:00097402 0000                                nop

CODE:00097404 0000                                nop

CODE:00097406 0000                                nop

CODE:00097408 0000                                nop

CODE:0009740A 0000                                nop

CODE:0009740C 0000                                nop

CODE:0009740E 0000                                nop

CODE:00097410 0000                                nop

CODE:00097412 0000                                nop

CODE:00097414 0000                                nop

CODE:00097416 0000                                nop

CODE:00097418 0000                                nop

CODE:0009741A 0000                                nop

CODE:0009741C 0000                                nop

CODE:0009741E 0000                                nop

CODE:00097420 0000                                nop

CODE:00097422                                     .line 24

CODE:00097422 0000                                nop

CODE:00097422                     Method End

CODE:00097422                     # ---------------------------------------------------------------------------

(3)修复onCreate

onCreate的大小是 0x97423 - 0x97390 = 0x93 正好和 META-INF/y大小相似,将y填充到onCreate方法中

找到0x97390在dex中的位置

企业微信20200305052218.png (137.64 KB, 下载次数: 0)

2020-3-5 17:43 上传

将y进行填充

企业微信20200305052255.png (179.19 KB, 下载次数: 0)

2020-3-5 17:43 上传

dex2jar之后

企业微信20200305052609.png (276.94 KB, 下载次数: 0)

2020-3-5 17:43 上传

最后得到根据代码获取flag

public String seed = "m3ll0t_yetFLag";

/* access modifiers changed from: protected */

public void onCreate(Bundle bundle) {

super.onCreate(bundle);

setContentView((int) R.layout.activity_main);

StringBuilder sb = new StringBuilder(this.seed);

sb.replace(0, 1, "h");

sb.replace(5, 6, "2");

sb.replace(10, 11, "f");

sb.replace(7, 8, "G");

Toast.makeText(this, "flag is " + sb.toString(), 0).show();

}

0x03 总结

1、简单修复dex header

2、简单修复onCreate

3、修复过程中的文件在附件中

4、了解一个android漏洞

android 克隆攻击原理,通过CTF学习Android漏洞(炸弹引爆+dex修复)2015 RCTF / 攻防世界高手区 where...相关推荐

  1. 逆向迷宫题总结(持续更新) 2020华南师大CTF新生赛maze,攻防世界新手区:NJUPT CTF 2017,BUUCTF:不一样的flag

    CTF逆向入门:迷宫题学习记录(持续更新) ** 目录 **CTF逆向入门:迷宫题学习记录(持续更新)** (前言) 一. 逆向迷宫题概述 二. 具体题目分析 1. 2019华南师大CTF新生赛maz ...

  2. android app攻击与防范论文,基于Android平台的应用程序安全保护研究与应用

    摘要: 随着Android操作系统的广泛使用和移动互联网时代的到来,Android系统的安全问题也不断出现,给用户和开发者造成了许多困扰.Android应用程序面临着知识产权被侵犯.被二次打包.应用程 ...

  3. android手机固件升级原理,为什么常说Android手机千万别频繁的系统升级,背后的真实原因?...

    摘要:每次Android手机系统的新版本推送,都会让一些选择困难户纠结到底应不应该升级?有些安卓机友一想到更新系统之后的新体验不免心痒痒. 普通用户更适合使用官方推送的系统更新,但多数设备寿终就寝时也 ...

  4. 由浅入深 学习 Android Binder(一)- AIDL

    Android Binder系列文章: 由浅入深 学习 Android Binder(一)- AIDL 由浅入深 学习 Android Binder(二)- bindService流程 由浅入深 学习 ...

  5. Android 插件化原理入门笔记

    Android开发笔记 onGithub 笔记,参考7.2中所列参考文章所写,DEMO地址在PluginTestDemoApplication 1.综述 2015年是Android插件化技术突飞猛进的 ...

  6. 由浅入深 学习 Android Binder(十一) binder线程池

    Android Binder系列文章: 由浅入深 学习 Android Binder(一)- AIDL 由浅入深 学习 Android Binder(二)- bindService流程 由浅入深 学习 ...

  7. Android面试Hash原理详解二

    Hash系列目录 Android面试Hash原理详解一 Android面试Hash原理详解二 Android面试Hash常见算法 Android面试Hash算法案例 Android面试Hash原理详解 ...

  8. android编程从零开始,从零开始学习android开发

    博主最近开通了Android栏目,现在正在从零开始学习android,遇到的所有值得分享的知识点以及遇到的问题将发布在这个博客的android栏目下. 因为我有着深厚的java底子,所以学习起来得心应 ...

  9. Android插件化原理(一)Activity插件化

    title: " Android插件化原理(一)Activity插件化" date: 2018-5-28 00:16 photos: https://s2.ax1x.com/201 ...

最新文章

  1. MYSQL [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
  2. Spark调优——你工作中的首选
  3. 获取salve设备地址_商机 | 优选设备,让废金属加工更高效!
  4. 2020年计算机二级access考试大纲,2020年全国计算机二级ACCESS考试分析与小结(7页)-原创力文档...
  5. android 线程使用监控思路分享
  6. 双变量空间自相关_【数据分析】变量探索分析
  7. python运维和开发实战-高级篇
  8. 【学习笔记】Nake Statistics
  9. 方法:如何下载微信文章里的音频?-2022.4.13(已解决)
  10. 熊出没机器人光头强_《熊出没》里的温馨时刻,原来光头强和熊大熊二的关系也能这么好...
  11. 2022年装饰行业市场分析
  12. 【项目】关于杉德支付接口对接
  13. Linux-安装MongoDB(详细教程)
  14. 小米总监汇总的几点软件测试方法~
  15. TASK SCHEDULE(任务计划)服务无法运行 解决方案
  16. vue.js毕业设计,基于vue.js前后端分离教室预约系统(H5移动项目) 开题报告
  17. BUUCTF-web极客大挑战
  18. 百度浏览器android,百度浏览器app下载
  19. storm mysql trident_Trident简介
  20. 2008年12月大小非解禁股一览表

热门文章

  1. html阅读器 怎样卸载,怎样彻底卸载掉金山pdf阅读器?
  2. 一千行mysql笔记
  3. (硬件设计)老工程师的经验之道
  4. Android解码视频每一帧,Android 获取视频缩略图(获取视频每帧数据)的优化方案
  5. eclipse连接SQL Server数据库(详解很细心)
  6. matlab 数字信号波形图,数字信号处理第三次实验代码及波形图
  7. 开发到上线仅 16 天,海外党研发微信小程序全攻略
  8. rx590 黑苹果 无货_应粉丝要求花9000配了一台高端黑苹果电脑,大家看看值不值吧!...
  9. at com.android.xiong.aysnctasktest.MainActivity$PageTask.onPostExecute(MainActivity.java:116)
  10. LeetCode 每日一题:606. 根据二叉树创建字符串