先安装跑一下,不知道为啥我这里模拟器打不开,传到手机上就可以。如下图。

一个输入框,一个按钮,随便输入提示no。

放入JEB反编译。

可以看到有6个Class。大体看一遍,b和e应该和解题无关,在类a中有AES字眼,那么大致思路就有了:找KEY和加密后的字符串,通过AES对称解密的机制得到正确输入。

不知道是出题人故意的还是编程习惯就是不好,每个类命名为abcd,类中的函数也命名为abcd,看代码会有点绕,耐心找一下其实还是挺简单的。

先从类d开始逆向分析,调用MainActivity中的a函数,这个a传入三个形参的a,如下图

然后接着调用两个形参的a,如下图

再调用类c中的a函数,返回的结果与后面的字符串作比较,return一个布尔值。显然这串字符串就是要找的加密后的字符串了,如果再能找到AES中的KEY此题就解决了。

查看类c中的a函数。

上来先给v0赋值,用的是arg5调用类c中a函数的返回值。如下图

这里我卡住了好一会,原因是这个参数值不知道是什么,后来在MainActicity中发现。

//我是做出这个题之后查了百度才知道,一个activity启动调用的第一个函数就是onCreate,它主要做这个activity启动时一些必要的初始化工作。

这个v是MainActicity的一个私有String变量,在p函数中进行了赋值,函数很容易理解,把url.png中的第144个字节开始的16长度的字节变成String后赋值给v。144=0x90,打开winhex直接查看,如下图

现在KEY和字符串都已经找到(注意KEY还要经过变化的),最后写个脚本就OK了,我是用JAVA写的,直接复制黏贴JEB中反编译的代码,十分方便。。。

 import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec; public class MainActivity {
public static void main(String[] args) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
StringBuilder v1 = new StringBuilder();
int v0_1;
String v0_2;
String arg4 = "this_is_the_key."; //在winhex中发现
for(v0_1 = 0; v0_1 < arg4.length(); v0_1 += 2) { //对KEY进行二次变换,这是有类c中的函数分析得到的
v1.append(arg4.charAt(v0_1 + 1));
v1.append(arg4.charAt(v0_1));
}
v0_2 = v1.toString();
byte key[] = v0_2.getBytes(); //转换成Bytes数组
SecretKeySpec a;
Cipher b;
a = new SecretKeySpec(key, "AES");
b = Cipher.getInstance("AES/ECB/PKCS5Padding");
byte flag[] = {21, -93, -68, -94, 86, 117, -19, -68,
-92, 33, 50, 118, 16, 13, 1, -15, -13, 3, 4, 103, -18, 81, 30, 68, 54, -93, 44, -23,
93, 98, 5, 59};
b.init(Cipher.DECRYPT_MODE,a); //这里注意前面的参数,选择相应的解密参数 // String sflag = b.doFinal(flag).toString(); 一开始我是这样写的,结果不对,必须要向下面这样转utf-8才行
String AES_decode=new String(b.doFinal(flag),"utf-8");
System.out.println(AES_decode);
}
}

LCTF (easy-100)的更多相关文章

  1. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  2. LeetCode Questions List (LeetCode 问题列表)- Java Solutions

    因为在开始写这个博客之前,已经刷了100题了,所以现在还是有很多题目没有加进来,为了方便查找哪些没加进来,先列一个表可以比较清楚的查看,也方便给大家查找.如果有哪些题目的链接有错误,请大家留言和谅解, ...

  3. 【Leetcode 做题学算法周刊】第五期

    首发于微信公众号<前端成长记>,写于 2019.12.06 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 10 ...

  4. LeetCode All in One 题目讲解汇总(转...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通 ...

  5. LeetCode前100题(EASY难度)

    1 Two Sum Given an array of integers, return indices of the two numbers such that they add up to a s ...

  6. 线上服务 CPU 100%?一键定位 so easy!

      转自:  https://my.oschina.net/leejun2005/blog/1524687   摘要: 本文主要针对 Java 服务而言 0.背景 经常做后端服务开发的同学,或多或少都 ...

  7. 【easy】100. Same Tree

    判断两棵二叉树是否相等 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...

  8. 100. Remove Duplicates from Sorted Array && 101. Remove Duplicates from Sorted Array II [easy]

    这两题类似,所以放在一起,先看第一题: Description Given a sorted array, remove the duplicates in place such that each ...

  9. 【转】GitHub 排名前 100 的安卓、iOS项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  10. GitHub iOS-Top 100 简介

    GitHub排名前100的iOS第三方汇总简介,方便开发者选择适合的第三方框架. 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, ...

随机推荐

  1. AI行业精选日报_人工智能(12·23)

    日本探索用人工智能指挥交通 据日本共同社报道,日本一家机构正在研究开发一套新的交通系统,将应用人工智能技术分析数据来缓解城市交通拥堵.报道称,在日本新能源和产业技术综合开发机构研发的这套系统中,人工智 ...

  2. [USACO19FEB]Cow Dating——找规律

    原题戳这里 题解 显然原题等价于让我们求这个式子\(\prod\limits_{i=l}^{r}(1-p_i)\sum\limits_{i=l}^{r}\frac{p_i}{1-p_i}\)的最大值是 ...

  3. [Cypress] Use the Most Robust Selector for Cypress Tests

    Which selectors your choose for your tests matter, a lot. In this lesson, we'll see the recommended ...

  4. 给程序添加git commit信息

    遇到了一个客户程序出问题,自己这边始终无法重现的bug.为了检查问题,查到了一个添加git的commit信息到程序中的方法,感觉对程序版本控制十分好用. 一,项目中添加如下文件 文件结构: GitVe ...

  5. 洛谷 P1355 神秘大三角(计算几何基础)

    P1355 神秘大三角 题目提供者yeszy 标签 福建省历届夏令营 难度 普及/提高- 题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三 ...

  6. Postman集合/文件夹/请求中脚本的执行顺序

    Postman的Collection(集合)/Folder(集合的子文件夹)/Request(请求)中都有Pre-request Script(请求前脚本)和Tests(请求后脚本) 这个功能类似于不 ...

  7. 树莓派安装QT(全部库包括)

    在网上现有的资料中大部分只有前两个命令,少量有三个命令,因此写下该博客 在树莓派上安装QT5的全部库,包括QtQuick.QtMultimedia库. sudo apt-get install qt5 ...

  8. MIME协议(六) -- MIME实例分析

    MIME实例分析 了解MIME协议的基本组织结构后,下面用Outlook Express撰写出一封显示效果如图4所示的电子邮件,然后分析该邮件的源文件,以便读者更加深入地了解MIME协议. 1. 启动 ...

  9. IDEA2019.1.3的安装和破解

    上一篇文章我有写过我会尝试安装IDEA(这玩意儿收费啊!),倘若尝试成功以后都会用它编译,很幸运,我安装成功了,所以今天这篇文章我来写安装和破解方法. IDEA界面: ​ 首先我们访问官方网站:htt ...

  10. PDB GDB 调试代码

    https://blog.csdn.net/zdy0_2004/article/details/80102076 https://www.jianshu.com/p/fb5f791fcb18