zoukankan      html  css  js  c++  java
  • zctf 2016 android writeup

    本文为2016年zctf中android的writeup。

    首先点我下载题目。使用jeb反编译,对username和password进行部分验证后,再将username+password及一个数据库查询结果(动态调试可知查询结果为zctf2016)作为Auth.auth()方法的参数,如果返回值为1则跳转到app页面。

    1

    进行算法还原,用户名是zctf,密码是{Notthis}。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class Main {
    public static void main(String[] args) throws Exception {
    byte[] v0 = new byte[64];
    InputStream v3 = new FileInputStream("C:Usersgjm1993DesktopTestCTFReverseFinishCTF_200fileflag.bin");
    do{
    }while(v3.read(v0) > 0);
    v3.close();
    String message = new String(decrypt(v0,"zctf2016"));
    System.out.println(message);
    }
    public static byte[] decrypt(byte[] src, String password) throws Exception {
    SecureRandom v3 = new SecureRandom();
    SecretKey v4 = SecretKeyFactory.getInstance("DES").generateSecret(new DESKeySpec(password.getBytes()));
    Cipher v0 = Cipher.getInstance("DES/ECB/NoPadding");
    v0.init(2, v4, v3);
    return v0.doFinal(src);
    }
    }

    在oncreate方法中有两部分影响程序调试,在smali中修改可以绕过。

    3

    关键地方如下图所示,在sayHelloInc函数下断点进行动态调试。

    4

    动态调试时遇到问题:静态分析时在armeabi下的so下断,动态调试出现断点处汇编代码不同(图二的断点对应图一的断点)或断点处汇编代码是DCB指令(下图三)的情况。

    解决方法:把lib下的armeabi-v7a和x86都删去,只保留armeabi。

    5

    6

    7

    分析sayHelloInc函数知{Notthis}作为DES密钥对拼接后的数据流进行解密,解密后马上释放解密后的内容。在free函数处下断点,数据存放在R0寄存器。

    8

    9

    解密后的数据太长明显不是字符串,发现是png图片(头数据89 50 4E 47 0D 0A 1A 0A 00是标准的png格式),png格式结尾是AE 42 60 82,右键存为文件。

    10

    11

    打开图片没有flag说明flag隐藏在图片中,用stegsolve查看图片中隐藏的flag。

    12


  • 相关阅读:
    python学习:设计一个算法将缺失的数字找出来。
    zabbix如何监控进程
    centos7 网桥的配置
    Zabbix 3.0 监控Web
    一个监控进程的脚本,若进程异常重启进程
    centos 6.8 下安装redmine(缺陷跟踪系统)
    iOS UICollectionView简单使用
    ios开发图片点击放大
    IOS中实现图片点击全屏预览
    iOS 中有用的开源库
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12326320.html
Copyright © 2011-2022 走看看