XCTF (app2)
打开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)的更多相关文章
- 攻防世界(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 解题过程 进入注册页面,尝试注册: 进行登录 ...
随机推荐
- Java笔试题及答案
1.下列不可作为java语言修饰符的是(D) A) a1 B) $1 C) _1 D) 11 答案:java标识符不能以数字开头,包含英文字母,数字,下划线以及$ 2.有一段java 应用程序,它的主 ...
- JS 函数相关的声明调用
// 函数声明方法一 function f (a, b) { return a + b; } // 函数调用 console.log(f(1, 4)); // 函数声明方法二 var num = fu ...
- index首页加载数据库数据方法
https://blog.csdn.net/qq_33198758/article/details/82987805 在做网站的时候,会遇到需要首页加载数据库数据的情况.而web.xml配置的首页: ...
- Java之正则表达式来判断字符串中是否包含字母
/** * 使用正则表达式来判断字符串中是否包含字母 * @param str 待检验的字符串 * @return 返回是否包含 * true: 包含字母 ;false 不包含字母 */ public ...
- ckeditor从word粘贴图片
自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...
- VirtualBox:无法访问共享文件夹
造冰箱的大熊猫@cnblogs 2019/5/9 问题:VirtualBox中安装Linux虚拟机,设置宿主机某个文件夹为虚拟机的共享文件夹.在虚拟机中,该共享文件夹显示为“sf_×××”,打开该文件 ...
- 在py文件中运行flask cli命令
主要是打包成exe之后,用于运行命令行. 命令行是 @app.cli.command() def mock(): ... 这样定义的 本来是用flask mock 这样方式运行的 打包后,希望用 ap ...
- 整合到 Mockito 2
为了能够持续改进 Mockito 和在未来提升测试体验,我们希望你能够升级到 Mockito 2.10!Mockito 按照语义化版本(semantic versioning)的方式对版本进行编排,并 ...
- Node.js 安装与开发
Node.js 简介 Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.Node.js对一些 ...
- linux 动态库文件stripped属性理解
[file命令not stripped] UNIX下*.o和*.so文件显示的stripped和not stripped是什么意思? 表示符号表是否被清除. 在centos 6.2下用file命令查看 ...