打开app,有两个输入框和一个按钮。点击按钮会跳转到新的页面显示Waiting for you.

打开JEB反编译。

如果两个输入框的长度都不为0,那么获取这两个值到v0和v1中,Log记录日志。

创建了一个Intent对象v2,参数是Context和SecondActivity类。

网上查了查Context的概念。

Context可以理解成一个聚宝盆,在当前环境下你能拿到的参数都可以从context出发去拿,而不仅仅是放URL的.从里面可以拿到request,session,response.......,可以说只要你拿到了context就可以访问任何你有权限访问的东西。

这里我理解的是,这个Context是一个容器,它里面包含了程序执行到这一步时所有的数据。当然,在输入框中输入的信息也被包含在这个Context中。

再往下用putExtra给输入的字符串做映射,也就是说ili和lil分别成为了v0和v1的键名。

以上相当于做一些初始化工作,最后调用startActivity函数启动。

由于在创建Intent对象时用到了SecondActivity类,所以我们跟进查看。

v1和v2读取键名获得输入的字符串。在if判断中把v1和v2相加,调用native层的doRawData函数,再将返回值与VEIzd/V2UPYNdn/bxH3Xig==作比较。

到这里思路就清晰了,只要找到加密算法,写出逆向脚本就能得到flag了。

打开lib文件夹中的so。(这里需要注意的是,要打开armeabi-v7a才行。我一开始打开的是armeabi,这个文件中缺少decode和dorawdata函数,不知道为什么)

放到IDA中,找到dorawdata函数。这里首先要在变量a1上按y,改名为JNIEnv*,这样IDA才能正确分析。如下图所示。

也不用分析了,就是一个AES加密。

用python脚本解密如下图。

我以为,aimage是用户名,tencent是密码,这样输入进去就得到flag了,结果并不行。然后把各种组合都试了一遍同样如此。

原因可能是后面的0x03的缘故吧。

之后想起来在另一个类中也存在着一串字符,如下图。

尝试解密,得到明文后提交flag居然就成功了╮(╯▽╰)╭。下面是python脚本:

import base64
from Crypto.Cipher import AES
cipher=base64.b64decode("9YuQ2dk8CSaCe7DTAmaqAA==")
key="thisisatestkey=="
aes=AES.new(key,AES.MODE_ECB)
msg=aes.decrypt(cipher)
print msg

这个题虽然做出来了,但还是觉着理解的不够透彻。原因是对安卓开发的知识了解的太少,这也没办法,从来没写过一个app,上哪摸开发经验去,只感觉逆向这坑真是深。

这题不难,可以说是很简单的那种。之前做过的题,没有这么多废代码(对解题无用的代码),几乎每一行代码都能用得上。乍一做这题,咋这么多类,瞬间就没有了解题的斗志了。还是到了第二天静下心来才解决的。

唉,说白了,还是菜。

XCTF (app2)的更多相关文章

  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 解题过程 进入注册页面,尝试注册: 进行登录 ...

随机推荐

  1. 谷歌插件学习笔记:把iframe干掉……

    好久不写博客了,感觉自己变得越来越懒了,是没有时间吗?不是,是自己变得越来越懒了,好多东西不愿意去总结了,可能也是学的不精总结不出来什么玩意儿.不过,一切都是借口.还是坚持学习,坚持写博客吧,虽然写的 ...

  2. Object-C(自学1)

    ----- 需求索要 自学了下 OBJECt-C  ----- 就基础部分一些 和操作 command + R 运行command +B 只编译.m文件 NSlog() = printfNSLog 是 ...

  3. BZOJ 2836: 魔法树 (树链剖分+线段树)

    板题-记得开longlong #include <cstdio> #include <cctype> #include <cstring> #include < ...

  4. 直接插入排序java代码

    //直接插入排序(无哨兵) 通过测试 public class InsertSortTest{ public static void insertSort(int[] arr) { for (int ...

  5. 5天noip训练心得

    day1 100+95+0=195 T1 二分答案,并查集,很像noip2017 day2 T1 T2 缩环,然后数据结构维护求答案,貌似也是原题 T3 树形dp,比赛上没有做出来, day2 90+ ...

  6. HDU 6055 - Regular polygon | 2017 Multi-University Training Contest 2

    /* HDU 6055 - Regular polygon [ 分析,枚举 ] 题意: 给出 x,y 都在 [-100, +100] 范围内的 N 个整点,问组成的正多边形的数目是多少 N <= ...

  7. Android源码开发利器——Java源码调试(基于4.1.2)

     原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038     调试Android Java源码 草帽的后花园——Neo 写在之前的 ...

  8. LOJ #2733 [JOI2016春季合宿]Sandwiches (DP)

    题目链接 https://loj.ac/problem/2733 题解 神仙题-- 首先可以观察到一个结论: 目标块的两块小三明治一定分别是最后和倒数第二个被吃的. 由此我们可以考虑这两块谁先被吃.这 ...

  9. AtCoder AGC007E Shik and Travel (二分、DP、启发式合并)

    题目链接 https://atcoder.jp/contests/agc007/tasks/agc007_e 题解 首先有个很朴素的想法是,二分答案\(mid\)后使用可行性DP, 设\(dp[u][ ...

  10. RabbitMQ TTL、死信队列

    TTL概念 TTL是Time To Live的缩写,也就是生存时间. RabbitMQ支持消息的过期时间,在消息发送时可以进行指定. RabbitMQ支持队列的过期时间,从消息入队列开始计算,只要超过 ...