某次 ctf Mobile 0x01 解题过程
文章目录
- 题目
- 一、解题过程及代码分析
- 代码分析
- Judge() 函数分析
- b.a() 函数分析及还原
- b.b() 函数分析:
- a.a() 函数分析
- a.a()混淆函数还原
- 总结
前言:同学发来了一个ctf比赛,在校实习期间利用空闲时间做了几道ctf题目
题目
Mobile 0x01
一、解题过程及代码分析
通过下载文件链接后得到一个apk文件
直接拖进jadx-gui-1.2.0-no-jre-win.exe 进行反编译,不考虑有没有加壳.
一般情况安卓的主界面代码都在com包下面,直接找到MainActivity 入口文件。在点击事件监听之后执行了Judge() 函数。定位Judge()函数进行流程分析。
在代码分析过程中为了更方便调试代码,把java需要用到的代码扣到本地的idea上。
根据调用Judge函数调用过程中调到了a,b,c,三个对象类,把a,b,c代码扣下来
代码分析
Judge() 函数分析
b.a() 函数分析及还原
得到第一段base64(0~16位)的还原值:SVNDQ3tkaXNwbGFj
b.b() 函数分析:
单独打印c.a() 函数:得到J0tpzHRuhTQpLauS,字符串a等于J0tpzHRuhTQpLauS
Aes 对unj2Cn3dS9Ya1LDFPlA+eA== 解密得到字符串b等于otG28PYN8CtG
a.a() 函数分析
剩下只需要把a.a(),a.b() 函数还原就可以了,在原代码中是这样的,比较长,主要是对字符串:cdeEFGfghijkKLHIJNO9/PQYqrsMnoRSTablBCDtZ012UVWXpyzA345umvwx678= 进行取值处理
代码优化及分析
a.a()混淆函数还原
对J0tpzHRuhTQpLauS 字符串进行还原,还原代码解密后得到:ZV9hbHRlcm5hdGl2
a.b() 函数加密过程同a.a() 函数一样。
唯一的不懂是混淆字符串k等于
k = "cdYqrsMneEFwxg78=GfKlLHRSTabBCDtZ012UhiQok6VWmXpjIJNO9/PyzA345uv";b值:otG28PYN8CtG
还原代码解密后得到:ZV9tb2JpbGV9
把之前还原出来的字符串进行拼接
第一段base64(0~16位)的还原值:SVNDQ3tkaXNwbGFj
第二部分:ZV9hbHRlcm5hdGl2
第三部分:ZV9tb2JpbGV9
拼接得到:SVNDQ3tkaXNwbGFjZV9hbHRlcm5hdGl2ZV9tb2JpbGV9
最后进行base64解码得到要求的字符串:ISCC{displace_alternative_mobile}
根据题目提交的flag格式最终为:flag{displace_alternative_mobile}
总结
之前没做过啥ctf题目,刚好懂一点点java,在整个代码分析字符串的混淆思路及还原过程还是很有趣的。
某次 ctf Mobile 0x01 解题过程相关推荐
- CTF 关于ZIP解题过程
CTF 关于ZIP解题 1.伪加密类型 打开之后是两张图片,一张未加密,一张已加密. 利用WinHex打开 然后在谷歌上找到大佬关于zip格式的介绍 接下来进行对比,看是否属于伪加密 通过对比,发现确 ...
- 逆向查找_CTFer成长之路--一道数独逆向题目解题过程(算法分析、查找线索)...
前言 CTF 是实战性很强的赛事.仅学习理论知识,不进行实操,永远无法成为 CTF 大神.本次博客为大家解读一道数独相关的逆向,讲解解题过程,总结知识点(CTF中的套路). 题目介绍 本次选择的是出自 ...
- CTF学习-密码学解题思路
CTF学习-密码学解题思路 密码学持续更新 密码学概述 密码学的发展 第一个阶段是从古代到19世纪末-古典密码 (classical cryptography) 第二个阶段从20世纪初到1949年-近 ...
- CTF学习-逆向解题思路
CTF学习-逆向解题思路 持续更新 一.通用过程 通过file命令查看文件类型,判断是ELF还是PE,32位还是64位. 通过strings并重定向标准输出,然后搜索大括号 { ,看看是否能直接得到f ...
- CTFer成长之路--一道历届逆向题解题过程(包含脱壳、算法分析)
前言 CTF 是实战性很强的赛事.仅学习理论知识,不进行实操,永远无法成为 CTF 大神.从本篇博客开始,我将选择有代表性的历年CTF比赛题目,介绍解题过程,工具使用以及讲解知识点. 题目介绍 本次讲 ...
- 7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)
7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的 ...
- bugku上Snowfall解题过程
MISC的Snowfall解题过程: 刚看到打开人直接傻掉,翻译一下暴风雪???什么鬼题,有没有一样这样想的 1:先看两个txt名字,告诉了步骤1,步2,所以肯定这个有用,给个网站: Whitelip ...
- 攻防世界warmup新人小白友好向详细解题过程
攻防世界warmup新人小白详细解题过程 思路:查看网页源码发现提示信息,/source.php 进行代码审计 ,主要函数找出,PHP函数记住,自己构造PAYLOAD 声明:菜菜级的水平,解析有错的不 ...
- 九宫格一条线连起来_九宫格的解题过程讲解
九宫格的解题过程 第 1 步首先计算每行数字之和. 1 - 9 九个数字之和: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45 九宫格共有三行,并且每行的数字之和相等,因 ...
最新文章
- 从git中永久物理删除私密文件(改写git历史)
- react控制元素的显示或隐藏
- Unix环境高级编程学习笔记(七) 多线程
- myysql 不能远程访问的解决办法
- JavaScript变量声明+数据类型+数字格式+操作符+进制
- 【信息安全111班暑期学习工作任务】
- Kafka 2.8与ZooKeeper正式分手
- Valgrind 使用简单说明-转
- php java session共享_PHP实现多服务器session共享之NFS共享
- ES7 设置磁盘使用率水位线 allocation.disk.watermark
- 谭浩强 c语言 swap,C语言谭浩强完整教案.ppt
- vb阶乘计算机代码,速求100的阶乘的代码
- 机器学习之 kd 树
- 台达PLC与紫金桥监控组态软件的连接
- HDU1922 POJ3004 Subway planning “神题”留名
- MYSQL数据库跨服务器实时同步更新实践----文献阅读(污水管网水质预测)
- ie8 阻止java运行_解决IE屏蔽Java Applet问题的方法
- Java多线程超时判断
- Kali Linux入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
- 手持PDA扫描枪有什么功能?