XCTF-easydex
前期工作
查壳,无。安装打开黑屏。
逆向分析
用jadx打开看看

什么都没有,但可以看一下AndroidManifest

可以看到这个是个纯C/C++写的,没有Java代码,是个NativeActivity。
但是后面又有个MainActivity,所以可能是运行so之后就会放出来一个dex。
NativeActivity的启动函数是android_main,进入so中查看android_main


off_43A18存的是0x3CA10
开始把0x7004开始的长度为0x3CA10的数据拷贝到v3里
然后一顿操作后提示

想想都知道正常人是肯定做不到的,继续往下看

v14应该就是手机摇动次数了,如果符合要求的话就解压v3到dest然后写入一个文件。v3存的应该就是dex了。将内容dump下来。


通过对比很明显,这个不是dex,猜测有加密,回到前面看看

这块地方操作了off_43A18和v3,所以这里应该是解密部分,前面应该是获取手机摇动次数。看看这里 发生了什么

编写解密脚本,其实就是将IDA翻译成python
import zlib
with open('d:\\easydex', 'rb') as f:
data = list(f.read())
size = 0x3ca10
times = 0
while True:
if times <= 0x59:
t = int(times / 10)
if times % 10 == 9:
s = int(size / 10)
x = (t + 1) * s
if s * t < x:
c = 0
for _ in range(s):
data[s * t + c] = data[s * t + c] ^ times
c += 1
if times == 0x59:
while x < size:
data[x] = data[x] ^ 89
x += 1
break
times += 1
fbytes = bytes(data)
with open('easydex.dex', 'wb') as f1:
f1.write(zlib.decompress(fbytes))
得到dex放入jadx继续分析
文件结构

MainActivity

监听器是a,

查找这个资源id


猜测是twofish加密了,I have a male fish and a female fish.这个应该是密钥,明文加密钥加密得到m正确即可
再回看MainActivity中的m,居然有负数。其中Byte.MIN_VALUE数值为-128。
查找资料

编写脚本解密后得到的不是可读字符,网上在线twofish的结果是base64编码的,所以将结果进行base64
最终脚本
import base64
flag = [-120, 77, -14, -38, 17, 5, -42, 44, -32, 109, 85, 31, 24, -91, -112, -83, 64, -83, -128, 84, 5, -94, -98, -30, 18, 70, -26, 71, 5, -99, -62, -58, 117, 29, -44, 6, 112, -4, 81, 84, 9, 22, -51, 95, -34, 12, 47, 77]
data = []
for i in flag:
data.append(i&0xff)
print(base64.b64encode(bytes(data)))

拿去解密

