本文为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. 如何判断Office是32位还是64位?

    对于持续学习VBA的老铁们,有必要了解Office的位数. 如果系统是32位的,则不需要判断Office位数了,因为只能安装32位Office. 下面只讨论64位系统中,Office的位数判断问题. ...

  2. memcached安装使用相关-php

    1.windows下面: 为什么memcache官方没有for windows的版本下载地址,现在怎么办? https://segmentfault.com/q/1010000002219198 32 ...

  3. 有关iOS热更新

    iOS热更新的几篇文章,看完这几篇,自己集成一下.下面说一下我集成时遇到的问题. 这是原作者的JSPatch的讲解的文章:<JSPatch – 动态更新iOS APP>.<JSPat ...

  4. sphinx转pdf显示中文

    在conf.py中 修改, 加入 ctex包 latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize ...

  5. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:数据集高层操作

    import tempfile import tensorflow as tf # 1. 列举输入文件. # 输入数据生成的训练和测试数据. train_files = tf.train.match_ ...

  6. hdu2222 (AC自动机模板)

    题:http://acm.hdu.edu.cn/showproblem.php?pid=2222 学习出:https://bestsort.cn/2019/04/28/402/ 主要是fail的建立. ...

  7. \_\_str\_\_和\_\_repr\_\_

    目录 __str__和__repr__ 一.__str__ 二.repr __str__和__repr__ 一.__str__ 打印时触发 class Foo: pass obj = Foo() pr ...

  8. Perl: 单引号里面的直接给当做标量了,而直接输出($`)的话就是变量值,即相符段落的前置字符会存到这里。输出‘$`’ 就变成标量值了

    print '$`'."\n";print '$&'."\n";print $'."\n"; 输出: $`$& 而直接输出( ...

  9. 设置PPT版式

    1.点击视图,幻灯片母版 2.选中某个PPT母版,可进行编辑

  10. JSP和EL和JSTL

    什么是JSP Java Server Page的缩写从用户角度看待,就是一个网页从程序员角度看待,其实是一个java类,它继承了Servlet,所以可以直接说jsp就是一个Servlet 为什么会有J ...