XCTF (app2)

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

XCTF (app2)

打开JEB反编译。

XCTF (app2)

如果两个输入框的长度都不为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类,所以我们跟进查看。

XCTF (app2)

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

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

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

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

XCTF (app2)

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

XCTF (app2)

用python脚本解密如下图。

XCTF (app2)

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

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

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

XCTF (app2)

尝试解密,得到明文后提交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)

上一篇:html + css手机自适应效果


下一篇:Android开发遇到的问题