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

一个输入框,一个按钮,随便输入提示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)的更多相关文章
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- LeetCode Questions List (LeetCode 问题列表)- Java Solutions
因为在开始写这个博客之前,已经刷了100题了,所以现在还是有很多题目没有加进来,为了方便查找哪些没加进来,先列一个表可以比较清楚的查看,也方便给大家查找.如果有哪些题目的链接有错误,请大家留言和谅解, ...
- 【Leetcode 做题学算法周刊】第五期
首发于微信公众号<前端成长记>,写于 2019.12.06 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 10 ...
- LeetCode All in One 题目讲解汇总(转...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通 ...
- 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 ...
- 线上服务 CPU 100%?一键定位 so easy!
转自: https://my.oschina.net/leejun2005/blog/1524687 摘要: 本文主要针对 Java 服务而言 0.背景 经常做后端服务开发的同学,或多或少都 ...
- 【easy】100. Same Tree
判断两棵二叉树是否相等 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...
- 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 ...
- 【转】GitHub 排名前 100 的安卓、iOS项目简介
GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...
- GitHub iOS-Top 100 简介
GitHub排名前100的iOS第三方汇总简介,方便开发者选择适合的第三方框架. 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, ...
随机推荐
- AI行业精选日报_人工智能(12·23)
日本探索用人工智能指挥交通 据日本共同社报道,日本一家机构正在研究开发一套新的交通系统,将应用人工智能技术分析数据来缓解城市交通拥堵.报道称,在日本新能源和产业技术综合开发机构研发的这套系统中,人工智 ...
- [USACO19FEB]Cow Dating——找规律
原题戳这里 题解 显然原题等价于让我们求这个式子\(\prod\limits_{i=l}^{r}(1-p_i)\sum\limits_{i=l}^{r}\frac{p_i}{1-p_i}\)的最大值是 ...
- [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 ...
- 给程序添加git commit信息
遇到了一个客户程序出问题,自己这边始终无法重现的bug.为了检查问题,查到了一个添加git的commit信息到程序中的方法,感觉对程序版本控制十分好用. 一,项目中添加如下文件 文件结构: GitVe ...
- 洛谷 P1355 神秘大三角(计算几何基础)
P1355 神秘大三角 题目提供者yeszy 标签 福建省历届夏令营 难度 普及/提高- 题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三 ...
- Postman集合/文件夹/请求中脚本的执行顺序
Postman的Collection(集合)/Folder(集合的子文件夹)/Request(请求)中都有Pre-request Script(请求前脚本)和Tests(请求后脚本) 这个功能类似于不 ...
- 树莓派安装QT(全部库包括)
在网上现有的资料中大部分只有前两个命令,少量有三个命令,因此写下该博客 在树莓派上安装QT5的全部库,包括QtQuick.QtMultimedia库. sudo apt-get install qt5 ...
- MIME协议(六) -- MIME实例分析
MIME实例分析 了解MIME协议的基本组织结构后,下面用Outlook Express撰写出一封显示效果如图4所示的电子邮件,然后分析该邮件的源文件,以便读者更加深入地了解MIME协议. 1. 启动 ...
- IDEA2019.1.3的安装和破解
上一篇文章我有写过我会尝试安装IDEA(这玩意儿收费啊!),倘若尝试成功以后都会用它编译,很幸运,我安装成功了,所以今天这篇文章我来写安装和破解方法. IDEA界面: 首先我们访问官方网站:htt ...
- PDB GDB 调试代码
https://blog.csdn.net/zdy0_2004/article/details/80102076 https://www.jianshu.com/p/fb5f791fcb18