JCTF 2014 小菜一碟
测试文件:https://static2.ichunqiu.com/icq/resources/fileupload//CTF/JCTF2014/re100
1.准备

获得信息
- ZIP文件
- Java文件
用解压文件打开

获得信息
- APK文件
2.Smali2JavaUI打开

/**
* Generated by smali2java 1.0.0.558
* Copyright (C) 2013 Hensence.com
*/ package com.example.encoding; import android.app.Activity;
import android.widget.Button;
import android.widget.EditText;
import java.security.NoSuchAlgorithmException;
import java.security.MessageDigest;
import android.util.Base64;
import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import android.view.MenuInflater; public class MainActivity extends Activity {
private Button button;
private MyDialog dialog1;
private MyDialog dialog2;
private MyDialog dialog3;
private EditText edittext;
private StringBuffer str; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(0x7f030000);
dialog1 = new MyDialog(this, "try again");
dialog2 = new MyDialog(this, "congratulations, you success!!!");
dialog3 = new MyDialog(this, "sorry,please try again");
edittext = (EditText)findViewById(0x7f080000);
button = (Button)findViewById(0x7f080001);
button.setOnClickListener(new View.OnClickListener(this) { 1(MainActivity p1) {
} public void onClick(View v) {
MyDialog dialog3 = this$0new StringBuffer(edittext.getText().toString());
str = localString1;
if(str.length() < 0x5) {
edittext.setText("");
dialog1.showDialog();
return;
}
str.reverse();
Log.i("ClownQiang", localString1.append(new String(str)).toString());
String md5_string = encode(new String(str));
Log.i("ClownQiang", str);
String base64 = getBASE64(md5_string).trim();
Log.i("ClownQiang", md5_string);
if(base64.equalsIgnoreCase("NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk=")) {
dialog2.showDialog();
return;
}
edittext.setText("");
dialog3.showDialog();
}
});
} public static String getBASE64(String s) {
if(s == null) {
return null;
}
return Base64.encodeToString(getBytes(), 0x0);
} public static final String encode(String s) {
// :( Parsing error. Please contact me.
} public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(0x7f070000, menu);
return true;
}
}
3.代码分析
提取出主要的代码
str.reverse();//字符串反向
Log.i("ClownQiang", localString1.append(new String(str)).toString());
String md5_string = encode(new String(str));//md5加密
Log.i("ClownQiang", str);
String base64 = getBASE64(md5_string).trim();//base64加密
Log.i("ClownQiang", md5_string);
if(base64.equalsIgnoreCase("NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk=")) {
dialog2.showDialog();
return;
}
根据代码,我们只需要将经过md5和base64加密后的字符串"NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk="解密后反向即可。
base64解密:756d2fc84d07a356c8f68f71fe76e189
md5解密:}321nimda{galflj
反向输出:jlflag{admin123}
4.get flag!
flag{admin123}
JCTF 2014 小菜一碟的更多相关文章
- JCTF 2014 小菜两碟
测试文件:https://static2.ichunqiu.com/icq/resources/fileupload//CTF/JCTF2014/re200 参考文章:https://blog.csd ...
- JCTF 2014(Reverse)
小菜一碟: 点击下载附件 下载的附件没有后缀,用c32打开看看 是apk文件,用Smali2JavaUI打开 程序把输入框的字符串反转,然后进行MD5加密,最后进行base64编码,与NzU2ZDJm ...
- ▲教你如何轻易的做linux计划任务▲——小菜一碟
一次性计划任务的安排: at :安排作业在某一时刻执行一次(一般都是用它) batch:安排作业在系统负载不重时执行一次 第一步: #service atd start 开启一次性计划任务 at ...
- JCTF 2014(Misc)
小试身手: 点击下载附件 res/raw/hehe,打开 得到flag
- 转载:iOS开发之让你的应用“动”起来
在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画 ...
- iOS开发系列--让你的应用“动”起来
--iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...
- [翻译]用 Puppet 搭建易管理的服务器基础架构(4)
我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第四部分. 原文地址:http://blog.jobbole.com/89214/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...
- 如何读懂复杂的C语言声明
本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/howto-understand-complicated-declaration-of-c.ht ...
- Google推荐的图片加载库Glide介绍
英文原文 Introduction to Glide, Image Loader Library for Android, recommended by Google 译文首发 http://jco ...
随机推荐
- shell练习--PAT题目1002:写出这个数(失败案例)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内输出 n 的 ...
- Thread的几种方法的使用
1:setPriority() 设置线程的优先级,从1 到10. 5是默认的. 1是最低优先级. 10是最高优先级 public class MyThread01 implements Runn ...
- 计蒜客 T2237 魔法 分类讨论
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- Java——容器(泛型)
[泛型] 起因:JDK1.4之前类型不明确 <1>装入集合的类型都被当做Object对待,从而失去自己的实际类型. <2>从集合中取出时往往需要转型,效率低,且很容易出错 ...
- django FBV +CBV 视图处理方式总结
1.FBV(function base views) 在视图里使用函数处理请求. url: re_path('fbv', views.fbv), # url(r'^fbv' ...
- BZOJ 4939: [Ynoi2016]掉进兔子洞(莫队+bitset)
传送门 解题思路 刚开始想到了莫队+\(bitset\)去维护信息,结果发现空间不太够..试了各种奇技淫巧都\(MLE\),最后\(\%\)了发题解发现似乎可以分段做..这道题做法具体来说就是开\(3 ...
- Spring Cloud教程(十二)加密和解密
Spring Cloud具有一个用于在本地解密属性值的Environment预处理器.它遵循与Config Server相同的规则,并通过encrypt.*具有相同的外部配置.因此,您可以使用{cip ...
- Oracle诊断:在程序的运行中,有时候数据库会断开连接
在程序的运行中,有时候数据库会断开连接,然后报下面错误: ORA-12519: TNS:no appropriate service handler found 可用的服务处理程序没有找到. 1. ...
- React Native商城项目实战08 - 设置“More”界面cell
1.自定义可复用的cell More/CommonCell.js: /** * 自定义可复用的cell */ import React, { Component } from 'react'; imp ...
- centos 6.10源码安装mysql5.5.62实验
查看系统版本 [root@ABC ~]# cat /etc/redhat-release CentOS release 6.10 (Final) 下载mysql5.5.62源码包,解压后安装 tar ...