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 ...
随机推荐
- 对Nuxt的研究
Nuxt就是基于Vue的一个应用框架,采用服务端渲染,让你的SPA应用(Vue)也可以拥有SEO Nuxt的生命周期有些在服务端(Node),客户端,甚至两边都在: 1.其他之前都不存在Window对 ...
- HTML5基础知识汇总(一)
一.HTML的开发工具和使用的浏览器 开发工具:记事本等文本编辑器,Atom.VisualStudioCode( VSCode).Brackets.Sublime text和Hbuider. 浏览器: ...
- sass、less中的scoped属性
1.scoped 的实现原理 Vue中的Less 中的 scoped 属性的效果主要是通过 PostCss 实现的.代码示例: //编译前 <template> <div class ...
- ipcloud上传裁切图片,保存为base64再压缩传给后台
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- 【bzoj3295】[Cqoi2011]动态逆序对
题目描述: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆 ...
- JavaScript实现Tab标签页切换的最简便方式
转载请注明出处:http://www.cnblogs.com/-867259206/p/5664896.html 先说一下最土的一种方法: Html: <div class="tab- ...
- 在github pages网站下用jekyll制作博客教程
https://www.jekyll.com.cn/ https://github.com/onevcat/vno-jekyll https://help.github.com/articles/us ...
- [CSP-S模拟测试]:环(图论+期望)
题目传送门(内部题79) 输入格式 第一行读入两个整数$n,e$表示节点数及$cwystc$已确定的有向边边数. 接下来$e$行,每行两个整数$x,y$描述$cwystc$确定的边. 输出格式 输出一 ...
- C++ STL 二分查找
转载自 https://www.cnblogs.com/Tang-tangt/p/9291018.html 二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_2_一切皆为字节
这里的视频就是字节的形式,为了看着方便转换成了MB.一个字节就是8个二进制 包括文本,都是以字节的形式存储的