本文为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。


zctf 2016 android writeup - Jieming的博客的更多相关文章

  1. [Android开发系列]IT博客应用

    1.关于坑 好吧,在此之前先来说一下,之前开的坑,恩,确实是坑,前面开的两个android开发教程的坑,对不起,实在是没什么动力了,不过源码都有的,大家可以参照github这个应用 https://g ...

  2. android开发进阶学习博客资源

    Android开发者博客推荐 Android入门级 - 罗宪明 http://blog.csdn.net/wdaming1986 Android入门级 - 魏祝林 http://blog.csdn.n ...

  3. (2016春) 作业1:博客和Github简单练习

    0. 博客和Github简单练习 总分:10分 1. 目的 博客使用:注册.发布博客.博客管理练习 Github使用:注册.文件同步等练习 2. 要求 (总体作业要求参考[链接]) 发布一篇博客: 介 ...

  4. 完整Android开发基础入门博客专栏

    博客地址:http://www.runoob.com/w3cnote/android-tutorial-contents.html

  5. android 开源和一些博客总结

    记录一些开源的android库 (1)Http请求库封装 https://github.com/kevinsawicki/http-request (2)浮动组件,定制化 toast http://f ...

  6. [Android开发系列]IT博客应用V1.3

    首先,感谢使用这款软件并给我意见的朋友们,有你们的意见,才有了这个版本. 其次,检索功能和分类筛选功能(如果是你提的意见,记得在下面mark哦,毕竟读代码你能发现,其实发意见这个就是用自己的邮箱给自己 ...

  7. android 关于ScrollView 的博客做记录学习

    1.Android ScrollView向上滑动控件顶部悬浮效果实现 2.[android]仿知乎ScrollView滚动改变标题栏透明度 3.github开源Android组件资源整理(五)Scro ...

  8. 一个完全关于android编程的技术博客网站

    https://www.oschina.net/android/96/file-process

  9. Qt for PC,Qt for iOS,Qt for Android (居士的博客)

    http://blog.csdn.net/Esonpo/article/details/38081607 http://blog.csdn.net/Esonpo/article/details/380 ...

随机推荐

  1. BBS登录功能

    BBS登录功能 一.后端实现 1.实现验证码 from PIL import Image, ImageDraw, ImageFont import random from io import Byte ...

  2. python妹子图爬虫5千张高清大图突破防盗链福利5千张福利高清大图

    meizitu-spider python通用爬虫-绕过防盗链爬取妹子图 这是一只小巧方便,强大的爬虫,由python编写 所需的库有 requests BeautifulSoup os lxml 伪 ...

  3. SMO算法--SVM(3)

    SMO算法--SVM(3) 利用SMO算法解决这个问题: SMO算法的基本思路: SMO算法是一种启发式的算法(别管启发式这个术语, 感兴趣可了解), 如果所有变量的解都满足最优化的KKT条件, 那么 ...

  4. 基于JSP+Servlet开发在线租车系统 java 源码

    运行环境: 最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论上也可以.IDE环境: Eclipse,Myeclipse,IDEA都可以tomcat环境: Tomcat 7.x,8. ...

  5. Pickle的简单使用

    单词Pickle的中文意思是“泡菜.腌菜.菜酱”的意思,Pickle是Python的一个包,主要功能是对数据进行序列化和反序列化.那么什么叫序列化和反序列化呢? 其序列化过程就是把数据转化成二进制数据 ...

  6. WdatePicker插件知识整理(一)

    当WdatePicker.js里的属性:$wdate=true时,在input里加上class="Wdate"就会在选择框右边出现日期图标,如果您不喜欢这个样式,可以把class= ...

  7. iOS 清理文件缓存

    本文摘自:<msp的昌伟哥哥-iOS开发-清理缓存功能的实现>摘下来的目的就是为了能够学习.还望看到文章的同学,前往原创的博客园.感谢msp的昌伟哥哥的分享精神. 移动应用在处理网络资源时 ...

  8. E - Minimum Spanning Tree Gym - 102220E (转化+贡献)

    In the mathematical discipline of graph theory, the line graph of a simple undirected weighted graph ...

  9. gene cluster|DPG|拉马克主义变异|达尔文主义变异

    生命组学 A gene cluster is part of a gene family. A gene cluster is a group of two or more genes found w ...

  10. SMTP错误码/建议解决方法

    SMTP错误码/建议解决方法 错误总表 420 1. Timeout Communication Problem Encountered During Transmission. Thie Is a ...