得到flag
FLAG
qwb{TH3y_Io<e_EACh_OTh3r_FOrEUER}
总结
做这题真是学到了很多东西,也掌握了一些技巧。首先看到黑屏且没有代码很慌,查看Manifest之后又去查找资料才知道这个是NativeActivity,之后dump内存用的脚本也是上网查找资料才知道又idaapi这种东西,查找字符串资源的时候因为jadx在资源文件中搜不到所以将项目导出后用AndroidStudio打开查找才找得到,什么zlib之类的也是第一次看见,这题查资料学东西花了两天。
XCTF-easydex的更多相关文章
- 攻防世界(XCTF)WEB(进阶区)write up(四)
ics-07 Web_php_include Zhuanxv Web_python_template_injection ics-07 题前半部分是php弱类型 这段说当传入的id值浮点值不能为1 ...
- 攻防世界(XCTF)WEB(进阶区)write up(三)
挑着做一些好玩的ctf题 FlatScience web2 unserialize3upload1wtf.sh-150ics-04web i-got-id-200 FlatScience 扫出来的lo ...
- 攻防世界(XCTF)WEB(进阶区)write up(一)
cat ics-05 ics-06 lottery Cat XCTF 4th-WHCTF-2017 输入域名 输入普通域名无果 输入127.0.0.1返回了ping码的结果 有可能是命令执行 ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
- xctf进阶-unserialize3反序列化
一道反序列化题: 打开后给出了一个php类,我们可以控制code值: `unserialize()` 会检查是否存在一个 `__wakeup()` 方法.如果存在,则会先调用 `__wakeup` 方 ...
- 日常破解--从XCTF的app3题目简单了解安卓备份文件以及sqliteCipher加密数据库
一.题目来源 题目来源:XCTF app3题目 二.解题过程 1.下载好题目,下载完后发现是.ab后缀名的文件,如下图所示: 2.什么是.ab文件?.ab后缀名的文件是Andr ...
- 日常破解--XCTF easy_apk
一.题目来源 来源:XCTF社区安卓题目easy_apk 二.破解思路 1.首先运行一下给的apk,发现就一个输入框和一个按钮,随便点击一下,发现弹出Toast验证失败.如下图所示: ...
- XCTF练习题-WEB-webshell
XCTF练习题-WEB-webshell 解题步骤: 1.观察题目,打开场景 2.根据题目提示,这道题很有可能是获取webshell,再看描述,一句话,基本确认了,观察一下页面,一句话内容,密码为sh ...
- 【XCTF】ics-04
信息: 题目来源:XCTF 4th-CyberEarth 标签:PHP.SQL注入 题目描述:工控云管理系统新添加的登录和注册页面存在漏洞,请找出flag 解题过程 进入注册页面,尝试注册: 进行登录 ...
- 【XCTF】ics-05
信息: 题目来源:XCTF 4th-CyberEarth 标签:PHP.伪协议 题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统 解题过程 题目给了一个工控管理系统,并提示存在后门, ...
随机推荐
- 前端Vscode常用插件概述
以下是我自己在工作中常用的插件,写给刚入门的前端coder.VSCode插件商店中实用的插件还是很多的,大家也可以对感兴趣的插件下载下来尝试一下的! 持续更新 插件名称 概述 作用 常用默认快捷键 C ...
- 使用sqlmap
实验环境要求: 1.安装win7或win10的笔记本或PC电脑一台,硬盘100GB,内存8GB 2.安装VMware Workstation 14以上 总体目标:基于centos7搭建dvwa web ...
- three.js 显示中文字体 和 tween应用
今天郭先生说一下如何在three中显示中文字体,然后结合tween实现文字位置的动画.线案例请点击博客原文. 1. 生成中文字体 我们都使用过three.js的FontLoader加载typeface ...
- C# 串口连接的读取与发送
一.串口连接的打开与关闭 串口,即COM口,在.NET中使用 SerialPort 类进行操作.串口开启与关闭,是涉及慢速硬件的IO操作,频繁打开或关闭会影响整体处理速度,甚至导致打开或关闭串口失败. ...
- Modbus java slave app
文章实现 Modbus slave app , 用 serial rtu 传输, 代码只实现监听功能(本人测试可行), 要实现写功能,可研究一下代码中 updateProcessImage 方法.完整 ...
- JS常见面试题,看看你都会多少?
1. 如何在ES5环境下实现let 这个问题实质上是在回答let和var有什么区别,对于这个问题,我们可以直接查看babel转换前后的结果,看一下在循环中通过let定义的变量是如何解决变量提升的问题 ...
- 【原创】Linux PCI驱动框架分析(三)
背 景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本 ...
- 入门Kubernetes -基础概念
一.Kubernetes概述 Kubernetes ,又称为 k8s(首字母为 k.首字母与尾字母之间有 8 个字符.尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是 ...
- Linux LVM Logical Volume Management 逻辑卷的管理
博主是一个数据库DBA,但是一般来说,是不做linux服务器LVM 逻辑卷的创建.扩容和减容操作的,基本上有系统管理员操作,一是各司其职,专业的事专业的人做,二是做多了你的责任也多了,哈哈! 但是li ...
- Java实现RS485串口通信
前言 前段时间赶项目的过程中,遇到一个调用RS485串口通信的需求,赶完项目因为楼主处理私事,没来得及完成文章的更新,现在终于可以整理一下当时的demo,记录下来. 首先说一下大概需求:这个项目是机器 ...