NEWS LETTER

安卓逆向第一解:BUUCTF-Java逆向解密

  • Home
  • Android-reverse-1st.html
Scroll down

Java逆向解密1

背景描述:程序员小张不小心弄丢了加密文件用的秘钥,已知还好小张曾经编写了一个秘钥验证算法,聪明的你能帮小张找到秘钥吗?

注意:得到的 flag 请包上 flag{} 提交

题目附件:点击这里下载

反编译

我们通过jd-gui反编译获得的.class文件,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.ArrayList;
import java.util.Scanner;

public class Reverse {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("Please input the flag );
String str = s.next();
System.out.println("Your input is );
System.out.println(str);
char[] stringArr = str.toCharArray();
Encrypt(stringArr);
}

public static void Encrypt(char[] arr) {
ArrayList<Integer> Resultlist = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
int result = arr[i] + 64 ^ 0x20;
Resultlist.add(Integer.valueOf(result));
}
int[] KEY = {
180, 136, 137, 147, 191, 137, 147, 191, 148, 136,
133, 191, 134, 140, 129, 135, 191, 65 };
ArrayList<Integer> KEYList = new ArrayList<>();
for (int j = 0; j < KEY.length; j++)
KEYList.add(Integer.valueOf(KEY[j]));
System.out.println("Result:");
if (Resultlist.equals(KEYList)) {
System.out.println("Congratulations);
} else {
System.err.println("Error);
}
}
}

我们发现这个文件中包含着两个函数,一个是Reverse另外一个是Encrypt,其中Reverse函数让我们输入flag,但是我们哪里有flag?

我们接着往下看,Encrypt中传入形参(也就是我们的输入)并对其进行以下操作:

1
2
for (int i = 0; i < arr.length; i++)
int result = arr[i] + 64 ^ 0x20;

然后在将其与KEY进行ASCII码对比,如果正确则输出Congratulations,否则输出Error

脚本编写

很显然,由上述我们可知,flag[i]+64 ^ 0x20=KEY[i];

现在我们知道KEY,所以flag[i]=KEY[i]-64 ^ 0x20;,我们使用c语言编写代码来实现:

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
main(){
int b[18]={ 180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65 };
char a[18];
for (int i = 0; i < 18; i++) {
a[i] = b[i] - 64 ^ 0x20;
}
printf("%s",a);

}

得到flag

flag

推荐文章
站内
推荐 (5.0%)
6分钟

Hexo博客NJK主题的相关文章智能推荐插件hexo-article-recommender进阶配置(DIY)

DIY客制化文章底部“文章推荐模块”,本篇文章介绍Nunjucks(NJK)模板的hexo主题(如NexT主题)如何实现。hexo-article-recomm

1
i囡漫笔
随心漫笔写文章
站内
推荐 (5.0%)
6分钟

Hexo博客EJS主题的相关文章智能推荐插件hexo-article-recommender进阶配置(DIY)

DIY客制化文章底部“文章推荐模块”,本篇文章介绍EJS模板的hexo主题如何实现。hexo-article-recommender为Hexo博客提供本地化智能

2
i囡漫笔
随心漫笔写文章
站内
推荐 (5.0%)
6分钟

Hexo博客文章底部添加推荐相关文章:使用hexo-article-recommender插件实现

hexo-article-recommender为Hexo博客提供本地化智能文章推荐:融合语义、标题、标签、分类与发布时间五维特征,支持三种策略切换,自动生成带

3
i囡漫笔
随心漫笔写文章
站内
推荐 (4.2%)
14分钟

Java 数组—JAVA语言基础

数组是最为常见的一种数据结构,是相同类型的用一个标识符封装到一起的基本类型数据序列或对象序列。
(本文章参考《Java从入门到精通 第5版 明日科技》。

4
本站作者
原创文章

--- over ---

其他文章
目录导航 置顶
  1. 1. Java逆向解密1
  2. 2. 反编译
  3. 3. 脚本编写
请输入关键词进行搜索