前期工作

查壳,无。安装打开黑屏。

逆向分析

用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的更多相关文章

  1. 攻防世界(XCTF)WEB(进阶区)write up(四)

    ics-07  Web_php_include  Zhuanxv Web_python_template_injection ics-07 题前半部分是php弱类型 这段说当传入的id值浮点值不能为1 ...

  2. 攻防世界(XCTF)WEB(进阶区)write up(三)

    挑着做一些好玩的ctf题 FlatScience web2 unserialize3upload1wtf.sh-150ics-04web i-got-id-200 FlatScience 扫出来的lo ...

  3. 攻防世界(XCTF)WEB(进阶区)write up(一)

      cat ics-05 ics-06 lottery Cat XCTF 4th-WHCTF-2017 输入域名  输入普通域名无果  输入127.0.0.1返回了ping码的结果 有可能是命令执行 ...

  4. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

  5. xctf进阶-unserialize3反序列化

    一道反序列化题: 打开后给出了一个php类,我们可以控制code值: `unserialize()` 会检查是否存在一个 `__wakeup()` 方法.如果存在,则会先调用 `__wakeup` 方 ...

  6. 日常破解--从XCTF的app3题目简单了解安卓备份文件以及sqliteCipher加密数据库

    一.题目来源     题目来源:XCTF app3题目 二.解题过程     1.下载好题目,下载完后发现是.ab后缀名的文件,如下图所示:     2.什么是.ab文件?.ab后缀名的文件是Andr ...

  7. 日常破解--XCTF easy_apk

    一.题目来源     来源:XCTF社区安卓题目easy_apk 二.破解思路     1.首先运行一下给的apk,发现就一个输入框和一个按钮,随便点击一下,发现弹出Toast验证失败.如下图所示: ...

  8. XCTF练习题-WEB-webshell

    XCTF练习题-WEB-webshell 解题步骤: 1.观察题目,打开场景 2.根据题目提示,这道题很有可能是获取webshell,再看描述,一句话,基本确认了,观察一下页面,一句话内容,密码为sh ...

  9. 【XCTF】ics-04

    信息: 题目来源:XCTF 4th-CyberEarth 标签:PHP.SQL注入 题目描述:工控云管理系统新添加的登录和注册页面存在漏洞,请找出flag 解题过程 进入注册页面,尝试注册: 进行登录 ...

  10. 【XCTF】ics-05

    信息: 题目来源:XCTF 4th-CyberEarth 标签:PHP.伪协议 题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统 解题过程 题目给了一个工控管理系统,并提示存在后门, ...

随机推荐

  1. JVM调试说明

    -XX:+<option>:表示开启option选项 -XX:-<option>:表示关闭option选项 -XX:<option>=<value>:表 ...

  2. 大数据可视化呈现工具LightningChart的用法

    LightningChart (LightningChart Ultimate) 软件开发工具包是微软VisualStudio 的一个插件,专攻大数据可视化呈现问题,用于WPF(WindowsPres ...

  3. 短信平台开发,G客短信系统功能介绍

    G客短信群发平台功能介绍 支持HTTP 接口 .CMPP SMPP等 这里只有基本功能介绍 联系微信:290615413 QQ:290615413 一:客户端功能 1:首页仪表盘 首页包含 2:发送短 ...

  4. Openwrt_Linux_crontab任务_顺序执行脚本

    Openwrt_Linux_crontab任务_顺序执行脚本 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-12-21. Linux (openwrt,debian,centos. ...

  5. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...

  6. 【C++】《C++ Primer 》第八章

    第八章 IO库 一.IO类 1. 标准库定义的IO类型 头文件 作用 类型 iostream 从标准流中读写数据 istream, wistream 从流读取数据 ostream, wostream ...

  7. Flutter 基础组件:进度指示器

    前言 Material 组件库中提供了两种进度指示器:LinearProgressIndicator和CircularProgressIndicator,它们都可以同时用于精确的进度指示和模糊的进度指 ...

  8. ubuntu环境下搭建Hadoop集群中必须需要注意的问题

    博主安装的hadoop是3.1.3这里是按照厦门大学那个博客安装的,在安装与启动过程中,费了不少事,特此记录一下问题. 安装的连接: 安装环境:http://dblab.xmu.edu.cn/blog ...

  9. Linux Clone函数

    Linux Clone函数 之前某一次有过一次面试,问了内核中是怎么创建命名空间的? 下面就来扒一扒clone的精髓,以及如何通过它创建命名空间. 目录 Linux Clone函数 使用clone创建 ...

  10. LeetCode404.左叶子之和

    题目 法一.广度优先搜索 1 class Solution { 2 public: 3 int sumOfLeftLeaves(TreeNode* root) { 4 if(root == NULL) ...