zoukankan      html  css  js  c++  java
  • 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,上哪摸开发经验去,只感觉逆向这坑真是深。

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

    唉,说白了,还是菜。

  • 相关阅读:
    delphi 线程的使用
    mysql + unidac 使用事务例子
    unidac 执行Execute后取得受影响行数。
    关于UNIDAC连接SQLITE3的心得笔记
    FIREDAC的心得
    unidac连接ORACLE免装客户端驱动
    delphi 2010安装unidac
    DELPHI中使用UNIDAC连接ORACLE数据库
    Struts2思维导图
    面试经验And总结
  • 原文地址:https://www.cnblogs.com/sweetbaby/p/10950061.html
Copyright © 2011-2022 走看看