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

一个输入框,一个按钮,随便输入提示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. 转:SpringBoot 自定义异常@ContollerAdvice ExceptionHandler不起作用

    原文链接:https://blog.csdn.net/evanxuhe/article/details/78650979 为了统一异常,我们通常定义一个统一管理所有Exception,包括自定义Exc ...

  2. bzoj1497: [NOI2006]最大获利(最小割)

    传送门 第一眼看去:好难 第二眼:不就是个裸的最大权闭合子图么…… 我们从源点向所有用户连边,容量为收益,用户向自己的中转站连边,容量为INF,中转站向汇点连边,容量为费用 那么总收益-最小割就是答案 ...

  3. mybatis sql语句中转义字符

    问题: 在mapper  ***.xml中的sql语句中,不能直接用大于号.小于号要用转义字符 解决方法:   1.转义字符串 小于号    <    < 大于号    >    & ...

  4. SpringBoot 测试类 @RunWith & @SpringBootTest

    @RunWith(SpringRunner.class) @SpringBootTest public class RabbitMqTest { @Autowired RabbitMqSender r ...

  5. 一个轻量级的模态组件,“礼貌地”要求您的用户停止使用过时的IE浏览器

    插件github地址:https://github.com/panteng/ie-blocker 我们在做项目时,会考虑到浏览器的兼容问题,当然做,全浏览器都支持的项目我还没经历过,也不想经历,目前做 ...

  6. 第一次使用Open Live Writer写博客

    写一下来试一试,感觉还是蛮有趣的.但是我并不知道写下来的文章是什么格式的,我刚才用VS Code打开看了一下好像都是二进制格式. 7.5正式入职,已经过去七天了.等培训结束就要去Base地了,新的生活 ...

  7. sublime中替换成换行

    ctrl + h 打开替换窗口. replace with里输入 ctrl + shift + enter

  8. C++ #include<algorithm>

    今天下午大致学完了进阶指南中algorithm头文件下的内容,在这里进行一个总结.   reverse翻转   顾名思义,reverse进行的操作就是翻转原来的顺序,理解非常简单,故不赘述. 操作样例 ...

  9. Linux的简单命令(防火墙篇)

    名称 解释 重启 reboot 关机 shutdown  -h   now poweroff 查看本机IP地址 ifconfig 查看默认网卡信息的文件 cat /etc/sysconfig/netw ...

  10. OUC_Summer Training_ DIV2_#12(DP1) 723

    这一次是做练习,主要了解了两个算法,最大子矩阵和,最长上升子序列. 先看题好啦. A - To The Max Time Limit:1000MS     Memory Limit:32768KB   ...