本文为2016年zctf中android的writeup。

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

进行算法还原,用户名是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:\Users\gjm1993\Desktop\Test\CTF\Reverse\Finish\ZCTF_200\file\flag.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中修改可以绕过。

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

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

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

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

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

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


最新文章

  1. how-to-install-siege-on-centos-7
  2. putty如何使用
  3. 【01:转自知乎:关于 openSUSE 】
  4. codeforces 706D (字典树)
  5. 《.NET 编程结构》专题汇总(C#)
  6. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
  7. python编程语言 函数的形参
  8. javascript 封装 构造函数继承 非构造函数继承
  9. HTML DOM节点
  10. Win8下,以管理员身份启动VS项目
  11. 决策树模型比较:C4.5,CART,CHAID,QUEST
  12. 解析Linux中的VFS文件系统之文件系统的来源与简介(一)
  13. 使用Linux脚本更新Weblogic部署的应用程序
  14. java从Swagger Api接口获取数据工具类
  15. Django ORM 常用字段和参数
  16. php格式化json字符串
  17. maya2013卸载/安装失败/如何彻底卸载清除干净maya2013注册表和文件的方法
  18. 从源码的角度分析List与Set的区别
  19. u3d 逐个点运动,路径运动。 U3d one by one, path motion.
  20. [翻译]第二天 - Visual Studio 中的 .NET Core 模版一览

热门文章

  1. IDEA 安装破解
  2. 画一画BeagleboneBlack的PCB
  3. JAVA8 函数式接口
  4. RSAUtils加密解密
  5. 在Orcl中通过SQL语句修改创建表
  6. mysql常用方法案例
  7. day11-random模块-随机
  8. Navicat for MySQL远程连接报10038的错误
  9. Django学习之模板层
  10. Part-Linux-2